Added ability to supply device arguments as parameter to applications.

Change adressing #140 enhancement request.
It is possible to select rtl-sdr dongle:
-with device index through commanline parameter: `--args="rtl=1"` (where 1 is the device index). Caution: device index is not unique identifier and it changes on each connection of the dongle.
-with devices serial number, the commandline option in this case has following form: `--args="rtl=00000001"` (where 00000001 is the serial number).

NOTE: You can set the serial number with use of:
```sh
rtl_eeprom -s <serial_number>
```
This commit is contained in:
Piotr Krysik 2016-02-14 20:24:54 +01:00
parent c3a822e5e4
commit 7185b6664f
4 changed files with 68 additions and 24 deletions

View File

@ -35,7 +35,7 @@ import time
class grgsm_livemon(gr.top_block, Qt.QWidget):
def __init__(self, fc=939.4e6, gain=30, ppm=0, samp_rate=2000000.052982, shiftoff=400e3):
def __init__(self, fc=939.4e6, gain=30, ppm=0, samp_rate=2000000.052982, shiftoff=400e3, args=""):
gr.top_block.__init__(self, "Gr-gsm Livemon")
Qt.QWidget.__init__(self)
self.setWindowTitle("Gr-gsm Livemon")
@ -86,7 +86,7 @@ class grgsm_livemon(gr.top_block, Qt.QWidget):
self._fc_slider_range = Range(925e6, 1990e6, 2e5, fc, 100)
self._fc_slider_win = RangeWidget(self._fc_slider_range, self.set_fc_slider, "Frequency", "counter_slider", float)
self.top_layout.addWidget(self._fc_slider_win)
self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + "" )
self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + args )
self.rtlsdr_source_0.set_sample_rate(samp_rate)
self.rtlsdr_source_0.set_center_freq(fc_slider-shiftoff, 0)
self.rtlsdr_source_0.set_freq_corr(ppm_slider, 0)
@ -260,13 +260,16 @@ if __name__ == '__main__':
help="Set samp_rate [default=%default]")
parser.add_option("-o", "--shiftoff", dest="shiftoff", type="eng_float", default=eng_notation.num_to_str(400e3),
help="Set shiftoff [default=%default]")
parser.add_option("", "--args", dest="args", type="string", default="",
help="Set device arguments [default=%default]")
(options, args) = parser.parse_args()
# from distutils.version import StrictVersion
# if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
# Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
qapp = Qt.QApplication(sys.argv)
tb = grgsm_livemon(fc=options.fc, gain=options.gain, ppm=options.ppm, samp_rate=options.samp_rate, shiftoff=options.shiftoff)
tb = grgsm_livemon(fc=options.fc, gain=options.gain, ppm=options.ppm, samp_rate=options.samp_rate, shiftoff=options.shiftoff, args=options.args)
tb.start()
tb.show()

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<?grc format='1' created='3.7.10'?>
<?grc format='1' created='3.7.8'?>
<flow_graph>
<timestamp>Sat Dec 13 10:49:59 2014</timestamp>
<block>
@ -8,6 +8,10 @@
<key>author</key>
<value>Piotr Krysik</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>window_size</key>
<value>2280, 1024</value>
@ -40,10 +44,6 @@
<key>generate_options</key>
<value>qt_gui</value>
</param>
<param>
<key>hier_block_src_path</key>
<value>.:</value>
</param>
<param>
<key>id</key>
<value>grgsm_livemon</value>
@ -52,18 +52,10 @@
<key>max_nouts</key>
<value>0</value>
</param>
<param>
<key>qt_qss_theme</key>
<value></value>
</param>
<param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
<key>run_command</key>
<value>{python} -u {filename}</value>
</param>
<param>
<key>run_options</key>
<value>prompt</value>
@ -270,6 +262,49 @@
<value>counter</value>
</param>
</block>
<block>
<key>parameter</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(872, 11)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>args</value>
</param>
<param>
<key>label</key>
<value>Device Arguments</value>
</param>
<param>
<key>short_id</key>
<value></value>
</param>
<param>
<key>type</key>
<value>string</value>
</param>
<param>
<key>value</key>
<value>""</value>
</param>
</block>
<block>
<key>blocks_rotator_cc</key>
<param>
@ -960,7 +995,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(880, 11)</value>
<value>(1016, 11)</value>
</param>
<param>
<key>_rotation</key>
@ -2601,7 +2636,7 @@
</param>
<param>
<key>args</key>
<value></value>
<value>args</value>
</param>
<param>
<key>_enabled</key>
@ -2728,7 +2763,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(16, 75)</value>
<value>(16, 115)</value>
</param>
<param>
<key>_rotation</key>

View File

@ -201,7 +201,7 @@ class wideband_receiver(grgsm.hier_block):
class wideband_scanner(gr.top_block):
def __init__(self, rec_len=3, sample_rate=2e6, carrier_frequency=939e6, ppm=0):
def __init__(self, rec_len=3, sample_rate=2e6, carrier_frequency=939e6, ppm=0, args=""):
gr.top_block.__init__(self, "Wideband Scanner")
@ -211,7 +211,8 @@ class wideband_scanner(gr.top_block):
self.ppm = ppm
# if no file name is given process data from rtl_sdr source
self.rtlsdr_source = osmosdr.source( args="numchan=" + str(1) + " " + "" )
print "Args=",args
self.rtlsdr_source = osmosdr.source( args="numchan=" + str(1) + " " + args )
self.rtlsdr_source.set_sample_rate(sample_rate)
@ -302,10 +303,12 @@ if __name__ == '__main__':
help="Specify the GSM band for the frequency.\nAvailable bands are: " + bands_list)
parser.add_option("-s", "--samp-rate", dest="samp_rate", type="float", default=2e6,
help="Set sample rate [default=%default] - allowed values even_number*0.2e6")
parser.add_option("-p", "--ppm", dest="ppm", type="intx", default=-45,
parser.add_option("-p", "--ppm", dest="ppm", type="intx", default=0,
help="Set frequency correction in ppm [default=%default]")
parser.add_option("-g", "--gain", dest="gain", type="eng_float", default=24.0,
help="Set gain [default=%default]")
parser.add_option("", "--args", dest="args", type="string", default="",
help="Set device arguments [default=%default]")
parser.add_option("--speed", dest="speed", type="intx", default=4,
help="Scan speed [default=%default]. Value range 0-5.")
parser.add_option("-v", "--verbose", action="store_true",
@ -351,7 +354,7 @@ if __name__ == '__main__':
scanner = wideband_scanner(rec_len=6-options.speed,
sample_rate=options.samp_rate,
carrier_frequency=current_freq,
ppm=options.ppm)
ppm=options.ppm, args=options.args)
# start recording
scanner.start()

View File

@ -38,7 +38,7 @@ import sys
class grgsm_capture(gr.top_block):
def __init__(self, fc, gain, samp_rate, ppm, arfcn, cfile=None, burst_file=None, band=None, verbose=False, rec_length=None):
def __init__(self, fc, gain, samp_rate, ppm, arfcn, cfile=None, burst_file=None, band=None, verbose=False, rec_length=None, args=""):
gr.top_block.__init__(self, "Gr-gsm Capture")
@ -209,6 +209,9 @@ if __name__ == '__main__':
parser.add_option("--band", dest="band",
help="Specify the GSM band for the frequency.\nAvailable bands are: " + bands_list + ".\nIf no band is specified, it will be determined automatically, defaulting to 0." )
parser.add_option("", "--args", dest="args", type="string", default="",
help="Set device arguments [default=%default]")
parser.add_option("-v", "--verbose", action="store_true",
help="If set, the captured bursts are printed to stdout")