All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.silverspoon.bulldog.devices.portexpander.PCF8574DigitalInput Maven / Gradle / Ivy

There is a newer version: 0.3.0
Show newest version
package io.silverspoon.bulldog.devices.portexpander;

import io.silverspoon.bulldog.core.Edge;
import io.silverspoon.bulldog.core.Signal;
import io.silverspoon.bulldog.core.gpio.Pin;
import io.silverspoon.bulldog.core.gpio.base.AbstractDigitalInput;
import io.silverspoon.bulldog.core.gpio.event.InterruptEventArgs;
import io.silverspoon.bulldog.core.util.BitMagic;

public class PCF8574DigitalInput extends AbstractDigitalInput {

   private PCF8574 expander;

   public PCF8574DigitalInput(Pin pin, PCF8574 expander) {
      super(pin);
      this.expander = expander;
   }

   @Override
   public Signal read() {
      byte state = expander.readState();
      return Signal.fromNumericValue((state >> getPin().getAddress()) & 1);
   }

   @Override
   protected void setupImpl() {
      byte state = expander.getState();
      byte newState = BitMagic.setBit(state, getPin().getAddress(), 1);
      expander.writeState(newState);
   }

   @Override
   protected void teardownImpl() {
   }

   public void handleInterruptEvent(Signal oldState, Signal currentState) {
      if (!areInterruptsEnabled()) {
         return;
      }

      Edge edge = determineInterruptEdge(oldState, currentState);
      if (!isInterruptTrigger(edge)) {
         return;
      }

      fireInterruptEvent(new InterruptEventArgs(getPin(), edge));
   }

   private boolean isInterruptTrigger(Edge edge) {
      return edge == getInterruptTrigger() || getInterruptTrigger() == Edge.Both;
   }

   private Edge determineInterruptEdge(Signal oldState, Signal currentState) {
      if (currentState == Signal.Low && oldState == Signal.High) {
         return Edge.Falling;
      }
      return Edge.Rising;
   }

   @Override
   protected void enableInterruptsImpl() {
   }

   @Override
   protected void disableInterruptsImpl() {
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy