GpioDriver
  public
  
  
  
  interface
  GpioDriver
  
  
      implements
      
        Gpio
      
  
  
| com.google.android.things.userdriver.pio.GpioDriver | 
GPIO user driver.
 A GpioDriver must implement all Gpio functions, but additionally this class provides an
 open() function that will be called whenever a process obtains ownership of the GPIO, to match
 the existing close() function.
Summary
| Inherited constants | 
|---|
|  From
  interface 
    com.google.android.things.pio.Gpio
   | 
| Public methods | |
|---|---|
| 
        abstract
        
        
        
        
        void | 
      close()
      Closes the GPIO pin. | 
| 
        
        default
        
        
        
        String | 
      getName()
      Returns null. | 
| 
        abstract
        
        
        
        
        void | 
      open()
      Opens the GPIO pin. | 
| 
        abstract
        
        
        
        
        void | 
      registerGpioCallback(Handler handler, GpioCallback callback)
      Registers a callback for GPIO edge interrupts. | 
| 
        abstract
        
        
        
        
        void | 
      unregisterGpioCallback(GpioCallback callback)
      Unregisters an interrupt callback. | 
| Inherited methods | |
|---|---|
|  From
interface 
  
    com.google.android.things.pio.Gpio
  
 | |
|  From
interface 
  
    java.io.Closeable
  
 | |
|  From
interface 
  
    java.lang.AutoCloseable
  
 | |
Public methods
close
void close ()
Closes the GPIO pin. This will be called when the GPIO is closed by its owner. Any resources that need to be cleaned up should be done so here. This method may throw IOException to indicate I/O failure, but the GPIO will still be considered closed and may attempt to be re-opened in the future.
| Throws | |
|---|---|
| IOException | on I/O failure; the driver will still be considered closed. | 
getName
String getName ()
Returns null. I/O user drivers can be registered under any name so this returns null by default. Child classes may override this if other behavior is desired.
| Returns | |
|---|---|
| String | |
open
void open ()
Opens the GPIO pin. This will be called when ownership of a GPIO is obtained. The driver should do any initialization needed to configure the GPIO pin for use here.
| Throws | |
|---|---|
| IOException | on I/O failure; the driver will remain closed. | 
registerGpioCallback
void registerGpioCallback (Handler handler, GpioCallback callback)
Registers a callback for GPIO edge interrupts.
 This API is shared with a standard Gpio, but for a GpioDriver some simplifying
 assumptions can be made:
 
- Only one GpioCallbackwill ever be registered at a time.
- The Gpio argument to the GpioCallback methods are not needed, so any value
       (or null) may be provided when making callbacks.
- The return value from onGpioEdge(Gpio)will always be true and can be safely ignored.
- The driver is allowed but not required to post callbacks on the provided Handler.
- Currently the error value passed to onGpioError(Gpio, int)is ignored andOsConstants.ENODEVis always used instead.
Example: Shared GPIO interrupt line
This is common with I2C-to-GPIO expanders, where a bank of GPIOs will share one common interrupt line. The idea is that the GpioDriver receives the common interrupt signal, figures out which of the expander's GPIOs it actually came from, and then dispatch the interrupt to that particular GpioDriver.
 // Implements a single GPIO on the expander.
 public class SharedInterruptGpioDriver implements GpioDriver {
     // The underlying GPIO shared between the whole GPIO bank.
     private Gpio mInterruptGpio;
     // Our callback implementation to handle shared GPIO interrupts.
     private SharedGpioCallback mSharedCallback;
     @Override
     public void registerGpioCallback(Handler handler, GpioCallback callback)
             throws IOException {
         mSharedCallback = new SharedGpioCallback(callback);
         mInterruptGpio.registerGpioCallback(handler, mSharedCallback);
     }
     @Override
     public void unregisterGpioCallback(GpioCallback callback) {
         mInterruptGpio.unregisterGpioCallback(mSharedCallback);
         mSharedCallback = null;
     }
     // Intercept the shared GPIO callback and if it was meant for us, dispatch to the
     // user-facing callback.
     private class SharedGpioCallback implements GpioCallback {
         // The callback registers on this GPIO driver that we dispatch events to.
         private final GpioCallback mRegisteredCallback;
         public SharedGpioCallback(GpioCallback registeredCallback) {
             mRegisteredCallback = registeredCallback;
         }
         @Override
         public boolean onGpioEdge(Gpio gpio) {
             // Do any checking necessary to determine if this is the GPIO that fired.
             //
             // This is for example purposes only and may be inefficient since each GPIO
             // checks the interrupt - better would be a single interrupt handler which
             // dispatches to the proper GPIO driver.
             if (thisGpioHadInterrupt()) {
                 return mRegisteredCallback.onGpioEdge(gpio);
             }
             // If it wasn't meant for this GPIO, do nothing and return true to keep
             // listening for events.
             return true;
         }
         @Override
         public void onGpioError(Gpio gpio, int error) {
             // The underlying interrupt GPIO failed, we won't get any more callbacks.
             mRegisteredCallback.onGpioError(gpio, error);
         }
     }
 }
 | Parameters | |
|---|---|
| handler | Handler: Handler to optionally run callbacks on. Provided as a convenience if needed,
                but it's not required to execute callbacks on this. | 
| callback | GpioCallback: GpioCallback to register; only one will ever be registered at a time. | 
| Throws | |
|---|---|
| IOException | if this GPIO doesn't support interrupts. | 
unregisterGpioCallback
void unregisterGpioCallback (GpioCallback callback)
Unregisters an interrupt callback. Will only be called if a GpioCallback has been previously registered.
| Parameters | |
|---|---|
| callback | GpioCallback: GpioCallback to unregister. | 
- Interfaces
- Classes
