/* * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. */ package ch.psi.mxsc; /** * */ public class PuckState { public final int id; public boolean online; public SwitchState mecSwitch; public SwitchState indSwitch; public enum SwitchState{ On, Off, Error; static SwitchState fromInt(int value){ switch (value){ case 1: return SwitchState.On; case 0: return SwitchState.Off; default: return SwitchState.Error; } } } PuckState(int id) { this.id = id; } BasePlate getBasePlate() { if (Controller.getInstance() == null) { return null; } return Controller.getInstance().basePlate; } void clear() { online = false; mecSwitch = SwitchState.Off; indSwitch = SwitchState.Off; BasePlate basePlate = getBasePlate(); if (basePlate != null) { basePlate.getPucks()[id - 1].detection = Puck.Detection.Empty; } } boolean set(int mecSwitch, int indSwitch) { online = true; //TODO: Handle -1 value: error SwitchState mec = SwitchState.fromInt(mecSwitch); SwitchState ind = SwitchState.fromInt(indSwitch); boolean changed = (mec != this.mecSwitch) || (ind != this.indSwitch); this.mecSwitch = mec; this.indSwitch = ind; BasePlate basePlate = getBasePlate(); if (basePlate != null) { Puck puck = basePlate.getPucks()[id - 1]; Puck.Detection detection = Puck.Detection.Offline; switch(puck.getDetectionMode()){ case Mechanical: if (this.mecSwitch ==SwitchState.On ) { detection = Puck.Detection.Present; } else if (this.mecSwitch ==SwitchState.Off ) { detection = Puck.Detection.Empty; } else { detection = Puck.Detection.Error; } break; case Inductive: if (this.indSwitch ==SwitchState.On ) { detection = Puck.Detection.Present; } else if (this.indSwitch ==SwitchState.Off ) { detection = Puck.Detection.Empty; } else { detection = Puck.Detection.Error; } break; case Both: if ((this.mecSwitch != this.indSwitch) ||(this.mecSwitch == SwitchState.Error) ||(this.mecSwitch == SwitchState.Error)) { detection = Puck.Detection.Error; } else if (this.mecSwitch ==SwitchState.On ) { detection = Puck.Detection.Present; } else { detection = Puck.Detection.Empty; } break; } puck.detection = detection; } return changed; } @Override public String toString() { return "Online = " + online + "\ns1 = " + mecSwitch + "\ns2 = " + indSwitch; } }