package org.myrobotlab.service; import java.util.List; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.ServiceType; import org.myrobotlab.logging.Level; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.logging.Logging; import org.myrobotlab.logging.LoggingFactory; import org.myrobotlab.service.data.PinData; import org.myrobotlab.service.interfaces.PinArrayControl; import org.myrobotlab.service.interfaces.PinListener; import org.slf4j.Logger; public class Pir extends Service implements PinListener { public final static Logger log = LoggerFactory.getLogger(Pir.class); private static final long serialVersionUID = 1L; /** * This static method returns all the details of the class without it having * to be constructed. It has description, categories, dependencies, and peer * definitions. * * * @return ServiceType - returns all the data * */ static public ServiceType getMetaData() { ServiceType meta = new ServiceType(Pir.class.getCanonicalName()); meta.addDescription("PIR - Passive Infrared Sensor"); meta.setAvailable(true); // false if you do not want it viewable in a // gui // add dependency if necessary // meta.addDependency("org.coolproject", "1.0.0"); meta.addCategory("sensor"); return meta; } public static void main(String[] args) { try { LoggingFactory.getInstance().configure(); LoggingFactory.getInstance().setLevel(Level.INFO); Runtime.start("pir", "Pir"); Runtime.start("gui", "GUIService"); } catch (Exception e) { Logging.logError(e); } } boolean isActive = false; boolean isEnabled = false; Integer pin; PinArrayControl pinControl; List<String> controllers; public Pir(String n) { super(n); } public void attach(PinArrayControl control, int pin) { this.pinControl = control; this.pin = pin; pinControl.attach(this, pin); } public void disable(){ if (pinControl == null){ error("pin control not set"); return; } if (pin == null){ error("pin not set"); return; } pinControl.disablePin(pin); isEnabled = false; broadcastState(); } public void enable(){ if (pinControl == null){ error("pin control not set"); return; } if (pin == null){ error("pin not set"); return; } pinControl.enablePin(pin); isEnabled = true; broadcastState(); } public List<String> refresh(){ controllers = Runtime.getServiceNamesFromInterface(PinArrayControl.class); broadcastState(); return controllers; } @Override public void onPin(PinData pindata) { // log.info("onPin {}", pindata); boolean sense = (pindata.getValue() != 0); if (isActive != sense){ // state change invoke("publishSense", sense); isActive = sense; } } public Boolean publishSense(Boolean b){ return b; } public void setPin(int pin){ this.pin = pin; broadcastState(); } public void setPinArrayControl(PinArrayControl pinControl){ this.pinControl = pinControl; broadcastState(); } }