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 get_iso15765_msgs(device): msgs, error_count = ics.get_messages(device) print("Received {} messages with {} errors.".format( len(msgs), error_count)) for i, m in enumerate(msgs): print('Message #{}\t'.format(i + 1), end='') print_message(m)
def dump_can_chnl(chnl=0,tmformat=1): global linenm, devices, pre_rxtm, shift_rxtm while True: messages, errors = ics.get_messages(device) for rxmsg in messages: linenm += 1 msgst = rxmsg.StatusBitField msgdir = 'Rx' if hex(msgst) == '0x4000000': msgdir = 'Rx' elif hex(msgst) == '0x4000002': msgdir = 'Tx' else: msgdir = 'Er' rxtm = rxmsg.TimeHardware/40000000 rxtm = shift_rxtm + rxtm if rxtm < pre_rxtm: delta = rxtm - shift_rxtm shift_rxtm += 107.3741824 rxtm = shift_rxtm + delta rel_rxtm = rxtm - pre_rxtm pre_rxtm = rxtm rxid = format(rxmsg.ArbIDOrHeader,'#04X',).replace('0X','').zfill(3) rxds = '[{}]'.format(' '.join(format(i, '#04X').replace('0X','') for i in rxmsg.Data)) rxds = rxds.replace('[','').replace(']','') rxch = rxmsg.NetworkID rxdl = rxmsg.NumberBytesData rxtm = format(rxtm,'.6f') rel_rxtm = format(rel_rxtm,'.6f') if tmformat == 1 : print(rxtm, rxch, rxid, msgdir, 'd', rxdl, rxds, flush=True) else: print(rel_rxtm, rxch, rxid, msgdir, 'd', rxdl, rxds, flush=True) messages = []
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 receive_can(device): msgs, error_count = ics.get_messages(device) print("Received {} messages with {} errors.".format( len(msgs), error_count)) for i, m in enumerate(msgs): print('Message #{}\t'.format(i + 1), end='') print('\tArbID: {}\tData: {}'.format(hex(m.ArbIDOrHeader), [hex(x) for x in m.Data]))
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 receive_can(device, db): while (1): msgs, error_count = ics.get_messages(device) # print("Received {} messages with {} errors.".format(len(msgs), error_count)) if error_count == 0: for i, m in enumerate(msgs): print('ID:{:>3}'.format(hex(m.ArbIDOrHeader)), end='') print('\tName: {}'.format( db.get_msg_by_id(m.ArbIDOrHeader).name), end='') print('\t\tData: {}'.format([hex(x) for x in m.Data])) #mssage_data = db.decode_message(frame_id_or_name=m.ArbIDOrHeader, data=bytes(m.Data)) #print(mssage_data) else: print("Received {} messages with {} errors.".format( len(msgs), error_count))
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)
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))