Handle the idle_toggle command properly on the fake fermi chopper.
This commit is contained in:
@@ -236,17 +236,22 @@ class Fermi_Prot(LineReceiver):
|
|||||||
PDU = self.getPDU()
|
PDU = self.getPDU()
|
||||||
(OA, OV) = unpack('>2H', self.ADU[self.datstart:])
|
(OA, OV) = unpack('>2H', self.ADU[self.datstart:])
|
||||||
self.debug(WCOIL, 'wcoil:OA=%d, OV=%X' % (OA,OV))
|
self.debug(WCOIL, 'wcoil:OA=%d, OV=%X' % (OA,OV))
|
||||||
self.FermiCoil[uid][OA] = OV
|
# TODO This really just toggles IDLE speed so it's only correct for OA=2 (ie coil 3)
|
||||||
|
self.FermiCoil[uid][OA] ^= OV
|
||||||
if (OA == CSTART):
|
if (OA == CSTART):
|
||||||
self.debug(INFO, "START")
|
self.debug(INFO, "START")
|
||||||
|
self.RegVal[uid][10] |= (_RUN|_LEV)
|
||||||
|
self.debug(INFO, 'RUNNING, LEVITATING')
|
||||||
|
# Don't set speed if idling
|
||||||
|
if (self.FermiCoil[uid][2] == 0x0000):
|
||||||
# Set RotSpeed value
|
# Set RotSpeed value
|
||||||
self.RegVal[uid][14] = self.RegVal[uid][1000]
|
self.RegVal[uid][14] = self.RegVal[uid][1000]
|
||||||
if (self.RegVal[uid][34] == _PHASE):
|
if (self.RegVal[uid][34] == _PHASE):
|
||||||
self.debug(INFO, 'UP TO SPEED, RUNNING, LEVITATING, PHASELOCKED')
|
self.debug(INFO, 'PHASELOCKED')
|
||||||
self.RegVal[uid][10] |= (_UP_TO_SPEED|_RUN|_LEV|_PHLOCK)
|
self.RegVal[uid][10] |= _PHLOCK
|
||||||
else:
|
else:
|
||||||
self.debug(INFO, 'UP TO SPEED, RUNNING, LEVITATING')
|
self.debug(INFO, 'UP TO SPEED')
|
||||||
self.RegVal[uid][10] |= (_UP_TO_SPEED|_RUN|_LEV)
|
self.RegVal[uid][10] |= _UP_TO_SPEED
|
||||||
elif (OA == CSTOP):
|
elif (OA == CSTOP):
|
||||||
self.debug(INFO, "STOP")
|
self.debug(INFO, "STOP")
|
||||||
self.RegVal[uid][14] = 0
|
self.RegVal[uid][14] = 0
|
||||||
@@ -258,14 +263,22 @@ class Fermi_Prot(LineReceiver):
|
|||||||
self.RegVal[uid][10] &= ~(_UP_TO_SPEED|_RUN|_LEV)
|
self.RegVal[uid][10] &= ~(_UP_TO_SPEED|_RUN|_LEV)
|
||||||
elif (OA == CIDLE):
|
elif (OA == CIDLE):
|
||||||
self.debug(INFO, "TOGGLE IDLE")
|
self.debug(INFO, "TOGGLE IDLE")
|
||||||
if ( (self.RegVal[uid][10] & _UP_TO_SPEED) > 0):
|
if (self.RegVal[uid][34] == _PHASE):
|
||||||
|
lockflag = _PHLOCK
|
||||||
|
flagname = '_PHLOCK'
|
||||||
|
else:
|
||||||
|
lockflag = _UP_TO_SPEED
|
||||||
|
flagname = '_UP_TO_SPEED'
|
||||||
|
if ( (self.RegVal[uid][10] & lockflag) > 0):
|
||||||
self.debug(INFO, "SET IDLE SPEED")
|
self.debug(INFO, "SET IDLE SPEED")
|
||||||
self.RegVal[uid][14] = 0
|
self.RegVal[uid][14] = 0
|
||||||
|
self.debug(INFO, "UNSET %s" % flagname)
|
||||||
|
self.RegVal[uid][10] &= ~(lockflag)
|
||||||
else:
|
else:
|
||||||
self.debug(INFO, "SET RUN SPEED")
|
self.debug(INFO, "SET RUN SPEED")
|
||||||
self.RegVal[uid][14] = self.RegVal[uid][1000]
|
self.RegVal[uid][14] = self.RegVal[uid][1000]
|
||||||
self.debug(INFO, "TOGGLE _UP_TO_SPEED")
|
self.debug(INFO, "SET %s" % flagname)
|
||||||
self.RegVal[uid][10] ^= _UP_TO_SPEED
|
self.RegVal[uid][10] |= lockflag
|
||||||
elif (OA == CRESET):
|
elif (OA == CRESET):
|
||||||
self.debug(INFO, "RESET")
|
self.debug(INFO, "RESET")
|
||||||
self.debug(WCOIL, 'resp = ', self.ADU.encode('hex'))
|
self.debug(WCOIL, 'resp = ', self.ADU.encode('hex'))
|
||||||
|
|||||||
Reference in New Issue
Block a user