def test_EnableParameterMsgSizeError(self): d = bytearray([0x04, 0x03, 0x04, 0x05, 0x06]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) with self.assertRaises(canfix.MsgSizeError): p = canfix.parseMessage(msg) d = bytearray([0x04, 0x03]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) with self.assertRaises(canfix.MsgSizeError): p = canfix.parseMessage(msg)
def test_NodeIdentificationMessageSizeError(self): d = bytearray([0x00, 0x02, 0x01, 0x40, 0x50, 0x60, 0x70]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) with self.assertRaises(canfix.MsgSizeError): p = canfix.parseMessage(msg) d = bytearray([0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) with self.assertRaises(canfix.MsgSizeError): p = canfix.parseMessage(msg)
def __tryFirmwareReq(self): """Requests a firmware load, waits for 1/2 a second and determines if the response is correct and if so returns True returns False on timeout""" self.channel = self.__getFreeChannel() if self.channel < 0: raise FirmwareError("No Free Channel") msg = canfix.UpdateFirmware(node=self.destNode, verification=self.device.fwUpdateCode, channel=self.channel) msg.sendNode = self.srcNode msg.msgType = canfix.MSG_REQUEST self.can.send(msg.msg) endtime = time.time() + 0.5 while True: # Channel wait loop if self.kill: raise FirmwareError("Canceled") try: rframe = self.can.recv(0.1) except connection.Timeout: pass else: msg = canfix.parseMessage(rframe) if isinstance(msg, canfix.UpdateFirmware): if msg.destNode == self.srcNode: if msg.status == canfix.MSG_SUCCESS: return True else: log.warn("Firmware Update received with error code {}".format(msg.errorCode)) raise FirmwareError("Error {} Received".format(msg.errorCode)) finally: now = time.time() if now > endtime: return False return True
def test_ParameterEncoder(self): d = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(arbitration_id=0x11B, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Encoder Input (High Priority) #2") self.assertEqual(p.value, [0, 0, [False]*8]) d = bytearray([0x00, 0x00, 0x00, 0xFB, 0xFF, 0x00, 0x00, 0x00]) msg.data = d p = canfix.parseMessage(msg) self.assertEqual(p.value, [-5, 0, [False]*8]) d = bytearray([0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00]) msg.data = d p = canfix.parseMessage(msg) self.assertEqual(p.value, [5, 0, [False]*8])
def test_ParameterIndicatedAltitude(self): d = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(arbitration_id=0x184, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Indicated Altitude") self.assertEqual(p.value, 0.0) d = bytearray([0x00, 0x00, 0x00, 0x18, 0xFC, 0xFF, 0xFF]) # -1,000 msg.data = d p = canfix.parseMessage(msg) self.assertEqual(p.value, -1000) d = bytearray([0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00]) # 60,000 msg.data = d p = canfix.parseMessage(msg) self.assertEqual(p.value, 60000)
def test_ParameterIndicatedAirspeed(self): d = bytearray([0x00, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(arbitration_id=0x183, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Indicated Airspeed") self.assertEqual(p.value, 0.0) d = bytearray([0x00, 0x00, 0x00, 0x0F, 0x27]) # 9999 msg.data = d p = canfix.parseMessage(msg) self.assertLess(abs(p.value - 999.9), 0.005) d = bytearray([0x00, 0x00, 0x00, 0x87, 0x13]) # 4999 msg.data = d p = canfix.parseMessage(msg) self.assertLess(abs(p.value - 499.9), 0.005)
def test_ResponseMessageCh0NoData(self): msg = can.Message(extended_id=False, arbitration_id=0x7E1) p = canfix.parseMessage(msg) self.assertIsInstance(p,canfix.TwoWayMsg) self.assertEqual(p.data,b'') self.assertEqual(p.channel, 0x00) self.assertEqual(p.type,"Response")
def test_LastTwoWayMessage(self): d = bytearray([0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x7FF, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.TwoWayMsg) self.assertEqual(p.channel, 0x0F) self.assertEqual(p.type, "Response")
def update(self, msg): p = canfix.parseMessage(msg) node = None if isinstance(p, canfix.Parameter): node = self.__findNode(p.node) assert node result = node.updateParameter(p) if result != None: if self.parameterChanged is not None: self.parameterChanged(p) else: if self.parameterAdded is not None: self.parameterAdded(p) elif isinstance(p, canfix.NodeAlarm): pass elif isinstance(p, canfix.NodeStatus): node = p.sendNode elif isinstance(p, canfix.NodeIdentification): node = self.__findNode(p.sendNode) assert node node.deviceID = p.device node.version = p.fwrev node.model = p.model device = devices.findDevice(node.deviceID, node.model, node.version) if device: node.name = device.name node.device = device if self.nodeIdent: self.nodeIdent(p.sendNode, {"name":node.name, "deviceid":node.deviceID, "model":node.model, "version":node.version}) elif isinstance(p, canfix.TwoWayMsg): pass if node is not None: node.update()
def test_NodeSpecificMessage(self): d = bytearray([0x61, 0x02, 0x03, 0x40, 0x50, 0x60, 0x70, 0x80]) msg = can.Message(extended_id=False, arbitration_id=0x6E0, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeSpecific) self.assertEqual(p.sendNode, 0x00) self.assertEqual(p.controlCode, 0x61) self.assertEqual(p.data, bytearray([0x02, 0x03, 0x40, 0x50, 0x60, 0x70, 0x80])) d = bytearray([0x61, 0x02, 0x03, 0x40, 0x50, 0x60, 0x70, 0x80]) msg = can.Message(extended_id=False, arbitration_id=0x7DF, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeSpecific) self.assertEqual(p.sendNode, 0xFF) self.assertEqual(p.controlCode, 0x61) self.assertEqual(p.data, bytearray([0x02, 0x03, 0x40, 0x50, 0x60, 0x70, 0x80]))
def test_NodeSpecificMessageNoData(self): d = bytearray([0x61]) msg = can.Message(extended_id=False, arbitration_id=0x6E0, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeSpecific) self.assertEqual(p.sendNode, 0x00) self.assertEqual(p.controlCode, 0x61)
def test_ParameterLatitude(self): d = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(arbitration_id=0x1C3, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Aircraft Position Latitude") self.assertEqual(p.value, 0.0) d = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x42]) # 90.0 msg.data = d p = canfix.parseMessage(msg) self.assertLess(abs(p.value - 90.0), 0.00005) d = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0xc2]) # 4999 msg.data = d p = canfix.parseMessage(msg) self.assertLess(abs(p.value - -90.0), 0.00005)
def test_ConfigurationQueryMessageResponseFail(self): d = bytearray([0x0A, 0x04, 0x01]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeConfigurationQuery) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.error, 0x01)
def test_LastDefinedParameter(self): d = bytearray([0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x587, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.Parameter) self.assertEqual(p.node, 0x01) self.assertEqual(p.index, 2) self.assertEqual(p.function, 3)
def test_ResponseMessageCh1(self): d = bytearray([0x01, 0x00, 0xAB, 0xCD, 0xEF, 0xFF, 0xEE, 0x11]) msg = can.Message(extended_id=False, arbitration_id=0x7E3, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p,canfix.TwoWayMsg) self.assertEqual(p.data, b'\x01\x00\xAB\xCD\xEF\xFF\xEE\x11') self.assertEqual(p.channel, 0x01) self.assertEqual(p.type,"Response")
def test_ResponseMessageCh15(self): d = bytearray([0x01, 0x00, 0xAB, 0xCD, 0xEF, 0xFF, 0xEE, 0x11]) msg = can.Message(extended_id=False, arbitration_id=0x7FF, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p,canfix.TwoWayMsg) self.assertEqual(p.data, b'\x01\x00\xAB\xCD\xEF\xFF\xEE\x11') self.assertEqual(p.channel, 0x0F) self.assertEqual(p.type,"Response")
def test_NodeReportMessageRequest(self): d = bytearray([0x05, 0x04]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeReport) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x05) self.assertEqual(p.destNode, 0x04)
def test_ConfigurationQueryMessageResponseFail(self): d = bytearray([0x0A, 0x04, 0x01]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeConfigurationQuery) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.error, 0x01)
def test_NodeReportMessageRequest(self): d = bytearray([0x05, 0x04]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeReport) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x05) self.assertEqual(p.destNode, 0x04)
def test_LastNodeNoDataFromMessage(self): d = bytearray([0x01, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0xFF, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeAlarm) self.assertEqual(p.alarm, 1) self.assertEqual(p.data, b'\x00\x00\x00\x00\x00') self.assertEqual(p.node, 255)
def test_LastDefinedParameter(self): d = bytearray([0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x587, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.Parameter) self.assertEqual(p.node, 0x01) self.assertEqual(p.index, 2) self.assertEqual(p.function, 3)
def test_ParameterQuality(self): d = bytearray([0x00, 0x00, 0x00, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, False) self.assertEqual(p.quality, False) self.assertEqual(p.failure, False) d = bytearray([0x00, 0x00, 0x01, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, True) self.assertEqual(p.quality, False) self.assertEqual(p.failure, False) d = bytearray([0x00, 0x00, 0x02, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, False) self.assertEqual(p.quality, True) self.assertEqual(p.failure, False) d = bytearray([0x00, 0x00, 0x04, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, False) self.assertEqual(p.quality, False) self.assertEqual(p.failure, True) d = bytearray([0x00, 0x00, 0x07, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, True) self.assertEqual(p.quality, True) self.assertEqual(p.failure, True)
def test_ParameterQuality(self): d = bytearray([0x00, 0x00, 0x00, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, False) self.assertEqual(p.quality, False) self.assertEqual(p.failure, False) d = bytearray([0x00, 0x00, 0x01, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, True) self.assertEqual(p.quality, False) self.assertEqual(p.failure, False) d = bytearray([0x00, 0x00, 0x02, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, False) self.assertEqual(p.quality, True) self.assertEqual(p.failure, False) d = bytearray([0x00, 0x00, 0x04, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, False) self.assertEqual(p.quality, False) self.assertEqual(p.failure, True) d = bytearray([0x00, 0x00, 0x07, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.annunciate, True) self.assertEqual(p.quality, True) self.assertEqual(p.failure, True)
def test_NodeSpecificMessage(self): d = bytearray([0x61, 0x02, 0x03, 0x40, 0x50, 0x60, 0x70, 0x80]) msg = can.Message(extended_id=False, arbitration_id=0x6E0, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeSpecific) self.assertEqual(p.sendNode, 0x00) self.assertEqual(p.controlCode, 0x61) self.assertEqual(p.data, bytearray([0x02, 0x03, 0x40, 0x50, 0x60, 0x70, 0x80])) d = bytearray([0x61, 0x02, 0x03, 0x40, 0x50, 0x60, 0x70, 0x80]) msg = can.Message(extended_id=False, arbitration_id=0x7DF, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeSpecific) self.assertEqual(p.sendNode, 0xFF) self.assertEqual(p.controlCode, 0x61) self.assertEqual(p.data, bytearray([0x02, 0x03, 0x40, 0x50, 0x60, 0x70, 0x80]))
def test_ConfigurationQueryMessageRequest(self): d = bytearray([0x0A, 0x04, 0x0F, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeConfigurationQuery) #self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.key, 15)
def test_NodeIdentificationMessageRequest(self): d = bytearray([0x00, 0x02]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeIdentification) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x00) self.assertEqual(p.destNode, 0x02) self.assertEqual(p.msgType, canfix.MSG_REQUEST)
def test_ConfigurationQueryMessageRequest(self): d = bytearray([0x0A, 0x04, 0x0F, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeConfigurationQuery) #self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.key, 15)
def test_NodeDescriptionMessage(self): d = bytearray([0x0B, 0x04, 0x01, 0x00, ord('A'), ord('B'), ord('C'), ord('D')]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeDescription) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.packetnumber, 1) self.assertEqual(p.chars, bytearray([ord('A'), ord('B'), ord('C'), ord('D')]))
def test_NodeIdentificationMessageRequest(self): d = bytearray([0x00, 0x02]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeIdentification) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x00) self.assertEqual(p.destNode, 0x02) self.assertEqual(p.msgType, canfix.MSG_REQUEST)
def test_EnableParameterMessageRequest(self): d = bytearray([0x04, 0x04, 0x05, 0x01]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.EnableParameter) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x04) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.identifier, 261)
def test_EnableParameterMessageRequest(self): d = bytearray([0x04, 0x04, 0x05, 0x01]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.EnableParameter) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x04) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.identifier, 261)
def test_NodeStatusMessage(self): d = bytearray([0x06, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) p.type = "WORD" self.assertIsInstance(p, canfix.NodeStatus) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.controlCode, 0x06) self.assertEqual(p.parameter, 0x00) self.assertEqual(p.value, [False]*16)
def test_ConfigurationSetMessageResponseSuccess(self): d = bytearray([0x09, 0x05, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeConfigurationSet) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x05) self.assertEqual(p.status, canfix.MSG_SUCCESS) self.assertEqual(p.errorCode, 0)
def test_ParameterSetMessage(self): d = bytearray([0x0C, 0x83, 0x19, 0x0F, 0x27]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.ParameterSet) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.index, 3) self.assertEqual(p.type, "UINT") self.assertEqual(p.multiplier, 0.1) self.assertTrue(abs(p.value - 999.9) < 0.1)
def test_BitRateSetMessageRequest(self): d = bytearray([0x01, 0x02, 0x01]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.BitRateSet) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x01) self.assertEqual(p.destNode, 0x02) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.bitrate, 1)
def test_NodeStatusMessage(self): d = bytearray([0x06, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) p.type = "WORD" self.assertIsInstance(p, canfix.NodeStatus) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.controlCode, 0x06) self.assertEqual(p.parameter, 0x00) self.assertEqual(p.value, [False] * 16)
def test_ParameterSetIndexCalc(self): for i in range(256): cc = (i // 32) + 0x0C x = (i % 32) << 11 | 0x183 d = bytearray([cc, x % 256, x >> 8, 0x0F, 0x27]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.ParameterSet) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.index, i)
def test_BitRateSetMessageRequest(self): d = bytearray([0x01, 0x02, 0x01]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.BitRateSet) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x01) self.assertEqual(p.destNode, 0x02) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.bitrate, 1)
def test_ConfigurationQueryMessageResponseSuccess(self): d = bytearray([0x0A, 0x04, 0x00, 0x55]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) p.datatype = "BYTE" self.assertIsInstance(p, canfix.NodeConfigurationQuery) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.error, 0x00) self.assertEqual(p.value, [True,False,True,False,True,False,True,False])
def test_ParameterSetIndexCalc(self): for i in range(256): cc = (i // 32) + 0x0C x = (i % 32) << 11 | 0x183 d = bytearray([cc, x % 256, x >> 8, 0x0F, 0x27]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.ParameterSet) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.index, i)
def test_ConfigurationSetMessageResponseSuccess(self): d = bytearray([0x09, 0x05, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeConfigurationSet) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x05) self.assertEqual(p.status, canfix.MSG_SUCCESS) self.assertEqual(p.errorCode, 0)
def test_ParameterSetMessage(self): d = bytearray([0x0C, 0x83, 0x19, 0x0F, 0x27]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.ParameterSet) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.index, 3) self.assertEqual(p.type, "UINT") self.assertEqual(p.multiplier, 0.1) self.assertTrue(abs(p.value - 999.9) < 0.1)
def test_ConfigurationSetMessageRequest(self): d = bytearray([0x09, 0x04, 0x0F, 0x00, 0x55]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) p.datatype = "BYTE" self.assertIsInstance(p, canfix.NodeConfigurationSet) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.key, 15) self.assertEqual(p.value, [True,False,True,False,True,False,True,False])
def test_TwoWayConnectionMessageResponseSucceed(self): d = bytearray([0x08, 0x04, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.TwoWayConnection) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.controlCode, 0x08) self.assertEqual(p.status, canfix.MSG_SUCCESS) self.assertEqual(p.errorCode, 0x00)
def test_BitRateSetMessageResponse(self): d = bytearray([0x01, 0x02]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.BitRateSet) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x01) self.assertEqual(p.destNode, 0x02) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.status, canfix.MSG_SUCCESS) d = bytearray([0x01, 0x02, 0xFF]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.BitRateSet) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x01) self.assertEqual(p.destNode, 0x02) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.status, canfix.MSG_FAIL)
def test_EnableParameterMessageResponse(self): d = bytearray([0x04, 0x04, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.EnableParameter) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x04) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.status, canfix.MSG_SUCCESS) d = bytearray([0x04, 0x04, 0x01]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.EnableParameter) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x04) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.status, canfix.MSG_FAIL)
def test_TwoWayConnectionMessageRequest(self): d = bytearray([0x08, 0x04, 0x02, 0x39, 0x30]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.TwoWayConnection) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.controlCode, 0x08) self.assertEqual(p.connectionType, 12345) self.assertEqual(p.channel, 0x02)
def test_TwoWayConnectionMessageRequest(self): d = bytearray([0x08, 0x04, 0x02, 0x39, 0x30]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.TwoWayConnection) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.controlCode, 0x08) self.assertEqual(p.connectionType, 12345) self.assertEqual(p.channel, 0x02)
def test_UpdateFirmwareMessageRequest(self): d = bytearray([0x07, 0x04, 0x39, 0x30, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.UpdateFirmware) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.controlCode, 0x07) self.assertEqual(p.verification, 12345) self.assertEqual(p.channel, 0)
def test_UpdateFirmwareMessageResponseFail(self): d = bytearray([0x07, 0x04, 0x01]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.UpdateFirmware) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.controlCode, 0x07) self.assertEqual(p.status, canfix.MSG_FAIL) self.assertEqual(p.errorCode, 0x01)
def test_TwoWayConnectionMessageResponseSucceed(self): d = bytearray([0x08, 0x04, 0x00]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.TwoWayConnection) self.assertEqual(p.msgType, canfix.MSG_RESPONSE) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.controlCode, 0x08) self.assertEqual(p.status, canfix.MSG_SUCCESS) self.assertEqual(p.errorCode, 0x00)
def test_ConfigurationQueryMessageResponseSuccess(self): d = bytearray([0x0A, 0x04, 0x00, 0x55]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) p.datatype = "BYTE" self.assertIsInstance(p, canfix.NodeConfigurationQuery) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.error, 0x00) self.assertEqual(p.value, [True, False, True, False, True, False, True, False])
def test_ParameterPitchControlPosition(self): d = bytearray([0x00, 0x00, 0x00, 0x00, 0x00]) msg = can.Message(arbitration_id=0x124, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Pitch Control Position") self.assertEqual(p.value, 0) d = bytearray([0x00, 0x00, 0x00, 0xF0, 0xD8]) # -10,000 msg.data = d p = canfix.parseMessage(msg) self.assertEqual(p.value, -100) d = bytearray([0x00, 0x00, 0x00, 0x10, 0x27]) # 10,000 msg.data = d p = canfix.parseMessage(msg) self.assertEqual(p.value, 100) d = bytearray([0x00, 0x00, 0x00, 0x04, 0xd9]) # -9,980 msg.data = d p = canfix.parseMessage(msg) self.assertEqual(p.value, -99.8)
def test_ParameterMeta(self): d = bytearray([0x00, 0x00, 0x00, 0x1c, 0x04]) # 1052 msg = can.Message(arbitration_id=0x183, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Indicated Airspeed") self.assertEqual(p.value, 105.2) self.assertEqual(p.meta, None) d = bytearray([0x00, 0x00, 0x10, 0x1c, 0x04]) # 1052 msg = can.Message(arbitration_id=0x183, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Indicated Airspeed") self.assertEqual(p.value, 105.2) self.assertEqual(p.meta, 'Min') d = bytearray([0x00, 0x00, 0xF0, 0x1c, 0x04]) # 1052 msg = can.Message(arbitration_id=0x183, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Indicated Airspeed") self.assertEqual(p.value, 105.2) self.assertEqual(p.meta, 'Vy')
def test_ParameterIndex(self): d = bytearray([0x00, 0x00, 0x00, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.index, 0) d = bytearray([0x00, 0x01, 0x00, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.index, 1) d = bytearray([0x00, 0xFF, 0x00, 0xd2, 0x04]) msg = can.Message(arbitration_id=0x501, extended_id=False, data=d) p = canfix.parseMessage(msg) self.assertEqual(p.name, "Cylinder Head Temperature #2") self.assertEqual(p.value, 123.4) self.assertEqual(p.index, 255)
def test_ConfigurationSetMessageRequest(self): d = bytearray([0x09, 0x04, 0x0F, 0x00, 0x55]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) p.datatype = "BYTE" self.assertIsInstance(p, canfix.NodeConfigurationSet) self.assertEqual(p.msgType, canfix.MSG_REQUEST) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.key, 15) self.assertEqual(p.value, [True, False, True, False, True, False, True, False])
def test_NodeIdentificationMessageResponse(self): d = bytearray([0x00, 0x02, 0x01, 0x40, 0x50, 0x60, 0x70, 0x80]) msg = can.Message(extended_id=False, arbitration_id=0x6E1, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeIdentification) self.assertEqual(p.sendNode, 0x01) self.assertEqual(p.controlCode, 0x00) self.assertEqual(p.destNode, 0x02) self.assertEqual(p.device, 0x40) self.assertEqual(p.fwrev, 0x50) self.assertEqual(p.model, 8417376) self.assertEqual(p.msgType, canfix.MSG_RESPONSE)
def test_NodeDescriptionMessage(self): d = bytearray( [0x0B, 0x04, 0x01, 0x00, ord('A'), ord('B'), ord('C'), ord('D')]) msg = can.Message(extended_id=False, arbitration_id=0x6E2, data=d) p = canfix.parseMessage(msg) self.assertIsInstance(p, canfix.NodeDescription) self.assertEqual(p.sendNode, 0x02) self.assertEqual(p.destNode, 0x04) self.assertEqual(p.packetnumber, 1) self.assertEqual(p.chars, bytearray([ord('A'), ord('B'), ord('C'), ord('D')]))
def listen(conn, msg_count, raw): count = 0 while True: try: msg = conn.recv(1.0) if msg: #print(str(msg) + canfix.parameters[msg.arbitration_id].name) x = canfix.parseMessage(msg) if raw: print(str(msg)) else: print(canfix.Parameter(msg)) count+=1 if msg_count != 0: if count > msg_count: break except KeyboardInterrupt: break except: print(str(msg))
def __getFreeChannel(self): """Waits for a half a second to see if there is any traffic on any of the channels and returns the channel number of the first free channel""" endtime = time.time() + 0.5 channels = [0] * 16 while True: # Wait loop try: rframe = self.can.recv(0.1) msg = canfix.parseMessage(rframe) if isinstance(msg, canfix.TwoWayConnection): self.channels[msg.channel] = 1 except connection.Timeout: pass finally: now = time.time() if now > endtime: break for ch, v in enumerate(channels): if v == 0: return ch return -1