def WaitForESCResponse(self, vtsa, ecusa): """ Wait for ESC response @return True for received, error code and aborted input object ID """ [received, data] = self._WaitForIBSMessage(PGN_VT2ECU, vtsa, ecusa, 0x92) return received, data[3], NumericValue.FromLEBytes(data[1:3]).Value()
def _SendETPMessage(self, pgn, da, sa, data): log.debug( '(ETP) Request starting ETP for {n} bytes'.format(n=len(data))) etpcm_id = IBSID(da, sa, PGN_ETP_CM, prio=6) etpdt_id = IBSID(da, sa, PGN_ETP_DT, prio=7) mesg_size = len(data) # Send RTS rts_control = 0x14 totalPackets = int(math.ceil(len(data) / 7.0)) log.debug("(ETP) Sending {0} bytes in {1} packets".format( len(data), totalPackets)) rts_data = ([rts_control] + NumericValue(mesg_size).AsLEBytes(4) + NumericValue(pgn).AsLEBytes(3)) self._SendCANMessage(etpcm_id.GetCANID(), rts_data) # Pack data with 0xFF to multiple of 7 if len(data) % 7 > 0: data = data + list([RESERVED] * (7 - (len(data) % 7))) # Setup for the data transfer nextPacket = 1 maxSentPackets = 0 done = False while not (done): # TODO: What is the time out for this one? [received, ctsdata] = self._WaitForIBSMessage(0xC800, da, sa, 0x15) if received: nextPacket = NumericValue.FromLEBytes(ctsdata[2:5]).Value() maxSentPackets = ctsdata[1] log.debug( "(ETP) Received CTS for max {0} packets, next packet {1}". format(maxSentPackets, nextPacket)) else: log.warning('(ETP) Wait for CTS timed out') break packetOffset = nextPacket - 1 nPackets = min(maxSentPackets, totalPackets - packetOffset) log.debug( '(ETP) Sending {0} packets with packet offset {1}'.format( nPackets, packetOffset)) log.debug('(ETP) bytes[{0} - {1}]'.format( packetOffset * 7, packetOffset * 7 + nPackets * 7 - 1)) dpoData = ([0x16] + [nPackets] + NumericValue(packetOffset).AsLEBytes(3) + NumericValue(pgn).AsLEBytes(3)) self._SendCANMessage(etpcm_id.GetCANID(), dpoData) for n in range(nPackets): startByte = (n * 7) + (packetOffset * 7) # Send send data[n * 7 + dataoffset: n* 7 +7 + dataoffset] self._SendCANMessage(etpdt_id.GetCANID(), [n + 1] + data[startByte:startByte + 7]) # If it is the last packet, quit the loop if (n + nextPacket) >= totalPackets: done = True break time.sleep(0.001)
def WaitForChangeSKMaskResponse(self, vtsa, ecusa): """ Wait for the Change Soft Key Mask response message Return True for received, error code, and new SK mask ID """ [received, data] = self._WaitForIBSMessage(PGN_VT2ECU, vtsa, ecusa, 0xAE) return received, data[5], NumericValue.FromLEBytes(data[3:5]).Value()
def WaitForChangeActiveMaskResponse(self, vtsa, ecusa): [received, data] = self._WaitForIBSMessage(PGN_VT2ECU, vtsa, ecusa, 0xAD) return received, NumericValue.FromLEBytes(data[1:3]).Value(), data[3]