I was using the unofficial parse python code that was provided in a different thread, but it isn't working for me, the code keeps running in a loop ( as shown in the screenshot below- same numbers keep repeating) and never produce a converted file whatsoever. I've attached the code I used, I'd appreciate any kind of help. Thanks
import struct import sys # # TODO 1: (NOW FIXED) Find the first occurrence of magic and start from there # TODO 2: Warn if we cannot parse a specific section and try to recover # TODO 3: Remove error at end of file if we have only fragment of TLV # def tlvHeaderDecode(data): tlvType, tlvLength = struct.unpack('2I', data) return tlvType, tlvLength def parseDetectedObjects(data, tlvLength): numDetectedObj, xyzQFormat = struct.unpack('2H', data[:4]) print("\tDetect Obj:\t%d "%(numDetectedObj)) for i in range(numDetectedObj): print("\tObjId:\t%d "%(i)) rangeIdx, dopplerIdx, peakVal, x, y, z = struct.unpack('3H3h', data[4+12*i:4+12*i+12]) print("\t\tDopplerIdx:\t%d "%(dopplerIdx)) print("\t\tRangeIdx:\t%d "%(rangeIdx)) print("\t\tPeakVal:\t%d "%(peakVal)) print("\t\tX:\t\t%07.3f "%(x*1.0/(1 << xyzQFormat))) print("\t\tY:\t\t%07.3f "%(y*1.0/(1 << xyzQFormat))) print("\t\tZ:\t\t%07.3f "%(z*1.0/(1 << xyzQFormat))) def parseRangeProfile(data, tlvLength): for i in range(256): rangeProfile = struct.unpack('H', data[2*i:2*i+2]) print("\tRangeProf[%d]:\t%07.3f "%(i, rangeProfile[0] * 1.0 * 6 / 8 / (1 << 8))) print("\tTLVType:\t%d "%(2)) def parseStats(data, tlvLength): interProcess, transmitOut, frameMargin, chirpMargin, activeCPULoad, interCPULoad = struct.unpack('6I', data[:24]) print("\tOutputMsgStats:\t%d "%(6)) print("\t\tChirpMargin:\t%d "%(chirpMargin)) print("\t\tFrameMargin:\t%d "%(frameMargin)) print("\t\tInterCPULoad:\t%d "%(interCPULoad)) print("\t\tActiveCPULoad:\t%d "%(activeCPULoad)) print("\t\tTransmitOut:\t%d "%(transmitOut)) print("\t\tInterprocess:\t%d "%(interProcess)) def tlvHeader(data): while data: headerLength = 36 try: magic, version, length, platform, frameNum, cpuCycles, numObj, numTLVs = struct.unpack('Q7I', data[:headerLength]) except: print ("Improper TLV structure found: ", (data,)) break print("Packet ID:\t%d "%(frameNum)) print("Version:\t%x "%(version)) print("TLV:\t\t%d "%(numTLVs)) print("Detect Obj:\t%d "%(numObj)) print("Platform:\t%X "%(platform)) if version > 0x01000005: subFrameNum = struct.unpack('I', data[36:40])[0] headerLength = 40 print("Subframe:\t%d "%(subFrameNum)) pendingBytes = length - headerLength data = data[headerLength:] for i in range(numTLVs): tlvType, tlvLength = tlvHeaderDecode(data[:8]) data = data[8:] if (tlvType == 1): parseDetectedObjects(data, tlvLength) elif (tlvType == 2): parseRangeProfile(data, tlvLength) elif (tlvType == 6): parseStats(data, tlvLength) else: print("Unidentified tlv type %d"%(tlvType)) data = data[tlvLength:] pendingBytes -= (8+tlvLength) data = data[pendingBytes:] yield length, frameNum if __name__ == "__main__": if len(sys.argv) != 2: print("Usage: parseTLV.py inputFile.bin") sys.exit() fileName = sys.argv[1] rawDataFile = open(fileName, "rb") rawData = rawDataFile.read() rawDataFile.close() magic = b'\x02\x01\x04\x03\x06\x05\x08\x07' offset = rawData.find(magic) rawData = rawData[offset:] for length, frameNum in tlvHeader(rawData): print