| #!/usr/bin/python |
| # Copyright 2015 Google Inc. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| """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() |