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
示例#2
0
 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
示例#3
0
    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