Advertisement
DeaD_EyE

adsb

Mar 30th, 2016
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.97 KB | None | 0 0
  1. from math import log
  2. from collections import namedtuple
  3. from bitstring import BitStream
  4.  
  5.  
  6. def convert2hex(raw_data):
  7.     data = raw_data.decode().rstrip(';\n\r').lstrip('*')
  8.     if len(data) * log(16, 2) == 112:
  9.         return '0x' + data
  10.     else:
  11.         raise ValueError
  12.  
  13. def parser(data):
  14.     return_tuple = namedtuple('ADSB',
  15.         ['DF', 'CA', 'ICAO24', 'DATA', 'PC'])
  16.     fmt = '5, 3, 24, 56, 24'
  17.     data = BitStream(data)
  18.     return return_tuple(*data.unpack(fmt))
  19.  
  20. def aircraft_identification(data):
  21.     icao24_index='#ABCDEFGHIJKLMNOPQRSTUVWXYZ#####_###############0123456789######'
  22.     fmt = '8, 8*6'
  23.     bitstream_frame = BitStream(hex(data))
  24.     icao = bitstream_frame.unpack(fmt)
  25.     icao = ''.join([icao24_index[i] for i in icao[1:]]).strip('_')
  26.     return icao
  27.  
  28. def airbone_position(data):
  29.     return_tuple = namedtuple('AIRBONE_POSITION', ['TC', 'SS', 'NICsb', 'ALT', 'T', 'F', 'LAT_CPR', 'LON_CPR'])
  30.     EVEN = 0
  31.     ODD = 1
  32.     bitstream_frame = BitStream(hex(data))
  33.     fmt = '5, 2, 1, 12, 1, 1, 17, 17'
  34.     return return_tuple(*bitstream_frame.unpack(fmt))
  35.  
  36. print(b'*580FF2CF7E9BA6;\n\r', parser(b'*580FF2CF7E9BA6;\n\r'))
  37. print(b'*580FF6B283EB7A;\n\r', parser(b'*580FF6B283EB7A;\n\r'))
  38.  
  39. raw1 = convert2hex(b'*8D75804B580FF2CF7E9BA6F701D0;\n\r')
  40. raw2 = convert2hex(b'*8D4840D6202CC371C32CE0576098;\n\r')
  41.  
  42. print(b'*8D75804B580FF2CF7E9BA6F701D0;\n\r', parser(raw1))
  43. print(b'*8D4840D6202CC371C32CE0576098;\n\r', parser(raw2))
  44. print()
  45. print(b'*8D4840D6202CC371C32CE0576098;\n\r')
  46. ident = convert2hex(b'*8D4840D6202CC371C32CE0576098;\n\r')
  47. print('Identification:', aircraft_identification((parser(ident).DATA)))
  48.  
  49. print()
  50. f1 = b'*8D40621D58C382D690C8AC2863A7;\n\r'
  51. f2 = b'*8D40621D58C386435CC412692AD6;\n\r'
  52.  
  53. d1 = convert2hex(f1)
  54. d2 = convert2hex(f2)
  55.  
  56. data1 = parser(d1).DATA
  57. data2 = parser(d2).DATA
  58. print(b'*8D40621D58C382D690C8AC2863A7;\n\r', airbone_position(data1))
  59. print(b'*8D40621D58C386435CC412692AD6;\n\r', airbone_position(data2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement