blob: 053df1df5f6281379a2868e04e89a76771741915 [file] [log] [blame]
#!/usr/bin/python
"""Bandpass Recorder Tool.
This script uses the URSP and records signals from the air. The user can
specify the center-frequency, gain value, width of the recording and the
duration of the recording.
"""
from distutils.version import StrictVersion
import os
import sys
import time
from gnuradio import gr
from PyQt4 import Qt
from bandpass_recorder_file import bandpass_recorder_file
from bandpass_recorder_gui import bandpass_recorder_gui
import options
optspec = """
bandpass_recorder.py [options...] filename
--
v,visual Displays a GUI for viewing the region to be recorded.
f,frequency= Specify the center frequency to record from in MHz [2412]
g,gain= Specify the decibel gain of the recording. [50.0]
w,width= Specify the width of the interval of the recording in KHz. [20000]
d,duration= Specify the length of the recording in seconds. [5]
"""
def record(gain, freq, width, duration, filename):
"""Record a specified signal and store it into a file.
Args:
gain: Amplification of the signal. (dB)
freq: Center Frequency of the recording (MHz).
width: Width of the bandpass filter. (KHz)
duration: Length of the recording. (s)
filename: Path to the file that the recording is stored into.
"""
print 'test'
file_block = bandpass_recorder_file()
print 'recording... ({0} seconds)\n'.format(duration)
file_block.set_gain(gain)
file_block.set_freq(freq * 1e6)
file_block.set_width(width * 1e3)
file_block.start()
time.sleep(duration)
file_block.stop()
file_block.wait()
# Rename output file
try:
os.rename('recorder.out', filename)
except OSError as e:
print '\nOSError [{0}]: {1}'.format(e.errno, e.strerror)
print 'Recording stored in \'recorder.out\'\n'
def main():
o = options.Options(optspec)
opt, flags, extra = o.parse(sys.argv[1:])
if len(extra) != 1:
o.fatal('Filename missing or extra arguments present')
sys.exit(1)
recording_filename = extra[0]
if StrictVersion(Qt.qVersion()) >= StrictVersion('4.5.0'):
prefs = gr.prefs().get_string('qtgui', 'style', 'raster')
Qt.QApplication.setGraphicsSystem(prefs)
qapp = Qt.QApplication(sys.argv)
if opt.visual:
gui_block = bandpass_recorder_gui()
gui_block.start()
gui_block.show()
# Define callback behaviour for the gui_block: starts the file_block and
# begins recording once the gui_block is closed.
def gui_callback():
gain = gui_block.get_gain()
freq = gui_block.get_freq() / 1000000.0
width = gui_block.get_width()
record_time = gui_block.get_record_time() / 1000.0
gui_block.stop()
gui_block.wait()
record(gain, freq, width, record_time, recording_filename)
qapp.connect(qapp, Qt.SIGNAL('aboutToQuit()'), gui_callback)
qapp.exec_()
else:
record(float(opt.gain), float(opt.frequency), float(opt.width),
float(opt.duration), recording_filename)
if __name__ == '__main__':
main()