WOrk on >50175 feet altitudes and generating all altitudes
This commit is contained in:
parent
c9cae9130a
commit
ac80823285
2
.gitignore
vendored
2
.gitignore
vendored
@ -8,3 +8,5 @@ allICAO.py
|
||||
hackRFAllICAO.sh
|
||||
allLat.py
|
||||
hackRFAllLat.sh
|
||||
allAlt.py
|
||||
hackRFAllAlt.sh
|
||||
|
@ -56,7 +56,7 @@ def argParser():
|
||||
parser.add_argument('--tc', '--typecode', action='store', type=int, dest='typecode', default=cfg.getint('plane', 'typecode'), help='The type for the ADS-B message. 11 is an air position message. See https://adsb-decode-guide.readthedocs.io/en/latest/content/introduction.html#ads-b-message-types for more information. 5 bits. Default: %(default)s')
|
||||
parser.add_argument('--ss', '--surveillancestatus', action='store', type=int, dest='surveillancestatus', default=cfg.getint('plane', 'surveillancestatus'), help='The surveillance status. (Think this is always 0 from ADS-B messages. More info would be appreciated). Default: %(default)s')
|
||||
parser.add_argument('--nicsb', '--nicsupplementb', action='store', type=int, dest='nicsupplementb', default=cfg.getint('plane', 'nicsupplementb'), help='The NIC supplement-B.(Think this is always 0 from ADS-B messages. More info would be appreciated). Default: %(default)s')
|
||||
parser.add_argument('--time', action='store', type=int, dest='time', default=cfg.getint('plane', 'time'), help='The time. (Think this is always 0 from ADS-B messages. More info would be appreciated). Default: %(default)s')
|
||||
parser.add_argument('--time', action='store', type=int, dest='time', default=cfg.getint('plane', 'time'), help='0 indicates the time is not synchronous with UTC. Default: %(default)s')
|
||||
parser.add_argument('-s', '--surface', action='store', default=cfg.getboolean('plane', 'surface'), type=auto_bool, dest='surface', help='If the plane is on the ground or not. Default: %(default)s')
|
||||
parser.add_argument('-o', '--out', '--output', action='store', type=str, default=cfg.get('general', 'outputfilename'), dest='outputfilename', help='The iq8s output filename. This is the file which you will feed into the hackRF. Default: %(default)s')
|
||||
parser.add_argument('-r', '--repeats', action='store', dest='repeats', type=int, default=cfg.getint('general', 'repeats'), help='How many repeats of the data to perform. Default: %(default)s')
|
||||
|
2
ModeS.py
2
ModeS.py
@ -17,7 +17,7 @@ class ModeS:
|
||||
location = ModeSLocation()
|
||||
enc_alt = location.encode_alt_modes(alt, surface)
|
||||
#print "Alt(%r): %X " % (surface, enc_alt)
|
||||
|
||||
|
||||
#encode that position
|
||||
(evenenclat, evenenclon) = location.cpr_encode(lat, lon, False, surface)
|
||||
(oddenclat, oddenclon) = location.cpr_encode(lat, lon, True, surface)
|
||||
|
@ -30,9 +30,18 @@ class ModeSLocation:
|
||||
# Further work on fork
|
||||
# Copyright (C) 2017 David Robinson
|
||||
def encode_alt_modes(self, alt, bit13):
|
||||
# need to better understand as the >50175 feet not working
|
||||
# TODO >50175 feet
|
||||
mbit = False
|
||||
qbit = True
|
||||
encalt = int((int(alt) + 1000) / 25)
|
||||
# For altitudes -1000<=X<=50175 feet, set bit 8 AKA the Q bit to true which means 25 feet resoulution
|
||||
# For >50175 set the qbit to False and use 100 feet resoultion
|
||||
if alt > 50175:
|
||||
qbit = False
|
||||
encalt = int((int(alt) + 1000) / 100)
|
||||
else:
|
||||
qbit = True
|
||||
encalt = int((int(alt) + 1000) / 25)
|
||||
|
||||
if bit13 is True:
|
||||
tmp1 = (encalt & 0xfe0) << 2
|
||||
|
79
generateAllAlt.py
Executable file
79
generateAllAlt.py
Executable file
@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Will generate a CSV with all Latitudes
|
||||
import csv
|
||||
import os
|
||||
|
||||
def writeFile(directory, filename, filenameExtension, data, count):
|
||||
csvFilename = os.path.join(directory, "%s-%s.%s"%(filename, count, filenameExtension))
|
||||
with open(csvFilename, 'w', newline='') as csvfile:
|
||||
output = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
|
||||
output.writerow(['altitude'])
|
||||
for row in data:
|
||||
output.writerow([row])
|
||||
csvfile.close()
|
||||
return "{'csv':'%s', 'out':'%s-%s.iq8s'},"%(csvFilename, filename, count)
|
||||
|
||||
def main():
|
||||
directory = 'generated'
|
||||
filename = 'allAlt'
|
||||
filenameExtension = 'csv'
|
||||
scriptFilename = 'allAlt.py'
|
||||
hackRFScriptFilename = 'hackRFAllAlt.sh'
|
||||
|
||||
minAlt = -1100
|
||||
maxAlt = 100000
|
||||
splitNumber = 1000
|
||||
step = 1
|
||||
|
||||
try:
|
||||
os.stat(directory)
|
||||
except:
|
||||
os.mkdir(directory)
|
||||
|
||||
script = open(scriptFilename, 'w')
|
||||
script.write('#!/usr/bin/env python3\n')
|
||||
script.write('import time\n')
|
||||
script.write('import threading\n')
|
||||
script.write('from ADSB_Encoder import *\n')
|
||||
|
||||
hackRFScript = open(hackRFScriptFilename, 'w')
|
||||
hackRFScript.write('#!/bin/bash\n')
|
||||
|
||||
|
||||
i = minAlt
|
||||
j = 0
|
||||
k = 0
|
||||
data = []
|
||||
|
||||
files = ''
|
||||
while i <= maxAlt:
|
||||
if j == splitNumber:
|
||||
files += writeFile(directory, filename, filenameExtension, data, k)
|
||||
data = []
|
||||
hackRFScript.write("hackrf_transfer -t %s-%s.iq8s -f 915000000 -s 2000000 -x 10\n" % (filename, k))
|
||||
k += 1
|
||||
j = 0
|
||||
data.append(i)
|
||||
i += step
|
||||
j += 1
|
||||
files += writeFile(directory, filename, filenameExtension, data, k)
|
||||
data = []
|
||||
hackRFScript.write("hackrf_transfer -t %s-%s.iq8s -f 915000000 -s 2000000 -x 10\n" % (filename, k))
|
||||
k += 1
|
||||
j = 0
|
||||
files = files[:-1]
|
||||
script.write('files = [%s]\n' % (files))
|
||||
script.write('for file in files:\n')
|
||||
script.write(' t = threading.Thread(target=threadingCSV, args=(file,))\n')
|
||||
script.write(' t.start()\n')
|
||||
script.write(' print(file)\n')
|
||||
script.write(' time.sleep(1)\n')
|
||||
script.close()
|
||||
hackRFScript.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
|
||||
|
@ -23,7 +23,6 @@ def main():
|
||||
|
||||
minLat = -90
|
||||
maxLat = 90
|
||||
# If the number of lat is less than the split it doesn't work
|
||||
splitNumber = 1000
|
||||
step = 0.1
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user