from ctypes import Structure, c_byte, c_ubyte, c_uint32, c_uint16, sizeof
|
from sys import argv
|
import os
|
|
class Handshake(Structure):
|
_fields_=[
|
('Magic', c_ubyte * 8),
|
('FrameDataLength',c_uint32),
|
('Reserved',c_ubyte * 12)
|
]
|
|
class Header(Structure):
|
_fields_=[
|
('Magic', c_ubyte * 8),
|
('FrameNumber',c_uint32),
|
('VersionNumber',c_uint32),
|
('NumberOfDetection',c_uint16),
|
('NumberOfTrack',c_uint16),
|
('HostSpeed',c_uint16),
|
('HostAngle',c_uint16),
|
('Reserved',c_byte * 8),
|
('RangeAccuracyIdx',c_uint16),
|
('DopplerAccuracyIdx',c_uint16),
|
('AzimuthAccuracyIdx',c_uint16),
|
('ElevationAccuracyIdx',c_uint16),
|
('DspWorkload',c_byte),
|
('ARMWorkload', c_byte),
|
('Reserved2',c_byte * 6),
|
]
|
|
def bytes_hex(bytes):
|
return ' '.join(["%02x" % b for b in bytes])
|
|
if __name__ == '__main__':
|
if len(argv) != 2:
|
print('Usage: python parser.py [filename]')
|
exit(1)
|
|
print(sizeof(Handshake))
|
filename = argv[1]
|
file_size = os.path.getsize(filename)
|
with open(filename, "rb") as udp_file:
|
if file_size == 24:
|
handshake = Handshake.from_buffer_copy(udp_file.read(sizeof(Handshake)))
|
udp_file.close()
|
print('Magic: ', bytes_hex(handshake.Magic))
|
print('FrameDataLength: ', handshake.FrameDataLength)
|
print('Reserved: ', bytes_hex(handshake.Reserved))
|
elif file_size == 256:
|
header = Header.from_buffer_copy(udp_file.read(sizeof(Header)))
|
udp_file.close()
|
print('Magic: ', bytes_hex(header.Magic))
|
print('FrameNumber: ', header.FrameNumber)
|
print('VersionNumber: ', header.VersionNumber)
|
print('NumberOfDetection: ', header.NumberOfDetection)
|
print('NumberOfTrack: ', header.NumberOfTrack)
|
print('HostSpeed: ', header.HostSpeed)
|
print('HostAngle: ', header.HostAngle)
|
print('Reserved: ', bytes_hex(header.Reserved))
|
print('RangeAccuracyIdx: ', header.RangeAccuracyIdx)
|
print('DopplerAccuracyIdx: ', header.DopplerAccuracyIdx)
|
print('AzimuthAccuracyIdx: ', header.AzimuthAccuracyIdx)
|
print('ElevationAccuracyIdx: ', header.ElevationAccuracyIdx)
|
print('DspWorkload: ', header.DspWorkload)
|
print('ARMWorkload: ', header.ARMWorkload)
|
print('Reserved2: ', bytes_hex(header.Reserved2))
|
|