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))
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)
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)
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))
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))
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)
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)