def nnp(self, key, data, sfr): msg = SCPMessage(cmd_rc=scamp.CMD_NNP) #initlise values msg._arg1 = key msg._arg2 = data msg._arg3 = sfr self.transceiver.conn.send_scp_msg(msg)
def nnp(self, key, data, sfr): msg = SCPMessage(cmd_rc=scamp.CMD_NNP) #initlise values msg._arg1 = key msg._arg2 = data msg._arg3 = sfr self.transceiver.conn.send_scp_msg(msg)
def app_signal(self, app_id, signal_id, state_id=None, x=None, y=None, range=None): ''' method that allows signals to be polled and sent to areas of a board ''' #define the region region = "" if(x is None and y is None): region = "all" if signal_id not in self.signal_states: raise exceptions.SpinnManException("signal definition does not " "exist for {}. List is {}" .format(signal_id, self.signal_states)) region = self.spinnaker_utility.parse_region(region, x, y) #locate signal name id signal = self.signal_states[signal_id] #locate state id state = None if signal_id >= 16: if state_id is not None: if state_id in self.states: state = self.states[state_id] else: raise exceptions.SpinnManException("No state with that id") else: raise exceptions.SpinnManException("state was defined as None " "when using a and/or/count " "signal") #locate type of signal signal_type = self.sig_type[signal] #parse the apps for a app mask app_mask = self.spinnaker_utility.parse_apps(app_id, range) mask = int(region) & 0xffff data = (app_mask << 8) + app_id #if signal type is 1 if signal_type == 1: level = (region >> 16) & 3 op, mode = 2, 2 #if signal is a and/or/count if signal_id >= 16: op = 1 mode = signal_id - 16 data += (level << 26) + (op << 22) + (mode << 20) if op == 1: data += state_id << 16 if op != 1: data += signal_id << 16 # logger.debug("Level {} op {} mode {}".format(level, op, mode)) else: data += signal_id << 16 # logger.debug("Type {} data {} mask {}".format(signal_type, data, mask)) # logger.debug("Region {} signal {} state {}".format(region, signal, state)) #send scp message and catch the return data msg = SCPMessage(cmd_rc=scamp.CMD_SIG) msg._arg1 = signal_type msg._arg2 = data msg._arg3 = mask return_data = self.transceiver.conn.send_scp_msg(msg).data # if the signal requires a repsonse, output resposne and return it if signal_type == 1: r = struct.unpack("<I", return_data)[0] if signal_id == 18: #count #logger.debug("count {}".format(r)) return r # else: #logger.debug("mask {}".format(r)) return 0
def app_signal(self, app_id, signal_id, state_id=None, x=None, y=None, range=None): ''' method that allows signals to be polled and sent to areas of a board ''' #define the region region = "" if (x is None and y is None): region = "all" if signal_id not in self.signal_states: raise exceptions.SpinnManException( "signal definition does not " "exist for {}. List is {}".format(signal_id, self.signal_states)) region = self.spinnaker_utility.parse_region(region, x, y) #locate signal name id signal = self.signal_states[signal_id] #locate state id state = None if signal_id >= 16: if state_id is not None: if state_id in self.states: state = self.states[state_id] else: raise exceptions.SpinnManException("No state with that id") else: raise exceptions.SpinnManException("state was defined as None " "when using a and/or/count " "signal") #locate type of signal signal_type = self.sig_type[signal] #parse the apps for a app mask app_mask = self.spinnaker_utility.parse_apps(app_id, range) mask = int(region) & 0xffff data = (app_mask << 8) + app_id #if signal type is 1 if signal_type == 1: level = (region >> 16) & 3 op, mode = 2, 2 #if signal is a and/or/count if signal_id >= 16: op = 1 mode = signal_id - 16 data += (level << 26) + (op << 22) + (mode << 20) if op == 1: data += state_id << 16 if op != 1: data += signal_id << 16 # logger.debug("Level {} op {} mode {}".format(level, op, mode)) else: data += signal_id << 16 # logger.debug("Type {} data {} mask {}".format(signal_type, data, mask)) # logger.debug("Region {} signal {} state {}".format(region, signal, state)) #send scp message and catch the return data msg = SCPMessage(cmd_rc=scamp.CMD_SIG) msg._arg1 = signal_type msg._arg2 = data msg._arg3 = mask return_data = self.transceiver.conn.send_scp_msg(msg).data # if the signal requires a repsonse, output resposne and return it if signal_type == 1: r = struct.unpack("<I", return_data)[0] if signal_id == 18: #count #logger.debug("count {}".format(r)) return r # else: #logger.debug("mask {}".format(r)) return 0