001package com.pi4j.io.gpio;
002
003/*
004 * #%L
005 * **********************************************************************
006 * ORGANIZATION  :  Pi4J
007 * PROJECT       :  Pi4J :: Java Library (Core)
008 * FILENAME      :  GpioController.java
009 *
010 * This file is part of the Pi4J project. More information about
011 * this project can be found here:  https://www.pi4j.com/
012 * **********************************************************************
013 * %%
014 * Copyright (C) 2012 - 2019 Pi4J
015 * %%
016 * This program is free software: you can redistribute it and/or modify
017 * it under the terms of the GNU Lesser General Public License as
018 * published by the Free Software Foundation, either version 3 of the
019 * License, or (at your option) any later version.
020 *
021 * This program is distributed in the hope that it will be useful,
022 * but WITHOUT ANY WARRANTY; without even the implied warranty of
023 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
024 * GNU General Lesser Public License for more details.
025 *
026 * You should have received a copy of the GNU General Lesser Public
027 * License along with this program.  If not, see
028 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
029 * #L%
030 */
031
032import com.pi4j.io.gpio.event.GpioPinListener;
033import com.pi4j.io.gpio.trigger.GpioTrigger;
034
035import java.util.Collection;
036
037/**
038 * Gpio controller interface. This interface describes all operations over GPIO.
039 *
040 * @author Robert Savage (<a
041 *         href="http://www.savagehomeautomation.com">http://www.savagehomeautomation.com</a>)
042 */
043@SuppressWarnings("unused")
044public interface GpioController {
045
046    void export(PinMode mode, PinState defaultState, GpioPin... pin);
047    void export(PinMode mode, GpioPin... pin);
048    boolean isExported(GpioPin... pin);
049
050    /**
051     * Unexport a GPIO pin by Pin instance.
052     * This method will explicitly unexport any Pin whether it has been
053     * provisioned in Pi4J or not.
054     *
055     * @param pin GPIO pin instance (i.e. RaspiPin.GPIO_00)
056     */
057    void unexport(Pin... pin);
058
059    /**
060     * Unexport a GPIO pin by GpioPin instance.
061     * This method will unexport an existing provisoned pin
062     *
063     * @param pin provisioned GPIO pin instance
064     */
065    void unexport(GpioPin... pin);
066
067    /**
068     * Unexport all GPIO pins that have been provisioned by Pi4J
069     * in the context of this program.
070     */
071    void unexportAll();
072
073    void setMode(PinMode mode, GpioPin... pin);
074    PinMode getMode(GpioPin pin);
075    boolean isMode(PinMode mode, GpioPin... pin);
076
077    void setPullResistance(PinPullResistance resistance, GpioPin... pin);
078    PinPullResistance getPullResistance(GpioPin pin);
079    boolean isPullResistance(PinPullResistance resistance, GpioPin... pin);
080
081    void high(GpioPinDigitalOutput... pin);
082    boolean isHigh(GpioPinDigital... pin);
083
084    void low(GpioPinDigitalOutput... pin);
085    boolean isLow(GpioPinDigital... pin);
086
087    void setState(PinState state, GpioPinDigitalOutput... pin);
088    void setState(boolean state, GpioPinDigitalOutput... pin);
089    boolean isState(PinState state, GpioPinDigital... pin);
090    PinState getState(GpioPinDigital pin);
091
092    void toggle(GpioPinDigitalOutput... pin);
093    void pulse(long milliseconds, GpioPinDigitalOutput... pin);
094
095    void setValue(double value, GpioPinAnalogOutput... pin);
096    double getValue(GpioPinAnalog pin);
097
098    void addListener(GpioPinListener listener, GpioPinInput... pin);
099    void addListener(GpioPinListener[] listeners, GpioPinInput... pin);
100    void removeListener(GpioPinListener listener, GpioPinInput... pin);
101    void removeListener(GpioPinListener[] listeners, GpioPinInput... pin);
102    void removeAllListeners();
103
104    void addTrigger(GpioTrigger trigger, GpioPinInput... pin);
105    void addTrigger(GpioTrigger[] triggers, GpioPinInput... pin);
106    void removeTrigger(GpioTrigger trigger, GpioPinInput... pin);
107    void removeTrigger(GpioTrigger[] triggers, GpioPinInput... pin);
108    void removeAllTriggers();
109
110    GpioPinDigitalMultipurpose provisionDigitalMultipurposePin(GpioProvider provider, Pin pin, String name, PinMode mode, PinPullResistance resistance);
111    GpioPinDigitalMultipurpose provisionDigitalMultipurposePin(GpioProvider provider, Pin pin, PinMode mode, PinPullResistance resistance);
112    GpioPinDigitalMultipurpose provisionDigitalMultipurposePin(GpioProvider provider, Pin pin, String name, PinMode mode);
113    GpioPinDigitalMultipurpose provisionDigitalMultipurposePin(GpioProvider provider, Pin pin, PinMode mode);
114    GpioPinDigitalMultipurpose provisionDigitalMultipurposePin(Pin pin, String name, PinMode mode, PinPullResistance resistance);
115    GpioPinDigitalMultipurpose provisionDigitalMultipurposePin(Pin pin, PinMode mode, PinPullResistance resistance);
116    GpioPinDigitalMultipurpose provisionDigitalMultipurposePin(Pin pin, String name, PinMode mode);
117    GpioPinDigitalMultipurpose provisionDigitalMultipurposePin(Pin pin, PinMode mode);
118
119    GpioPinDigitalInput provisionDigitalInputPin(GpioProvider provider, Pin pin, String name, PinPullResistance resistance);
120    GpioPinDigitalInput provisionDigitalInputPin(GpioProvider provider, Pin pin, PinPullResistance resistance);
121    GpioPinDigitalInput provisionDigitalInputPin(GpioProvider provider, Pin pin, String name);
122    GpioPinDigitalInput provisionDigitalInputPin(GpioProvider provider, Pin pin);
123    GpioPinDigitalInput provisionDigitalInputPin(Pin pin, String name, PinPullResistance resistance);
124    GpioPinDigitalInput provisionDigitalInputPin(Pin pin, PinPullResistance resistance);
125    GpioPinDigitalInput provisionDigitalInputPin(Pin pin, String name);
126    GpioPinDigitalInput provisionDigitalInputPin(Pin pin);
127
128    GpioPinDigitalOutput provisionDigitalOutputPin(GpioProvider provider, Pin pin, String name, PinState defaultState);
129    GpioPinDigitalOutput provisionDigitalOutputPin(GpioProvider provider, Pin pin, PinState defaultState);
130    GpioPinDigitalOutput provisionDigitalOutputPin(GpioProvider provider, Pin pin, String name);
131    GpioPinDigitalOutput provisionDigitalOutputPin(GpioProvider provider, Pin pin);
132    GpioPinDigitalOutput provisionDigitalOutputPin(Pin pin, String name, PinState defaultState);
133    GpioPinDigitalOutput provisionDigitalOutputPin(Pin pin, PinState defaultState);
134    GpioPinDigitalOutput provisionDigitalOutputPin(Pin pin, String name);
135    GpioPinDigitalOutput provisionDigitalOutputPin(Pin pin);
136
137    GpioPinAnalogInput provisionAnalogInputPin(GpioProvider provider, Pin pin, String name);
138    GpioPinAnalogInput provisionAnalogInputPin(GpioProvider provider, Pin pin);
139    GpioPinAnalogInput provisionAnalogInputPin(Pin pin, String name);
140    GpioPinAnalogInput provisionAnalogInputPin(Pin pin);
141
142    GpioPinAnalogOutput provisionAnalogOutputPin(GpioProvider provider, Pin pin, String name, double defaultValue);
143    GpioPinAnalogOutput provisionAnalogOutputPin(GpioProvider provider, Pin pin, double defaultValue);
144    GpioPinAnalogOutput provisionAnalogOutputPin(GpioProvider provider, Pin pin, String name);
145    GpioPinAnalogOutput provisionAnalogOutputPin(GpioProvider provider, Pin pin);
146    GpioPinAnalogOutput provisionAnalogOutputPin(Pin pin, String name, double defaultValue);
147    GpioPinAnalogOutput provisionAnalogOutputPin(Pin pin, double defaultValue);
148    GpioPinAnalogOutput provisionAnalogOutputPin(Pin pin, String name);
149    GpioPinAnalogOutput provisionAnalogOutputPin(Pin pin);
150
151    GpioPinPwmOutput provisionPwmOutputPin(GpioProvider provider, Pin pin, String name, int defaultValue);
152    GpioPinPwmOutput provisionPwmOutputPin(GpioProvider provider, Pin pin, int defaultValue);
153    GpioPinPwmOutput provisionPwmOutputPin(GpioProvider provider, Pin pin, String name);
154    GpioPinPwmOutput provisionPwmOutputPin(GpioProvider provider, Pin pin);
155    GpioPinPwmOutput provisionPwmOutputPin(Pin pin, String name, int defaultValue);
156    GpioPinPwmOutput provisionPwmOutputPin(Pin pin, int defaultValue);
157    GpioPinPwmOutput provisionPwmOutputPin(Pin pin, String name);
158    GpioPinPwmOutput provisionPwmOutputPin(Pin pin);
159
160    GpioPinPwmOutput provisionSoftPwmOutputPin(GpioProvider provider, Pin pin, String name, int defaultValue);
161    GpioPinPwmOutput provisionSoftPwmOutputPin(GpioProvider provider, Pin pin, int defaultValue);
162    GpioPinPwmOutput provisionSoftPwmOutputPin(GpioProvider provider, Pin pin, String name);
163    GpioPinPwmOutput provisionSoftPwmOutputPin(GpioProvider provider, Pin pin);
164    GpioPinPwmOutput provisionSoftPwmOutputPin(Pin pin, String name, int defaultValue);
165    GpioPinPwmOutput provisionSoftPwmOutputPin(Pin pin, int defaultValue);
166    GpioPinPwmOutput provisionSoftPwmOutputPin(Pin pin, String name);
167    GpioPinPwmOutput provisionSoftPwmOutputPin(Pin pin);
168
169    GpioPin provisionPin(GpioProvider provider, Pin pin, String name, PinMode mode, PinState defaultState);
170    GpioPin provisionPin(GpioProvider provider, Pin pin, String name, PinMode mode);
171    GpioPin provisionPin(GpioProvider provider, Pin pin, PinMode mode);
172    GpioPin provisionPin(Pin pin, String name, PinMode mode);
173    GpioPin provisionPin(Pin pin, PinMode mode);
174
175    void setShutdownOptions(GpioPinShutdown options, GpioPin... pin);
176    void setShutdownOptions(Boolean unexport, GpioPin... pin);
177    void setShutdownOptions(Boolean unexport, PinState state, GpioPin... pin);
178    void setShutdownOptions(Boolean unexport, PinState state, PinPullResistance resistance, GpioPin... pin);
179    void setShutdownOptions(Boolean unexport, PinState state, PinPullResistance resistance, PinMode mode, GpioPin... pin);
180
181    Collection<GpioPin> getProvisionedPins();
182    GpioPin getProvisionedPin(Pin pin);
183    GpioPin getProvisionedPin(String name);
184
185    void unprovisionPin(GpioPin... pin);
186    boolean isShutdown();
187    void shutdown();
188}