first part of integrating velocity from https://github.com/jaywilhelm/ADSB-Out_Python

This commit is contained in:
nzkarit 2019-08-18 17:18:22 +12:00
parent 59fdee124c
commit 416e2c6078
2 changed files with 82 additions and 11 deletions

View File

@ -72,13 +72,23 @@ def singlePlane(arguments):
samples = bytearray() samples = bytearray()
for i in range(0, arguments.repeats): for i in range(0, arguments.repeats):
modes = ModeS() 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() 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() 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 samples = samples+samples_array
gap_array = ppm.addGap(arguments.intermessagegap) gap_array = ppm.addGap(arguments.intermessagegap)
samples_array = hackrf.hackrf_raw_IQ_format(gap_array) samples_array = hackrf.hackrf_raw_IQ_format(gap_array)

View File

@ -35,9 +35,9 @@ class ModeS:
df17_even_bytes.append((tc<<3) | (ss<<1) | nicsb) df17_even_bytes.append((tc<<3) | (ss<<1) | nicsb)
df17_even_bytes.append((enc_alt>>4) & 0xff) df17_even_bytes.append((enc_alt>>4) & 0xff)
df17_even_bytes.append((enc_alt & 0xf) << 4 | (time<<3) | (ff<<2) | (evenenclat>>15)) df17_even_bytes.append((enc_alt & 0xf) << 4 | (time<<3) | (ff<<2) | (evenenclat>>15))
df17_even_bytes.append((evenenclat>>7) & 0xff) df17_even_bytes.append((evenenclat>>7) & 0xff)
df17_even_bytes.append(((evenenclat & 0x7f) << 1) | (evenenclon>>16)) df17_even_bytes.append(((evenenclat & 0x7f) << 1) | (evenenclon>>16))
df17_even_bytes.append((evenenclon>>8) & 0xff) df17_even_bytes.append((evenenclon>>8) & 0xff)
df17_even_bytes.append((evenenclon ) & 0xff) df17_even_bytes.append((evenenclon ) & 0xff)
df17_str = "{0:02x}{1:02x}{2:02x}{3:02x}{4:02x}{5:02x}{6:02x}{7:02x}{8:02x}{9:02x}{10:02x}".format(*df17_even_bytes[0:11]) df17_str = "{0:02x}{1:02x}{2:02x}{3:02x}{4:02x}{5:02x}{6:02x}{7:02x}{8:02x}{9:02x}{10:02x}".format(*df17_even_bytes[0:11])
@ -58,9 +58,9 @@ class ModeS:
df17_odd_bytes.append((tc<<3) | (ss<<1) | nicsb) df17_odd_bytes.append((tc<<3) | (ss<<1) | nicsb)
df17_odd_bytes.append((enc_alt>>4) & 0xff) df17_odd_bytes.append((enc_alt>>4) & 0xff)
df17_odd_bytes.append((enc_alt & 0xf) << 4 | (time<<3) | (ff<<2) | (oddenclat>>15)) df17_odd_bytes.append((enc_alt & 0xf) << 4 | (time<<3) | (ff<<2) | (oddenclat>>15))
df17_odd_bytes.append((oddenclat>>7) & 0xff) df17_odd_bytes.append((oddenclat>>7) & 0xff)
df17_odd_bytes.append(((oddenclat & 0x7f) << 1) | (oddenclon>>16)) df17_odd_bytes.append(((oddenclat & 0x7f) << 1) | (oddenclon>>16))
df17_odd_bytes.append((oddenclon>>8) & 0xff) df17_odd_bytes.append((oddenclon>>8) & 0xff)
df17_odd_bytes.append((oddenclon ) & 0xff) df17_odd_bytes.append((oddenclon ) & 0xff)
df17_str = "{0:02x}{1:02x}{2:02x}{3:02x}{4:02x}{5:02x}{6:02x}{7:02x}{8:02x}{9:02x}{10:02x}".format(*df17_odd_bytes[0:11]) df17_str = "{0:02x}{1:02x}{2:02x}{3:02x}{4:02x}{5:02x}{6:02x}{7:02x}{8:02x}{9:02x}{10:02x}".format(*df17_odd_bytes[0:11])
@ -68,10 +68,71 @@ class ModeS:
df17_odd_bytes.append((df17_crc>>16) & 0xff) df17_odd_bytes.append((df17_crc>>16) & 0xff)
df17_odd_bytes.append((df17_crc>> 8) & 0xff) df17_odd_bytes.append((df17_crc>> 8) & 0xff)
df17_odd_bytes.append((df17_crc ) & 0xff) df17_odd_bytes.append((df17_crc ) & 0xff)
return (df17_even_bytes, df17_odd_bytes) 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) # Copyright (C) 2015 Junzi Sun (TU Delft)