Handle the idle_toggle command properly on the fake fermi chopper.

This commit is contained in:
Ferdi Franceschini
2013-05-13 22:00:37 +10:00
parent 0f2df4a8fe
commit b1597c96f3

View File

@@ -236,17 +236,22 @@ class Fermi_Prot(LineReceiver):
PDU = self.getPDU()
(OA, OV) = unpack('>2H', self.ADU[self.datstart:])
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):
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
self.RegVal[uid][14] = self.RegVal[uid][1000]
if (self.RegVal[uid][34] == _PHASE):
self.debug(INFO, 'UP TO SPEED, RUNNING, LEVITATING, PHASELOCKED')
self.RegVal[uid][10] |= (_UP_TO_SPEED|_RUN|_LEV|_PHLOCK)
self.debug(INFO, 'PHASELOCKED')
self.RegVal[uid][10] |= _PHLOCK
else:
self.debug(INFO, 'UP TO SPEED, RUNNING, LEVITATING')
self.RegVal[uid][10] |= (_UP_TO_SPEED|_RUN|_LEV)
self.debug(INFO, 'UP TO SPEED')
self.RegVal[uid][10] |= _UP_TO_SPEED
elif (OA == CSTOP):
self.debug(INFO, "STOP")
self.RegVal[uid][14] = 0
@@ -258,14 +263,22 @@ class Fermi_Prot(LineReceiver):
self.RegVal[uid][10] &= ~(_UP_TO_SPEED|_RUN|_LEV)
elif (OA == CIDLE):
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.RegVal[uid][14] = 0
self.debug(INFO, "UNSET %s" % flagname)
self.RegVal[uid][10] &= ~(lockflag)
else:
self.debug(INFO, "SET RUN SPEED")
self.RegVal[uid][14] = self.RegVal[uid][1000]
self.debug(INFO, "TOGGLE _UP_TO_SPEED")
self.RegVal[uid][10] ^= _UP_TO_SPEED
self.debug(INFO, "SET %s" % flagname)
self.RegVal[uid][10] |= lockflag
elif (OA == CRESET):
self.debug(INFO, "RESET")
self.debug(WCOIL, 'resp = ', self.ADU.encode('hex'))