Exemplo n.º 1
0
    def test_basic_valid_message(self):
        self.counter = self.counter + 1
        alp_cmd_bytes = [
            0x20,  # action=32/ReturnFileData
            0x40,  # File ID
            0x00,  # offset
            0x04,  # length
            0x00,
            0xf3,
            0x00,
            0x00  # data
        ]
        # calculate crc
        crc_array = calculate_crc(alp_cmd_bytes)

        # |sync|sync|counter|message type|length|crc1|crc2|
        frame = [
            0xC0,  # interface sync byte
            0,  # interface version
            self.counter,  # counter
            0x01,  # message type,
            len(alp_cmd_bytes),  # ALP cmd length
            crc_array[0],
            crc_array[1]  # ALP crc
        ] + alp_cmd_bytes

        (message_type, cmds, info) = self.parser.parse(frame)
        self.assertEqual(cmds[0].actions[0].operation.op, 32)
        self.assertEqual(cmds[0].actions[0].operation.operand.length.value, 4)
Exemplo n.º 2
0
  def parse_serial_interface_header(self, s):
    b = s.read("uint:8")
    if b != 0xC0:
      raise ParseError("expected 0xC0, found {0}".format(b))
    version = s.read("uint:8")
    if version != 0:
      raise ParseError("Expected version 0, found {0}".format(version))
    counter = s.read("uint:8")
    message_type = s.read("uint:8") #TODO different handler?
    cmd_len = s.read("uint:8")
    crc1 = s.read("uint:8")
    crc2 = s.read("uint:8")
    if len(self.buffer) - s.bytepos < cmd_len:
      raise ReadError("ALP command not complete yet, expected {0} bytes, got {1}".format(cmd_len, s.len - s.bytepos))
    payload = s.peeklist('bytes:b', b=cmd_len)[0]
    crc = calculate_crc(bytes(payload))
    self.down_counter = self.down_counter + 1
    if self.down_counter > 255:
      self.down_counter = 0
    if counter != self.down_counter:
      pprint("counters not equal") #TODO consequence?
      self.down_counter = counter #reset counter
    if crc[0] != crc1 or crc[1] != crc2:
      raise ParseError("CRC is incorrect found {} {} and expected {} {}".format(crc1, crc2, crc[0], crc[1]))

    return cmd_len, message_type
Exemplo n.º 3
0
  def test_read_id_response_frame(self):
    frame_data = [ 0x25,  # length
                   0x00,  # subnet
                   0x80,  # dll control
                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, # target_address
                   0x20,  # D7ANP control
                   0x01, # origin access class
                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, # origin access ID
                   0xa8,  # D7ATP control
                   0xe9,  # dialog ID
                   0x00,  # transaction ID
                   0x05,  # Tl
                   0x05,  # Tc
                   0x20,  # ALP control (return file data operation)
                   0x00, 0x00, 0x08, # file data operand
                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, # UID
                   ]

    frame_data = frame_data + calculate_crc(frame_data)

    (frames, info) = self.parser.parse(frame_data)
    self.assertEqual(len(frames), 1)
    frame = frames[0]
    self.assertEqual(frame.length, 37)
    self.assertEqual(frame.subnet, 0)
    self.assertEqual(frame.control.id_type, IdType.UID)
    self.assertEqual(frame.control.eirp_index, 0)
    self.assertEqual(len(frame.target_address), 8)
    self.assertEqual(frame.target_address, [0, 0, 0, 0, 0, 0, 0, 1])
    self.assertEqual(frame.d7anp_frame.control.nls_method, NlsMethod.NONE)
    self.assertFalse(frame.d7anp_frame.control.has_hopping)
    self.assertFalse(frame.d7anp_frame.control.has_no_origin_access_id)
    self.assertEqual(frame.d7anp_frame.control.origin_id_type, IdType.UID)
    self.assertEqual(frame.d7anp_frame.origin_access_class, 0x01)
    self.assertEqual(frame.d7anp_frame.origin_access_id, [0, 0, 0, 0, 0, 0, 0, 2])
    self.assertTrue(frame.d7anp_frame.d7atp_frame.control.is_dialog_start)
    self.assertTrue(frame.d7anp_frame.d7atp_frame.control.has_tl)
    self.assertFalse(frame.d7anp_frame.d7atp_frame.control.has_te)
    self.assertTrue(frame.d7anp_frame.d7atp_frame.control.is_ack_requested)
    self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_ack_not_void)
    self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_ack_record_requested)
    self.assertFalse(frame.d7anp_frame.d7atp_frame.control.has_agc)
    self.assertEqual(frame.d7anp_frame.d7atp_frame.dialog_id, 0xe9)
    self.assertEqual(frame.d7anp_frame.d7atp_frame.transaction_id, 0)
    self.assertEqual(frame.d7anp_frame.d7atp_frame.tl.exp, CT(exp=0, mant=5).exp)
    self.assertEqual(frame.d7anp_frame.d7atp_frame.tl.mant, CT(exp=0, mant=5).mant)
    self.assertEqual(frame.d7anp_frame.d7atp_frame.tc.exp, CT(exp=0, mant=5).exp)
    self.assertEqual(frame.d7anp_frame.d7atp_frame.tc.mant, CT(exp=0, mant=5).mant)
    self.assertEqual(len(frame.d7anp_frame.d7atp_frame.alp_command.actions), 1)
    alp_action = frame.d7anp_frame.d7atp_frame.alp_command.actions[0]
    self.assertEqual(type(alp_action.operation), ReturnFileData)
    self.assertEqual(type(alp_action.operand), Data)
    self.assertEqual(alp_action.operand.offset.id, 0)
    self.assertEqual(alp_action.operand.offset.offset.value, 0)
    self.assertEqual(alp_action.operand.length, 8)
Exemplo n.º 4
0
 def build_serial_frame(self,command):
   buffer = bytearray([ 0xC0, 0])
   alp_command_bytes = bytearray(command)
   buffer.append(self.up_counter)
   buffer.append(MessageType.ALP_DATA.value)
   buffer.append(len(alp_command_bytes))
   crc = calculate_crc(bytes(alp_command_bytes))
   buffer = buffer + bytes(bytearray(crc)) + alp_command_bytes
   self.up_counter = self.up_counter + 1
   if self.up_counter > 255:
     self.up_counter = 0
   return buffer
Exemplo n.º 5
0
    def test_read_id_response_frame(self):
        frame_data = [
            0x25,  # length
            0x00,  # subnet
            0x80,  # dll control
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x01,  # target_address
            10,  # D7ANP timeout
            0x20,  # D7ANP control
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x02,  # origin access ID
            0x41,  # D7ATP control
            0xE9,  # dialog ID
            0x00,  # transaction ID
            0x20,  # ALP control (return file data operation)
            0x00,
            0x00,
            0x08,  # file data operand
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x02,  # UID
        ]

        frame_data = frame_data + calculate_crc(frame_data)

        (frames, info) = self.parser.parse(frame_data)
        self.assertEqual(len(frames), 1)
        frame = frames[0]
        self.assertEqual(frame.length, 37)
        self.assertEqual(frame.subnet, 0)
        self.assertEqual(frame.control.is_target_address_set, True)
        self.assertEqual(frame.control.is_target_address_vid, False)
        self.assertEqual(frame.control.eirp_index, 0)
        self.assertEqual(len(frame.target_address), 8)
        self.assertEqual(frame.target_address, [0, 0, 0, 0, 0, 0, 0, 1])
        self.assertFalse(frame.d7anp_frame.control.has_network_layer_security)
        self.assertFalse(frame.d7anp_frame.control.has_multi_hop)
        self.assertTrue(frame.d7anp_frame.control.has_origin_access_id)
        self.assertFalse(frame.d7anp_frame.control.is_origin_access_id_vid)
        self.assertEqual(frame.d7anp_frame.control.origin_access_class, 0)
        self.assertEqual(frame.d7anp_frame.origin_access_id, [0, 0, 0, 0, 0, 0, 0, 2])
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_ack_recorded)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_ack_return_template_requested)
        self.assertTrue(frame.d7anp_frame.d7atp_frame.control.is_dialog_end)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_dialog_start)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_ack_not_void)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.dialog_id, 0xE9)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.transaction_id, 0)
        self.assertEqual(len(frame.d7anp_frame.d7atp_frame.alp_command.actions), 1)
        alp_action = frame.d7anp_frame.d7atp_frame.alp_command.actions[0]
        self.assertEqual(type(alp_action.operation), ReturnFileData)
        self.assertEqual(type(alp_action.operand), Data)
        self.assertEqual(alp_action.operand.offset.id, 0)
        self.assertEqual(alp_action.operand.offset.offset, 0)
        self.assertEqual(alp_action.operand.length, 8)
Exemplo n.º 6
0
    def test_read_id_command_frame(self):
        read_id_command = [
            0x15,  # length
            0x00,  # subnet
            0x6a,  # DLL control
            0x20,  # D7ANP control
            0x01,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x01,  # Origin Access ID
            0xa8,  # D7ATP control
            0xe9,  # dialog ID
            0x00,  # transaction ID
            0x05,  # Tl
            0x05,  # Tc
            0x01,  # ALP control (read file data operation)
            0x00,
            0x00,
            0x08,  # file data request operand (file ID 0x00)
            0x25,
            0xDA  # CRC
        ]

        (frames, info) = self.parser.parse(read_id_command)
        self.assertEqual(len(frames), 1)
        frame = frames[0]
        self.assertEqual(frame.length, 21)
        self.assertEqual(frame.subnet, 0)
        self.assertEqual(frame.control.id_type, IdType.NOID)
        self.assertEqual(frame.control.eirp_index, 42)
        self.assertEqual(len(frame.target_address), 0)
        self.assertEqual(frame.d7anp_frame.control.nls_method, NlsMethod.NONE)
        self.assertFalse(frame.d7anp_frame.control.has_hopping)
        self.assertFalse(frame.d7anp_frame.control.has_no_origin_access_id)
        self.assertEqual(frame.d7anp_frame.control.origin_id_type, IdType.UID)
        self.assertEqual(frame.d7anp_frame.origin_access_class, 0x01)
        self.assertEqual(frame.d7anp_frame.origin_access_id,
                         [0, 0, 0, 0, 0, 0, 0, 1])
        self.assertTrue(frame.d7anp_frame.d7atp_frame.control.is_dialog_start)
        self.assertTrue(frame.d7anp_frame.d7atp_frame.control.has_tl)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.has_te)
        self.assertTrue(frame.d7anp_frame.d7atp_frame.control.is_ack_requested)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_ack_not_void)
        self.assertFalse(
            frame.d7anp_frame.d7atp_frame.control.is_ack_record_requested)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.has_agc)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.dialog_id, 0xe9)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.transaction_id, 0)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.tl.exp,
                         CT(exp=0, mant=5).exp)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.tl.mant,
                         CT(exp=0, mant=5).mant)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.tc.exp,
                         CT(exp=0, mant=5).exp)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.tc.mant,
                         CT(exp=0, mant=5).mant)
        self.assertEqual(
            len(frame.d7anp_frame.d7atp_frame.alp_command.actions), 1)
        alp_action = frame.d7anp_frame.d7atp_frame.alp_command.actions[0]
        self.assertEqual(type(alp_action.operation), ReadFileData)
        self.assertEqual(type(alp_action.operand), DataRequest)
        self.assertEqual(alp_action.operand.offset.id, 0)
        self.assertEqual(alp_action.operand.offset.offset.value, 0)
        self.assertEqual(alp_action.operand.length, 8)
        # TODO self.assertEqual(len(frame.payload), 16)
        hexstring = binascii.hexlify(bytearray(read_id_command[:-2])).decode(
            'hex')  # TODO there must be an easier way...
        crc = calculate_crc(hexstring)
        self.assertEqual(frame.crc16, (crc[0] << 8) + crc[1])
Exemplo n.º 7
0
    def test_read_id_response_frame(self):
        frame_data = [
            0x25,  # length
            0x00,  # subnet
            0x80,  # dll control
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x01,  # target_address
            10,  # D7ANP timeout
            0x20,  # D7ANP control
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x02,  # origin access ID
            0x41,  # D7ATP control
            0xe9,  # dialog ID
            0x00,  # transaction ID
            0x20,  # ALP control (return file data operation)
            0x00,
            0x00,
            0x08,  # file data operand
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x00,
            0x02,  # UID
        ]

        frame_data = frame_data + calculate_crc(frame_data)

        (frames, info) = self.parser.parse(frame_data)
        self.assertEqual(len(frames), 1)
        frame = frames[0]
        self.assertEqual(frame.length, 37)
        self.assertEqual(frame.subnet, 0)
        self.assertEqual(frame.control.is_target_address_set, True)
        self.assertEqual(frame.control.is_target_address_vid, False)
        self.assertEqual(frame.control.eirp_index, 0)
        self.assertEqual(len(frame.target_address), 8)
        self.assertEqual(frame.target_address, [0, 0, 0, 0, 0, 0, 0, 1])
        self.assertFalse(frame.d7anp_frame.control.has_network_layer_security)
        self.assertFalse(frame.d7anp_frame.control.has_multi_hop)
        self.assertTrue(frame.d7anp_frame.control.has_origin_access_id)
        self.assertFalse(frame.d7anp_frame.control.is_origin_access_id_vid)
        self.assertEqual(frame.d7anp_frame.control.origin_access_class, 0)
        self.assertEqual(frame.d7anp_frame.origin_access_id,
                         [0, 0, 0, 0, 0, 0, 0, 2])
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_ack_recorded)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.
                         is_ack_return_template_requested)
        self.assertTrue(frame.d7anp_frame.d7atp_frame.control.is_dialog_end)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_dialog_start)
        self.assertFalse(frame.d7anp_frame.d7atp_frame.control.is_ack_not_void)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.dialog_id, 0xe9)
        self.assertEqual(frame.d7anp_frame.d7atp_frame.transaction_id, 0)
        self.assertEqual(
            len(frame.d7anp_frame.d7atp_frame.alp_command.actions), 1)
        alp_action = frame.d7anp_frame.d7atp_frame.alp_command.actions[0]
        self.assertEqual(type(alp_action.operation), ReturnFileData)
        self.assertEqual(type(alp_action.operand), Data)
        self.assertEqual(alp_action.operand.offset.id, 0)
        self.assertEqual(alp_action.operand.offset.offset, 0)
        self.assertEqual(alp_action.operand.length, 8)