diff --git a/src/main/java/ch/psi/mxsc/EseraDetection.java b/src/main/java/ch/psi/mxsc/EseraDetection.java new file mode 100644 index 0000000..d80fec3 --- /dev/null +++ b/src/main/java/ch/psi/mxsc/EseraDetection.java @@ -0,0 +1,58 @@ +package ch.psi.mxsc; + +import static ch.psi.mxsc.MainPanel.NUMBER_OF_PUCKS; +import ch.psi.pshell.device.Device; +import ch.psi.pshell.device.DeviceAdapter; +import ch.psi.utils.State; +import java.util.List; + +/** + * + */ +public class EseraDetection implements AutoCloseable{ + final Device device; + + public EseraDetection(Device device){ + this.device = device; + if (device!=null){ + device.addListener(listener); + } + } + + + DeviceAdapter listener = new DeviceAdapter(){ + @Override + public void onStateChanged(Device device, State state, State former) { + if (!state.isInitialized()){ + MainPanel.getInstance().clearPuckStates(); + } + } + + @Override + public void onValueChanged(Device device, Object value, Object former) { + if ((value == null) || !(value instanceof List)){ + MainPanel.getInstance().clearPuckStates(); + } else { + List l = (List)value; + PuckState[] puckState = MainPanel.getInstance().getPuckStates(); + for (int i=0; iNUMBER_OF_PUCKS)){ + throw new Exception("invalid puck id: "+ id); + } + return getPuckStates()[id-1]; + } + + public void clearPuckStates(){ + for (PuckState puck:getPuckStates()){ + puck.clear(); + } + repaint(); + } + + public static MainPanel getInstance(){ return instance; } @@ -26,20 +53,46 @@ public class MainPanel extends Panel { basePlate = new BasePlate(); SwingUtils.setEnumCombo(comboMode, BasePlatePanel.Mode.class); comboMode.setSelectedItem(basePlatePanel.getMode()); - this.setPersistedComponents(new Component[]{comboMode}); + this.setPersistedComponents(new Component[]{comboMode}); + puckState = new PuckState[NUMBER_OF_PUCKS]; + for (int i=0; i