Example #1
0
 def handle_phy_nak_message(self, cmd):
     seq = cmd.seq()  # to parent seq
     seq.pop()
     HidMessage(Message.MSG_DEVICE_NAK,
                self.id(),
                seq,
                pipe=self.logic_pipe()).send()
Example #2
0
    def handle_phy_raw_message(self, cmd, msg):
        type = cmd.parent_type()
        seq = cmd.seq()  # to parent seq
        seq.pop()

        value = msg.value()
        return HidMessage(type,
                          self.id(),
                          seq,
                          value=value,
                          pipe=self.logic_pipe())
Example #3
0
    def handle_phy_test_message(self, cmd, msg):
        print(self.__class__.__name__, "handle_phy_test_message", msg)
        seq = cmd.seq()  # to parent seq
        seq.pop()

        cmd_data = cmd.raw_data()
        value = msg.value()

        attached = cmd_data[0] == value[0]
        return HidMessage(Message.MSG_BRIDGE_ATTACH,
                          self.id(),
                          seq,
                          value=attached,
                          pipe=self.logic_pipe())
Example #4
0
    def handle_phy_interrupt_message(self, msg):
        type = Message.MSG_DEVICE_INTERRUPT_DATA
        seq = Message.seq_root()

        #print(self.__class__.__name__, "int", msg)
        value = msg.value()
        if value[0] == 0:
            return HidMessage(type,
                              self.id(),
                              seq,
                              value=value[1:],
                              pipe=self.logic_pipe()).send()
        else:
            print(self.__class__.__name__, "Invalid irq message:", value)
Example #5
0
    def handle_phy_interrupt_message(self, msg):
        type = Message.MSG_DEVICE_INTERRUPT_DATA
        seq = Message.seq_root()

        (RW_OK, NAK_W, NAK_ADDR, W_ONLY_OK) = range(4)
        #print(self.__class__.__name__, "int", msg)
        value = msg.value()
        if value[0] == 0x9A and value[1] == RW_OK:
            return HidMessage(type,
                              self.id(),
                              seq,
                              value=value[2:],
                              pipe=self.logic_pipe()).send()
        else:
            print(self.__class__.__name__, "Invalid irq message:", value)
Example #6
0
    def handle_phy_rw_message(self, cmd, msg):
        #print("handle_hid_read_message")
        type = cmd.parent_type()
        seq = cmd.seq()  # to parent seq
        seq.pop()
        (RW_OK, NAK_W, NAK_ADDR, W_ONLY_OK) = range(4)

        cmd_data = cmd.raw_data()
        op = cmd.op
        value = msg.value()
        status = value[0]
        size = value[1]

        if (not status and not size):
            return

        if op == 'r' and cmd_data[2]:  # command data[2] is readsize
            if status == RW_OK and size <= cmd.transfered_size():
                result = value[2:size + 2]
            else:
                result = []
            return HidMessage(type,
                              self.id(),
                              seq,
                              value=result,
                              pipe=self.logic_pipe())
        elif op == 'w':
            if status == W_ONLY_OK and cmd.transfered_size() >= size:
                result = size
            else:
                result = 0
            return HidMessage(type,
                              self.id(),
                              seq,
                              value=result,
                              pipe=self.logic_pipe())
Example #7
0
    def handle_phy_rw_message(self, cmd, msg):
        #print("handle_hid_read_message")
        type = cmd.parent_type()
        seq = cmd.seq()  # to parent seq
        seq.pop()

        cmd_data = cmd.raw_data()
        op = cmd.op
        value = msg.value()

        if op == 'r' and cmd_data[2]:
            size = value[0]  # size at index 0
            return HidMessage(type,
                              self.id(),
                              seq,
                              value=value[1:size + 1],
                              pipe=self.logic_pipe())
        elif op == 'w':
            size = cmd.transfered_size() - value[0]
            return HidMessage(type,
                              self.id(),
                              seq,
                              value=size,
                              pipe=self.logic_pipe())
Example #8
0
    def handle_phy_test_message(self, cmd, msg):
        print(self.__class__.__name__, "handle_phy_test_message", msg)
        seq = cmd.seq()  # to parent seq
        seq.pop()

        cmd_data = cmd.raw_data()
        value = msg.value()

        tag = value[0]
        address = value[1]
        if tag == cmd_data[1] and address == cmd_data[2]:
            return HidMessage(Message.MSG_DEVICE_CONNECTED,
                              self.id(),
                              seq,
                              value=address,
                              pipe=self.logic_pipe())
Example #9
0
    def handle_phy_ouput_message(self, cmd, msg):
        cmd_data = cmd.raw_data()
        type = cmd.parent_type()
        seq = cmd.seq()  # to parent seq
        seq.pop()

        (OK, FAILED) = range(2)

        value = msg.value()
        if cmd_data[0] == value[0] and value[1] == OK:
            result = True
        else:
            result = False

        return HidMessage(type,
                          self.id(),
                          seq,
                          value=result,
                          pipe=self.logic_pipe())