diff --git a/apps/uhd_modes.py b/apps/uhd_modes.py
index ca911e5..c7ec4dd 100755
--- a/apps/uhd_modes.py
+++ b/apps/uhd_modes.py
@@ -199,7 +199,7 @@ if __name__ == '__main__':
updates.append(sbs1port.add_pending_conns)
if options.no_print is not True:
- outputs.append(air_modes.modes_output_print(my_position).parse)
+ outputs.append(air_modes.modes_output_print(my_position).output)
if options.multiplayer is not None:
[fghost, fgport] = options.multiplayer.split(':')
diff --git a/python/modes_print.py b/python/modes_print.py
index 4af3b9b..31deb98 100644
--- a/python/modes_print.py
+++ b/python/modes_print.py
@@ -60,15 +60,18 @@ class modes_output_print(modes_parse.modes_parse):
output += self.print20(data, ecc)
else:
output += "No handler for message type %i from %x (but it's in modes_parse)" % (msgtype, ecc)
- print output
+ return output
except NoHandlerError as e:
output += "No handler for message type %s from %x" % (e.msgtype, ecc)
- print output
+ return output
except MetricAltError:
pass
except CPRNoPositionError:
pass
+ def output(self, msg):
+ print self.parse(msg)
+
def print0(self, shortdata, ecc):
[vs, cc, sl, ri, altitude] = self.parse0(shortdata)
diff --git a/res/modes_rx.ui b/res/modes_rx.ui
index 13ad262..7c30c38 100644
--- a/res/modes_rx.ui
+++ b/res/modes_rx.ui
@@ -6,7 +6,7 @@
0
0
- 800
+ 877
618
@@ -419,12 +419,12 @@
130
220
- 651
+ 741
301
- 0
+ 2
@@ -721,7 +721,7 @@
5
11
- 631
+ 721
251
@@ -835,7 +835,7 @@
0
0
- 800
+ 877
25
diff --git a/res/testmain.py b/res/testmain.py
index 46234a4..acc87fb 100755
--- a/res/testmain.py
+++ b/res/testmain.py
@@ -5,6 +5,7 @@ from PyQt4 import QtCore,QtGui
from gnuradio import gr, gru, optfir, eng_notation, blks2
import gnuradio.gr.gr_threading as _threading
import air_modes
+from air_modes.modes_exceptions import *
from test import Ui_MainWindow
import csv
@@ -114,16 +115,17 @@ class mainwindow(QtGui.QMainWindow):
self.runner = None
if self.kmlgen is not None:
self.kmlgen.done = True
- #TODO FIXME KMLGEN NEEDS SELFDESTRUCT
+ #TODO FIXME need a way to kill kmlgen safely without delay
+ #self.kmlgen.join()
#self.kmlgen = None
self.ui.button_start.setText("Start")
else: #we aren't already running, let's get this party started
options = {}
- options["source"] = self.ui.combo_source.currentText()
+ options["source"] = str(self.ui.combo_source.currentText())
options["rate"] = int(self.ui.combo_rate.currentIndex())
- options["antenna"] = self.ui.combo_ant.currentText()
+ options["antenna"] = str(self.ui.combo_ant.currentText())
options["gain"] = float(self.ui.line_gain.text())
options["threshold"] = float(self.ui.line_threshold.text())
options["filename"] = str(self.ui.line_inputfile.text())
@@ -162,6 +164,8 @@ class mainwindow(QtGui.QMainWindow):
self.outputs.append(rawport.output)
self.updates.append(rawport.add_pending_conns)
+ self.livedata = air_modes.modes_output_print(my_position)
+
#add output for live data box
self.outputs.append(self.output_live_data)
@@ -170,7 +174,9 @@ class mainwindow(QtGui.QMainWindow):
self.ui.button_start.setText("Stop") #modify button text
def output_live_data(self, msg):
- self.ui.text_livedata.append(msg)
+ msgstr = self.livedata.parse(msg)
+ if msgstr is not None:
+ self.ui.text_livedata.append(msgstr)
class output_handler(threading.Thread):
@@ -195,7 +201,7 @@ class output_handler(threading.Thread):
except ADSBError:
pass
- time.sleep(0.3)
+ time.sleep(0.1)
self.done = True
@@ -219,8 +225,9 @@ class adsb_rx_block (gr.top_block):
gr.top_block.__init__(self)
self.options = options
- rate = int(options["rate"])
+ rate = options["rate"]
use_resampler = False
+ freq = 1090e6
if options["source"] == "UHD device":
from gnuradio import uhd
@@ -229,24 +236,30 @@ class adsb_rx_block (gr.top_block):
self.u.set_time_now(time_spec)
self.u.set_antenna(options["antenna"])
self.u.set_samp_rate(rate)
- self.u.set_gain(options["gain"])
+ rate = self.u.get_samp_rate()
+ self.u.set_gain(int(options["gain"]))
+ self.u.set_center_freq(freq, 0)
elif options["source"] == "RTL-SDR":
import osmosdr
self.u = osmosdr.source_c()
self.u.set_sample_rate(2.4e6) #fixed for RTL dongles
+ rate = int(4e6)
self.u.set_gain_mode(0) #manual gain mode
- self.u.set_gain(options["gain"])
+ self.u.set_gain(int(options["gain"]))
+ self.u.set_center_freq(freq, 0)
use_resampler = True
elif options["source"] == "File":
self.u = gr.file_source(gr.sizeof_gr_complex, options["filename"])
+ else:
+ raise NotImplementedError
self.demod = gr.complex_to_mag()
self.avg = gr.moving_average_ff(100, 1.0/100, 400)
-
- self.preamble = air_modes.modes_preamble(rate, options["threshold"])
- self.slicer = air_modes.modes_slicer(rate, queue)
+
+ self.preamble = air_modes.modes_preamble(int(rate), float(options["threshold"]))
+ self.slicer = air_modes.modes_slicer(int(rate), queue)
if use_resampler:
self.lpfiltcoeffs = gr.firdes.low_pass(1, 5*2.4e6, 1.2e6, 300e3)
@@ -258,11 +271,15 @@ class adsb_rx_block (gr.top_block):
self.connect(self.demod, self.avg)
self.connect(self.demod, (self.preamble, 0))
self.connect(self.avg, (self.preamble, 1))
- self.connect((self.preamble, 0), (self.slicer, 0))
+ self.connect(self.preamble, self.slicer)
+
+class wat_block(gr.top_block):
+ def __init__(self, options, queue):
+ gr.top_block.__init__(self)
- def tune(self, freq):
- result = self.u.set_center_freq(freq, 0)
- return result
+ self.src = gr.file_source(gr.sizeof_gr_complex, options["filename"])
+ self.sink = gr.null_sink(gr.sizeof_gr_complex)
+ self.connect(self.src, self.sink)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)