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
Beispiel #4
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