first part of integrating velocity from https://github.com/jaywilhelm/ADSB-Out_Python
This commit is contained in:
parent
59fdee124c
commit
416e2c6078
@ -72,13 +72,23 @@ def singlePlane(arguments):
|
||||
samples = bytearray()
|
||||
for i in range(0, arguments.repeats):
|
||||
modes = ModeS()
|
||||
(df17_even, df17_odd) = modes.df17_pos_rep_encode(arguments.capability, arguments.icao, arguments.typecode, arguments.surveillancestatus, arguments.nicsupplementb, arguments.altitude, arguments.time, arguments.latitude, arguments.longitude, arguments.surface)
|
||||
(df17_pos_even, df17_pos_odd) = modes.df17_pos_rep_encode(arguments.capability, arguments.icao, arguments.typecode, arguments.surveillancestatus, arguments.nicsupplementb, arguments.altitude, arguments.time, arguments.latitude, arguments.longitude, arguments.surface)
|
||||
|
||||
df17_velocity = modes.vel_heading_encode(arguments.capability, arguments.icao)
|
||||
|
||||
ppm = PPM()
|
||||
df17_array = ppm.frame_1090es_ppm_modulate(df17_even, df17_odd)
|
||||
df17_array_position = ppm.frame_1090es_ppm_modulate(df17_pos_even, df17_pos_odd)
|
||||
df17_array_velocity = ppm.frame_1090es_ppm_modulate(df17_velocity, df17_velocity)
|
||||
|
||||
hackrf = HackRF()
|
||||
samples_array = hackrf.hackrf_raw_IQ_format(df17_array)
|
||||
#Position
|
||||
samples_array = hackrf.hackrf_raw_IQ_format(df17_array_position)
|
||||
samples = samples+samples_array
|
||||
gap_array = ppm.addGap(arguments.intermessagegap)
|
||||
samples_array = hackrf.hackrf_raw_IQ_format(gap_array)
|
||||
samples = samples+samples_array
|
||||
#Velocity
|
||||
samples_array = hackrf.hackrf_raw_IQ_format(df17_array_velocity)
|
||||
samples = samples+samples_array
|
||||
gap_array = ppm.addGap(arguments.intermessagegap)
|
||||
samples_array = hackrf.hackrf_raw_IQ_format(gap_array)
|
||||
|
61
ModeS.py
61
ModeS.py
@ -72,6 +72,67 @@ class ModeS:
|
||||
|
||||
return (df17_even_bytes, df17_odd_bytes)
|
||||
|
||||
#From https://github.com/jaywilhelm/ADSB-Out_Python on 2019-08-18
|
||||
def vel_heading_encode(self, ca, icao):
|
||||
#(ca,icao,ew_dir,ew_vel,ns_dir,ns_vel)
|
||||
df = 17
|
||||
#ca = 5
|
||||
|
||||
|
||||
#1-5 downlink format
|
||||
#6-8 CA capability
|
||||
#9-32 ICAO
|
||||
#33-88 DATA -> 33-87 w/ 33-37 TC
|
||||
#89-112 Parity
|
||||
|
||||
tc = 19 #33-37 1-5 type code
|
||||
st = 0x01 #38-40 6-8 subtype, 3 air, 1 ground speed
|
||||
ic = 0 # #41 9 intent change flag
|
||||
resv_a = 0#1 #42 10
|
||||
NAC = 2#0 #43-45 11-13 velocity uncertainty
|
||||
S_EW = 1#1 #46 14
|
||||
V_EW = 97#9 #47-56 15-24
|
||||
S_NS = 0#1 #57 25 north-south sign
|
||||
V_NS = 378#0xA0 #58-67 26-35 160 north-south vel
|
||||
VrSrc = 1#0 #68 36 vertical rate source
|
||||
S_Vr = 1#1 #69 37 vertical rate sign
|
||||
Vr = 40#0x0E #70-78 38-46 14 vertical rate
|
||||
RESV_B = 0 #79-80 47-48
|
||||
S_Dif = 0 #81 49 diff from baro alt, sign
|
||||
Dif = 0x1c#0x17 #82-88 50-66 23 diff from baro alt
|
||||
|
||||
#ca = 5
|
||||
#icao = 0xabcdef#0xa06703 #0x485020 #
|
||||
|
||||
dfvel = []
|
||||
dfvel.append((df << 3) | ca)
|
||||
dfvel.append((icao >> 16) & 0xff)
|
||||
dfvel.append((icao >> 8) & 0xff)
|
||||
dfvel.append((icao) & 0xff)
|
||||
# data
|
||||
dfvel.append((tc << 3) | st)
|
||||
dfvel.append((ic << 7) | (resv_a << 6) | (NAC << 3) | (S_EW << 2) | ((V_EW >> 8) & 0x03))
|
||||
dfvel.append(0xFF & V_EW)
|
||||
dfvel.append((S_NS << 7) | ((V_NS >> 3))) #& 0x7F))
|
||||
dfvel.append(((V_NS << 5) & 0xE0) | (VrSrc << 4) | (S_Vr << 3) | ((Vr >> 6) & 0x03))
|
||||
dfvel.append(((Vr << 2) & 0xFC) | (RESV_B))
|
||||
dfvel.append((S_Dif << 7) | (Dif))
|
||||
|
||||
dfvel_str = "{0:02x} {1:02x} {2:02x} {3:02x} {4:02x} {5:02x} {6:02x} {7:02x} {8:02x} {9:02x} {10:02x}".format(
|
||||
*dfvel[0:11])
|
||||
#print(dfvel_str)
|
||||
dfvel_str2 = "{0:02x}{1:02x}{2:02x}{3:02x}{4:02x}{5:02x}{6:02x}{7:02x}{8:02x}{9:02x}{10:02x}".format(
|
||||
*dfvel[0:11])
|
||||
crc_str = "%X" % self.bin2int(self.modes_crc(dfvel_str2+"000000", encode=True))
|
||||
#print(crc_str)
|
||||
#print(dfvel_str), " %X" % +"000000", encode=True))
|
||||
#, "%X" % get_parity(hex2bin(dfvel_str+"000000"), extended=True))
|
||||
dfvel_crc = self.bin2int(self.modes_crc(dfvel_str2 + "000000", encode=True))
|
||||
dfvel.append((dfvel_crc >> 16) & 0xff)
|
||||
dfvel.append((dfvel_crc >> 8) & 0xff)
|
||||
dfvel.append((dfvel_crc) & 0xff)
|
||||
return dfvel
|
||||
|
||||
###############################################################
|
||||
|
||||
# Copyright (C) 2015 Junzi Sun (TU Delft)
|
||||
|
Loading…
Reference in New Issue
Block a user