aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/grgsm_livemon.grc2
-rw-r--r--apps/grgsm_livemon_headless.grc2
-rwxr-xr-xapps/grgsm_scanner14
-rwxr-xr-xapps/helpers/grgsm_capture13
-rw-r--r--python/__init__.py1
-rw-r--r--python/misc_utils/CMakeLists.txt1
-rw-r--r--python/misc_utils/device.py64
7 files changed, 89 insertions, 8 deletions
diff --git a/apps/grgsm_livemon.grc b/apps/grgsm_livemon.grc
index 46b83e2..176aa6c 100644
--- a/apps/grgsm_livemon.grc
+++ b/apps/grgsm_livemon.grc
@@ -2844,7 +2844,7 @@
</param>
<param>
<key>args</key>
- <value>args</value>
+ <value>str(grgsm.device.get_default_args(args))</value>
</param>
<param>
<key>_enabled</key>
diff --git a/apps/grgsm_livemon_headless.grc b/apps/grgsm_livemon_headless.grc
index a1ce284..2f3e981 100644
--- a/apps/grgsm_livemon_headless.grc
+++ b/apps/grgsm_livemon_headless.grc
@@ -2414,7 +2414,7 @@
</param>
<param>
<key>args</key>
- <value>args</value>
+ <value>str(grgsm.device.get_default_args(args))</value>
</param>
<param>
<key>_enabled</key>
diff --git a/apps/grgsm_scanner b/apps/grgsm_scanner
index 32210ed..ce33a60 100755
--- a/apps/grgsm_scanner
+++ b/apps/grgsm_scanner
@@ -36,7 +36,7 @@ import os
import osmosdr
import pmt
import time
-
+import sys
# from wideband_receiver import *
@@ -208,7 +208,8 @@ class wideband_scanner(gr.top_block):
# if no file name is given process data from rtl_sdr source
print "Args=", args
- self.rtlsdr_source = osmosdr.source(args="numchan=" + str(1) + " " + args)
+ self.rtlsdr_source = osmosdr.source(args="numchan=" + str(1) + " " +
+ str(grgsm.device.get_default_args(args)))
#self.rtlsdr_source.set_min_output_buffer(int(sample_rate*rec_len)) #this line causes segfaults on HackRF
self.rtlsdr_source.set_sample_rate(sample_rate)
@@ -387,7 +388,10 @@ def argument_parser():
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]")
+ help="Set device arguments [default=%default]."
+ " Use --list-devices the view the available devices")
+ parser.add_option("-l", "--list-devices", action="store_true",
+ help="List available SDR devices, use --args to specify hints")
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",
@@ -404,6 +408,10 @@ def main(options = None):
if options is None:
(options, args) = argument_parser().parse_args()
+ if options.list_devices:
+ grgsm.device.print_devices(options.args)
+ sys.exit(0)
+
if options.band not in grgsm.arfcn.get_bands():
parser.error("Invalid GSM band\n")
diff --git a/apps/helpers/grgsm_capture b/apps/helpers/grgsm_capture
index 081544a..f3886ba 100755
--- a/apps/helpers/grgsm_capture
+++ b/apps/helpers/grgsm_capture
@@ -53,8 +53,8 @@ class grgsm_capture(gr.top_block):
# Setting up RF source
##################################################
- self.sdr_source = \
- osmosdr.source(args="numchan=" + str(1) + " " + device_args)
+ self.sdr_source = osmosdr.source(args="numchan=" + str(1) + " " +
+ str(grgsm.device.get_default_args(device_args)))
self.sdr_source.set_sample_rate(samp_rate)
self.sdr_source.set_center_freq(freq, 0)
@@ -141,12 +141,19 @@ if __name__ == '__main__':
osmogroup.add_option("", "--args", dest="device_args", type="string",
default="", help="Set device arguments "
- "[default=%default]")
+ "[default=%default]. Use --list-devices the view the available devices")
+
+ osmogroup.add_option("-l", "--list-devices", action="store_true",
+ help="List available SDR devices, use --args to specify hints")
parser.add_option_group(osmogroup)
(options, args) = parser.parse_args()
+ if options.list_devices:
+ grgsm.device.print_devices(options.device_args)
+ sys.exit(0)
+
if not args:
parser.error("Please provide an output file name to save the captured data\n")
diff --git a/python/__init__.py b/python/__init__.py
index 00d14ac..e2905e8 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -59,6 +59,7 @@ from gsm_gmsk_mod import gsm_gmsk_mod
from fn_time import *
from txtime_bursts_tagger import *
import arfcn
+import device
#
diff --git a/python/misc_utils/CMakeLists.txt b/python/misc_utils/CMakeLists.txt
index ec732a4..76304ca 100644
--- a/python/misc_utils/CMakeLists.txt
+++ b/python/misc_utils/CMakeLists.txt
@@ -23,5 +23,6 @@ GR_PYTHON_INSTALL(
clock_offset_corrector_tagged.py
hier_block.py
fn_time.py
+ device.py
DESTINATION ${GR_PYTHON_DIR}/grgsm
)
diff --git a/python/misc_utils/device.py b/python/misc_utils/device.py
new file mode 100644
index 0000000..de967ab
--- /dev/null
+++ b/python/misc_utils/device.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @file
+# @author (C) 2019 by Vasil Velichkov <vvvelichkov@gmail.com>
+# @section LICENSE
+#
+# Gr-gsm is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# Gr-gsm is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with gr-gsm; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+#
+
+import osmosdr
+import os
+
+def get_devices(hint=""):
+ return osmosdr.device_find(osmosdr.device_t(hint))
+
+def match(dev, filters):
+ for f in filters:
+ for k, v in f.items():
+ if (k not in dev or dev[k] != v):
+ break
+ else:
+ return True
+ return False
+
+def exclude(devices, filters = ({'driver': 'audio'},)):
+ return [dev for dev in devices if not match(dev, filters)]
+
+def get_all_args(hint="nofake"):
+ return map(lambda dev: dev.to_string(), exclude(get_devices(hint)))
+
+def get_default_args(args):
+ # The presence of GRC_BLOCKS_PATH environment variable indicates that
+ # gnuradio-companion compiles a flowgraph and in this case no exception
+ # have to be thrown otherwise the generaged python script will be invalid.
+ # This allows compilation of flowgraphs without an SDR device.
+ if args or os.getenv("GRC_BLOCKS_PATH"):
+ return args
+
+ devices = get_all_args("nofake")
+ if not devices:
+ raise RuntimeError("Unable to find any supported SDR devices")
+
+ return devices[0]
+
+def print_devices(hint=""):
+ devices = exclude(get_devices(hint))
+ if devices:
+ print("\n".join(map(lambda dev: dev.to_string(), devices)))
+ else:
+ print("Unable to find any supported SDR devices")