Ejemplo n.º 1
0
  @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);
  }
Ejemplo n.º 2
0
  @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;
      }
    }
  }
Ejemplo n.º 3
0
 @Override
 public GpioPinPwmOutput provisionPwmOutputPin(GpioProvider provider, Pin pin, int defaultValue) {
   return provisionPwmOutputPin(provider, pin, pin.getName(), defaultValue);
 }
Ejemplo n.º 4
0
 @Override
 public GpioPinAnalogOutput provisionAnalogOutputPin(
     GpioProvider provider, Pin pin, double defaultValue) {
   return provisionAnalogOutputPin(provider, pin, pin.getName(), defaultValue);
 }
Ejemplo n.º 5
0
 @Override
 public GpioPinDigitalOutput provisionDigitalOutputPin(
     GpioProvider provider, Pin pin, PinState defaultState) {
   return provisionDigitalOutputPin(provider, pin, pin.getName(), defaultState);
 }
Ejemplo n.º 6
0
 @Override
 public GpioPinDigitalInput provisionDigitalInputPin(
     GpioProvider provider, Pin pin, PinPullResistance resistance) {
   // create new GPIO pin instance
   return provisionDigitalInputPin(provider, pin, pin.getName(), resistance);
 }
Ejemplo n.º 7
0
 @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);
 }
Ejemplo n.º 8
0
 @Override
 public GpioPin provisionPin(GpioProvider provider, Pin pin, PinMode mode) {
   return provisionPin(provider, pin, pin.getName(), mode);
 }