@Override public void setState(Pin pin, PinState state) { // validate if (hasPin(pin) == false) { throw new InvalidPinException(pin); } // only permit invocation on pins set to DIGITAL_OUTPUT modes if (getPinCache(pin).getMode() != PinMode.DIGITAL_OUTPUT) { throw new InvalidPinModeException( pin, "Invalid pin mode on pin [" + pin.getName() + "]; cannot setState() when pin mode is [" + getPinCache(pin).getMode().getName() + "]"); } try { // determine A or B port based on pin address if (pin.getAddress() < GPIO_B_OFFSET) { setStateA(pin, state); } else { setStateB(pin, state); } } catch (IOException ex) { throw new RuntimeException(ex); } // cache pin state getPinCache(pin).setState(state); }
@Override public void setMode(Pin pin, PinMode mode) { // validate if (!pin.getSupportedPinModes().contains(mode)) { throw new InvalidPinModeException( pin, "Invalid pin mode [" + mode.getName() + "]; pin [" + pin.getName() + "] does not support this mode."); } // validate if (!pin.getSupportedPinModes().contains(mode)) { throw new UnsupportedPinModeException(pin, mode); } // determine A or B port based on pin address try { if (pin.getAddress() < GPIO_B_OFFSET) { setModeA(pin, mode); } else { setModeB(pin, mode); } } catch (IOException ex) { throw new RuntimeException(ex); } // cache mode getPinCache(pin).setMode(mode); // if any pins are configured as input pins, then we need to start the interrupt monitoring // thread if (currentDirectionA > 0 || currentDirectionB > 0) { // if the monitor has not been started, then start it now if (monitor == null) { // start monitoring thread monitor = new GpioStateMonitor(this); monitor.start(); } } else { // shutdown and destroy monitoring thread since there are no input pins configured if (monitor != null) { monitor.shutdown(); monitor = null; } } }
@Override public GpioPinPwmOutput provisionPwmOutputPin(GpioProvider provider, Pin pin, int defaultValue) { return provisionPwmOutputPin(provider, pin, pin.getName(), defaultValue); }
@Override public GpioPinAnalogOutput provisionAnalogOutputPin( GpioProvider provider, Pin pin, double defaultValue) { return provisionAnalogOutputPin(provider, pin, pin.getName(), defaultValue); }
@Override public GpioPinDigitalOutput provisionDigitalOutputPin( GpioProvider provider, Pin pin, PinState defaultState) { return provisionDigitalOutputPin(provider, pin, pin.getName(), defaultState); }
@Override public GpioPinDigitalInput provisionDigitalInputPin( GpioProvider provider, Pin pin, PinPullResistance resistance) { // create new GPIO pin instance return provisionDigitalInputPin(provider, pin, pin.getName(), resistance); }
@Override public GpioPinDigitalMultipurpose provisionDigitalMultipurposePin( GpioProvider provider, Pin pin, PinMode mode, PinPullResistance resistance) { // create new GPIO pin instance return provisionDigitalMultipurposePin(provider, pin, pin.getName(), mode, resistance); }
@Override public GpioPin provisionPin(GpioProvider provider, Pin pin, PinMode mode) { return provisionPin(provider, pin, pin.getName(), mode); }