示例#1
0
 def testLIN(self):
     message = ics.SpyMessageJ1850()
     message.Header = (0x3C, 1, 2)
     message.StatusBitField = ics.SPY_STATUS_NETWORK_MESSAGE_TYPE | \
                              ics.SPY_STATUS_LIN_MASTER
     message.Protocol = ics.SPY_PROTOCOL_LIN
     
     for network in (ics.NETID_LIN, ics.NETID_LIN2, ics.NETID_LIN3, \
                     ics.NETID_LIN4):
         message.NetworkID = network
         message.Data = tuple([random.randint(x, 0xFF) for x in range(6)])
         # Generate the checksum
         checksum = 0
         for byte in message.Data+message.Header[1:3]:
             checksum += byte
             if (checksum > 255):
                 checksum -= 255
         message.Data += ((~checksum & 0xFF),)
         self.assertTrue(ics.transmit_messages(self.dev1, message) == None)
         self.assertFalse(ics.get_error_messages(self.dev1))
         self.assertFalse(ics.get_error_messages(self.dev2))
         messages, error_count = ics.get_messages(self.dev1, False, 0.1)
         self.assertEqual(error_count, 0)
         self.assertEqual(len(messages), 1)
         self.assertEqual(message.Header, messages[0].Header)
         self.assertEqual(message.NetworkID, messages[0].NetworkID)
         self.assertEqual(message.Data[0:-1], messages[0].Data)
         self.assertFalse(ics.get_error_messages(self.dev1))
         self.assertFalse(ics.get_error_messages(self.dev2))
示例#2
0
 def setUp(self):
     ics.load_default_settings(self.dev1)
     ics.load_default_settings(self.dev2)
     
     # Make sure we start with a "clean" network
     ics.get_error_messages(self.dev1)
     ics.get_error_messages(self.dev2)
     ics.get_messages(self.dev1, False, 0.1)
     ics.get_messages(self.dev2, False, 0.1)
示例#3
0
    def _process_msg_queue(self, timeout=0.1):
        try:
            messages, errors = ics.get_messages(self.dev, False, timeout)
        except ics.RuntimeError:
            return
        for ics_msg in messages:
            if ics_msg.NetworkID not in self.channels:
                continue

            is_tx = bool(ics_msg.StatusBitField & ics.SPY_STATUS_TX_MSG)

            if is_tx:
                if bool(ics_msg.StatusBitField & ics.SPY_STATUS_GLOBAL_ERR):
                    continue
                if ics_msg.DescriptionID:
                    receipt_key = (ics_msg.ArbIDOrHeader,
                                   ics_msg.DescriptionID)
                    self.message_receipts[receipt_key].set()
                if not self._receive_own_messages:
                    continue

            self.rx_buffer.append(ics_msg)
        if errors:
            logger.warning("%d error(s) found", errors)

            for msg in ics.get_error_messages(self.dev):
                error = ICSApiError(*msg)
                logger.warning(error)
示例#4
0
 def _test_misc(self, state):
     arbs = (0x203, 0x204, 0x205, 0x206, 0x201, 0x202)
     for arb in arbs:
         message = ics.SpyMessage()
         message.ArbIDOrHeader = arb
         message.NetworkID = ics.NETID_DEVICE
         message.Data = (state,)
         self.assertEqual(ics.transmit_messages(self.dev1, message), None)
     # Wait for the report message to get sent
     time.sleep(0.2)
     self.assertFalse(ics.get_error_messages(self.dev1))
     self.assertFalse(ics.get_error_messages(self.dev2))
     messages, error_count = ics.get_messages(self.dev2, False, 0.5)
     self.assertEqual(error_count, 0)
     self.assertNotEqual(len(messages), 0)
     self.assertEqual(messages[-1].ArbIDOrHeader, 0x100)
     for i, arb in enumerate(arbs):
         #print(messages[-1].Data, messages[-1].Data[1]>>i & 1)
         self.assertEqual(messages[-1].Data[1]>>i & 1, state, \
                          "MISC%d PIN state is wrong" % (arb-0x200))
     self.assertFalse(ics.get_error_messages(self.dev1))
     self.assertFalse(ics.get_error_messages(self.dev2))
示例#5
0
 def testCAN(self):
     message = ics.SpyMessage()
     message.ArbIDOrHeader = 0xFF
     message.Data = (1,2,3,4,5,6,7,8)
     for network in (ics.NETID_HSCAN, ics.NETID_MSCAN, ics.NETID_HSCAN2, \
                     ics.NETID_HSCAN3, ics.NETID_LSFTCAN, ics.NETID_SWCAN):
         message.NetworkID = network
         try:
             self.assertTrue(ics.transmit_messages(self.dev1, message) == None, network)
         except ics.RuntimeError as ex:
             print(ex, network)
             raise ex
         self.assertFalse(ics.get_error_messages(self.dev1))
         self.assertFalse(ics.get_error_messages(self.dev2))
         messages, error_count = ics.get_messages(self.dev1, False, 0.1)
         self.assertEqual(error_count, 0)
         self.assertEqual(len(messages), 1)
         self.assertEqual(message.ArbIDOrHeader, messages[0].ArbIDOrHeader)
         self.assertEqual(message.NetworkID, messages[0].NetworkID)
         self.assertEqual(message.Data, messages[0].Data)
         self.assertFalse(ics.get_error_messages(self.dev1))
         self.assertFalse(ics.get_error_messages(self.dev2))
示例#6
0
    def _process_msg_queue(self, timeout=0.1):
        try:
            messages, errors = ics.get_messages(self.dev, False, timeout)
        except ics.RuntimeError:
            return
        for ics_msg in messages:
            if ics_msg.NetworkID not in self.channels:
                continue
            self.rx_buffer.append(ics_msg)
        if errors:
            logger.warning("%d error(s) found" % errors)

            for msg in ics.get_error_messages(self.dev):
                error = ICSApiError(*msg)
                logger.warning(error)
示例#7
0
    def _process_msg_queue(self, timeout=0.1):
        try:
            messages, errors = ics.get_messages(self.dev, False, timeout)
        except ics.RuntimeError:
            return
        for ics_msg in messages:
            if ics_msg.NetworkID not in self.channels:
                continue
            is_tx = bool(ics_msg.StatusBitField & ics.SPY_STATUS_TX_MSG)
            if not self._receive_own_messages and is_tx:
                continue
            self.rx_buffer.append(ics_msg)
        if errors:
            logger.warning("%d error(s) found", errors)

            for msg in ics.get_error_messages(self.dev):
                error = ICSApiError(*msg)
                logger.warning(error)