def ISNewSwitch(self, dev, name, states, names, n): if (dev != self.name): return False self.logger.info("ISNewSwitch " + dev + " property " + name) # Always fetch data from C++ world svp = self.getSwitch(name) if not svp: return False cstates = PyIndiDriver.new_ISStateArray(n) for i in range(len(states)): self.logger.info(' ' + names[i] + ' = ' + str(states[i])) PyIndiDriver.ISStateArray_setitem(cstates, i, states[i]) if name == 'ON_TIME_FACTOR': svp.s = PyIndi.IPS_OK PyIndiDriver.IUUpdateSwitch(svp, cstates, names, n) # Update client display PyIndiDriver.IDSetSwitch(svp, None) #saveConfig(); if svp[0].s == PyIndi.ISS_ON: PyIndiDriver.IDLog("CCDSim:: Time Factor 1\n") self.timefactor = 1.0 if svp[1].s == PyIndi.ISS_ON: PyIndiDriver.IDLog("CCDSim:: Time Factor 0.1\n") self.timefactor = 0.1 if svp[2].s == PyIndi.ISS_ON: PyIndiDriver.IDLog("CCDSim:: Time Factor 0.01\n") self.timefactor = 0.01 return True if super(CCDSimulator, self).ISNewSwitch(dev, name, cstates, names, n): return True return False
def ISNewSwitch (self, dev, name, states, names, n): self.logger.info("ISNewSwitch " + dev + " property " + name) if (dev != self.name): return False # Build Clike array to call C++ method # names is handled by swig (see %typemap(in) char *[]) cstates=PyIndiDriver.new_ISStateArray(n) for i in range(len(states)): self.logger.info(' '+names[i] + ' = ' + str(states[i])) PyIndiDriver.ISStateArray_setitem(cstates, i, states[i]) if super(IndiDriver, self).ISNewSwitch(dev, name, cstates, names, n): return True svp=self.getSwitch(name) lvp=self.getLight('Light Property') if not svp: return False if not self.isConnected(): svp.s=PyIndi.IPS_ALERT PyIndiDriver.IDSetSwitch(svp, "Cannot change property while device is disconnected.") return False if not lvp: return False if (name == "Menu"): # Use the Clike array to call C methods PyIndiDriver.IUUpdateSwitch(svp, cstates, names, n) onSW=PyIndiDriver.IUFindOnSwitch(svp) lightIndex=PyIndiDriver.IUFindOnSwitchIndex(svp) if (lightIndex < 0 or lightIndex > lvp.nlp): return False if (onSW): lightState=random.randint(0,3) lvp[lightIndex].s=lightState # direct indexing of the vector, do not use lvp.lp svp.s=PyIndi.IPS_OK lvp.s=PyIndi.IPS_OK PyIndiDriver.IDSetSwitch(svp, 'Setting to switch '+onSW.name+' is successful. Changing corresponding light property to '+strIPState(lvp[lightIndex].s)) PyIndiDriver.IDSetLight(lvp, None) return True PyIndiDriver.delete_ISStateArray(cstates) return False