Added comands building automatically grc applications
Better than manually generated python files but still not perfect as it takes many cmake lines to compile single file and grc files are compiled at every run of make. Removed also old and not working code for building grc files.
This commit is contained in:
parent
57711f6694
commit
242522fbee
|
@ -19,13 +19,28 @@
|
|||
|
||||
include(GrPython)
|
||||
|
||||
#GRCC( airprobe_file.grc airprobe_rtlsdr.grc airprobe_usrp.grc ${CMAKE_CURRENT_BINARY_DIR} ) #PK: removed untill I figure out how to do this correctly
|
||||
SET(APPS_DIR ${CMAKE_SOURCE_DIR}/apps)
|
||||
|
||||
SET(GRCC_COMMAND ${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc)
|
||||
|
||||
ADD_CUSTOM_TARGET(airprobe_file.py ALL)
|
||||
ADD_CUSTOM_COMMAND(
|
||||
TARGET airprobe_file.py
|
||||
COMMAND ${GRCC_COMMAND} -d ${CMAKE_CURRENT_BINARY_DIR}
|
||||
ARGS "airprobe_file.grc"
|
||||
WORKING_DIRECTORY ${APPS_DIR}
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(airprobe_rtlsdr.py ALL)
|
||||
ADD_CUSTOM_COMMAND(
|
||||
TARGET airprobe_rtlsdr.py
|
||||
COMMAND ${GRCC_COMMAND} -d ${CMAKE_CURRENT_BINARY_DIR}
|
||||
ARGS "airprobe_rtlsdr.grc"
|
||||
WORKING_DIRECTORY ${APPS_DIR}
|
||||
)
|
||||
|
||||
GR_PYTHON_INSTALL(
|
||||
PROGRAMS
|
||||
# ${PYFILES}
|
||||
airprobe_file.py
|
||||
airprobe_rtlsdr.py
|
||||
|
||||
DESTINATION bin
|
||||
)
|
||||
|
|
|
@ -1,144 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
##################################################
|
||||
# Gnuradio Python Flow Graph
|
||||
# Title: Airprobe File
|
||||
# Generated: Sat Feb 7 19:30:42 2015
|
||||
##################################################
|
||||
|
||||
from gnuradio import blocks
|
||||
from gnuradio import eng_notation
|
||||
from gnuradio import gr
|
||||
from gnuradio.eng_option import eng_option
|
||||
from gnuradio.filter import firdes
|
||||
from optparse import OptionParser
|
||||
import grgsm
|
||||
import pmt
|
||||
|
||||
class airprobe_file(gr.top_block):
|
||||
|
||||
def __init__(self, input_file_name="input.cfile", fc=937e6, samp_rate=1e6):
|
||||
gr.top_block.__init__(self, "Airprobe File")
|
||||
|
||||
##################################################
|
||||
# Parameters
|
||||
##################################################
|
||||
self.input_file_name = input_file_name
|
||||
self.fc = fc
|
||||
self.samp_rate = samp_rate
|
||||
|
||||
##################################################
|
||||
# Variables
|
||||
##################################################
|
||||
self.SDCCH = SDCCH = 6
|
||||
self.RACH = RACH = 3
|
||||
self.PCH = PCH = 5
|
||||
self.CHANNEL_UNKNOWN = CHANNEL_UNKNOWN = 0
|
||||
self.CCCH = CCCH = 2
|
||||
self.BCCH = BCCH = 1
|
||||
self.AGCH = AGCH = 4
|
||||
|
||||
##################################################
|
||||
# Blocks
|
||||
##################################################
|
||||
self.gsm_universal_ctrl_chans_demapper_0 = grgsm.universal_ctrl_chans_demapper(0, ([2,6,12,16,22,26,32,36,42,46]), ([BCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH]))
|
||||
self.gsm_receiver_0 = grgsm.receiver(4, ([0]), ([]))
|
||||
self.gsm_message_printer_0 = grgsm.message_printer(pmt.intern(""))
|
||||
self.gsm_input_0 = grgsm.gsm_input(
|
||||
ppm=0,
|
||||
osr=4,
|
||||
fc=fc,
|
||||
samp_rate_in=samp_rate,
|
||||
)
|
||||
self.gsm_control_channels_decoder_0 = grgsm.control_channels_decoder()
|
||||
self.gsm_clock_offset_control_0 = grgsm.clock_offset_control(fc)
|
||||
self.blocks_socket_pdu_0 = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", "4729", 10000)
|
||||
self.blocks_file_source_0 = blocks.file_source(gr.sizeof_gr_complex*1, input_file_name, False)
|
||||
|
||||
##################################################
|
||||
# Connections
|
||||
##################################################
|
||||
self.msg_connect(self.gsm_clock_offset_control_0, 'ppm', self.gsm_input_0, 'ppm_in')
|
||||
self.msg_connect(self.gsm_control_channels_decoder_0, 'msgs', self.blocks_socket_pdu_0, 'pdus')
|
||||
self.msg_connect(self.gsm_control_channels_decoder_0, 'msgs', self.gsm_message_printer_0, 'msgs')
|
||||
self.msg_connect(self.gsm_receiver_0, 'measurements', self.gsm_clock_offset_control_0, 'measurements')
|
||||
self.msg_connect(self.gsm_receiver_0, 'C0', self.gsm_universal_ctrl_chans_demapper_0, 'bursts')
|
||||
self.msg_connect(self.gsm_universal_ctrl_chans_demapper_0, 'bursts', self.gsm_control_channels_decoder_0, 'bursts')
|
||||
self.connect((self.blocks_file_source_0, 0), (self.gsm_input_0, 0))
|
||||
self.connect((self.gsm_input_0, 0), (self.gsm_receiver_0, 0))
|
||||
|
||||
|
||||
def get_input_file_name(self):
|
||||
return self.input_file_name
|
||||
|
||||
def set_input_file_name(self, input_file_name):
|
||||
self.input_file_name = input_file_name
|
||||
self.blocks_file_source_0.open(self.input_file_name, False)
|
||||
|
||||
def get_fc(self):
|
||||
return self.fc
|
||||
|
||||
def set_fc(self, fc):
|
||||
self.fc = fc
|
||||
self.gsm_input_0.set_fc(self.fc)
|
||||
|
||||
def get_samp_rate(self):
|
||||
return self.samp_rate
|
||||
|
||||
def set_samp_rate(self, samp_rate):
|
||||
self.samp_rate = samp_rate
|
||||
self.gsm_input_0.set_samp_rate_in(self.samp_rate)
|
||||
|
||||
def get_SDCCH(self):
|
||||
return self.SDCCH
|
||||
|
||||
def set_SDCCH(self, SDCCH):
|
||||
self.SDCCH = SDCCH
|
||||
|
||||
def get_RACH(self):
|
||||
return self.RACH
|
||||
|
||||
def set_RACH(self, RACH):
|
||||
self.RACH = RACH
|
||||
|
||||
def get_PCH(self):
|
||||
return self.PCH
|
||||
|
||||
def set_PCH(self, PCH):
|
||||
self.PCH = PCH
|
||||
|
||||
def get_CHANNEL_UNKNOWN(self):
|
||||
return self.CHANNEL_UNKNOWN
|
||||
|
||||
def set_CHANNEL_UNKNOWN(self, CHANNEL_UNKNOWN):
|
||||
self.CHANNEL_UNKNOWN = CHANNEL_UNKNOWN
|
||||
|
||||
def get_CCCH(self):
|
||||
return self.CCCH
|
||||
|
||||
def set_CCCH(self, CCCH):
|
||||
self.CCCH = CCCH
|
||||
|
||||
def get_BCCH(self):
|
||||
return self.BCCH
|
||||
|
||||
def set_BCCH(self, BCCH):
|
||||
self.BCCH = BCCH
|
||||
|
||||
def get_AGCH(self):
|
||||
return self.AGCH
|
||||
|
||||
def set_AGCH(self, AGCH):
|
||||
self.AGCH = AGCH
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
|
||||
parser.add_option("-i", "--input-file-name", dest="input_file_name", type="string", default="input.cfile",
|
||||
help="Set input.cfile [default=%default]")
|
||||
parser.add_option("-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(937e6),
|
||||
help="Set fc [default=%default]")
|
||||
parser.add_option("-s", "--samp-rate", dest="samp_rate", type="eng_float", default=eng_notation.num_to_str(1e6),
|
||||
help="Set samp_rate [default=%default]")
|
||||
(options, args) = parser.parse_args()
|
||||
tb = airprobe_file(input_file_name=options.input_file_name, fc=options.fc, samp_rate=options.samp_rate)
|
||||
tb.start()
|
||||
tb.wait()
|
|
@ -1,349 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
##################################################
|
||||
# Gnuradio Python Flow Graph
|
||||
# Title: Airprobe Rtlsdr
|
||||
# Generated: Tue Apr 28 22:47:46 2015
|
||||
##################################################
|
||||
|
||||
from PyQt4 import Qt
|
||||
from PyQt4.QtCore import QObject, pyqtSlot
|
||||
from gnuradio import blocks
|
||||
from gnuradio import eng_notation
|
||||
from gnuradio import gr
|
||||
from gnuradio import qtgui
|
||||
from gnuradio.eng_option import eng_option
|
||||
from gnuradio.filter import firdes
|
||||
from optparse import OptionParser
|
||||
import PyQt4.Qwt5 as Qwt
|
||||
import grgsm
|
||||
import osmosdr
|
||||
import pmt
|
||||
import sip
|
||||
import sys
|
||||
import time
|
||||
|
||||
from distutils.version import StrictVersion
|
||||
class airprobe_rtlsdr(gr.top_block, Qt.QWidget):
|
||||
|
||||
def __init__(self, fc=939.4e6, gain=30, samp_rate=2000000.052982, ppm=0):
|
||||
gr.top_block.__init__(self, "Airprobe Rtlsdr")
|
||||
Qt.QWidget.__init__(self)
|
||||
self.setWindowTitle("Airprobe Rtlsdr")
|
||||
try:
|
||||
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
|
||||
except:
|
||||
pass
|
||||
self.top_scroll_layout = Qt.QVBoxLayout()
|
||||
self.setLayout(self.top_scroll_layout)
|
||||
self.top_scroll = Qt.QScrollArea()
|
||||
self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
|
||||
self.top_scroll_layout.addWidget(self.top_scroll)
|
||||
self.top_scroll.setWidgetResizable(True)
|
||||
self.top_widget = Qt.QWidget()
|
||||
self.top_scroll.setWidget(self.top_widget)
|
||||
self.top_layout = Qt.QVBoxLayout(self.top_widget)
|
||||
self.top_grid_layout = Qt.QGridLayout()
|
||||
self.top_layout.addLayout(self.top_grid_layout)
|
||||
|
||||
self.settings = Qt.QSettings("GNU Radio", "airprobe_rtlsdr")
|
||||
self.restoreGeometry(self.settings.value("geometry").toByteArray())
|
||||
|
||||
|
||||
##################################################
|
||||
# Parameters
|
||||
##################################################
|
||||
self.fc = fc
|
||||
self.gain = gain
|
||||
self.samp_rate = samp_rate
|
||||
self.ppm = ppm
|
||||
|
||||
##################################################
|
||||
# Variables
|
||||
##################################################
|
||||
self.ppm_slider = ppm_slider = ppm
|
||||
self.g_slider = g_slider = gain
|
||||
self.fc_slider = fc_slider = fc
|
||||
self.SDCCH = SDCCH = 6
|
||||
self.SACCH = SACCH = 0x80
|
||||
self.RACH = RACH = 3
|
||||
self.PCH = PCH = 5
|
||||
self.CHANNEL_UNKNOWN = CHANNEL_UNKNOWN = 0
|
||||
self.CCCH = CCCH = 2
|
||||
self.BCCH = BCCH = 1
|
||||
self.AGCH = AGCH = 4
|
||||
|
||||
##################################################
|
||||
# Blocks
|
||||
##################################################
|
||||
self._ppm_slider_layout = Qt.QHBoxLayout()
|
||||
self._ppm_slider_layout.addWidget(Qt.QLabel("PPM Offset"+": "))
|
||||
class qwt_counter_pyslot(Qwt.QwtCounter):
|
||||
def __init__(self, parent=None):
|
||||
Qwt.QwtCounter.__init__(self, parent)
|
||||
@pyqtSlot('double')
|
||||
def setValue(self, value):
|
||||
super(Qwt.QwtCounter, self).setValue(value)
|
||||
self._ppm_slider_counter = qwt_counter_pyslot()
|
||||
self._ppm_slider_counter.setRange(-150, 150, 1)
|
||||
self._ppm_slider_counter.setNumButtons(2)
|
||||
self._ppm_slider_counter.setMinimumWidth(100)
|
||||
self._ppm_slider_counter.setValue(self.ppm_slider)
|
||||
self._ppm_slider_layout.addWidget(self._ppm_slider_counter)
|
||||
self._ppm_slider_counter.valueChanged.connect(self.set_ppm_slider)
|
||||
self.top_layout.addLayout(self._ppm_slider_layout)
|
||||
self._g_slider_layout = Qt.QHBoxLayout()
|
||||
self._g_slider_layout.addWidget(Qt.QLabel("Gain"+": "))
|
||||
class qwt_counter_pyslot(Qwt.QwtCounter):
|
||||
def __init__(self, parent=None):
|
||||
Qwt.QwtCounter.__init__(self, parent)
|
||||
@pyqtSlot('double')
|
||||
def setValue(self, value):
|
||||
super(Qwt.QwtCounter, self).setValue(value)
|
||||
self._g_slider_counter = qwt_counter_pyslot()
|
||||
self._g_slider_counter.setRange(0, 50, 0.5)
|
||||
self._g_slider_counter.setNumButtons(2)
|
||||
self._g_slider_counter.setMinimumWidth(100)
|
||||
self._g_slider_counter.setValue(self.g_slider)
|
||||
self._g_slider_layout.addWidget(self._g_slider_counter)
|
||||
self._g_slider_counter.valueChanged.connect(self.set_g_slider)
|
||||
self.top_layout.addLayout(self._g_slider_layout)
|
||||
self._fc_slider_layout = Qt.QVBoxLayout()
|
||||
self._fc_slider_tool_bar = Qt.QToolBar(self)
|
||||
self._fc_slider_layout.addWidget(self._fc_slider_tool_bar)
|
||||
self._fc_slider_tool_bar.addWidget(Qt.QLabel("Frequency"+": "))
|
||||
class qwt_counter_pyslot(Qwt.QwtCounter):
|
||||
def __init__(self, parent=None):
|
||||
Qwt.QwtCounter.__init__(self, parent)
|
||||
@pyqtSlot('double')
|
||||
def setValue(self, value):
|
||||
super(Qwt.QwtCounter, self).setValue(value)
|
||||
self._fc_slider_counter = qwt_counter_pyslot()
|
||||
self._fc_slider_counter.setRange(925e6, 1990e6, 2e5)
|
||||
self._fc_slider_counter.setNumButtons(2)
|
||||
self._fc_slider_counter.setValue(self.fc_slider)
|
||||
self._fc_slider_tool_bar.addWidget(self._fc_slider_counter)
|
||||
self._fc_slider_counter.valueChanged.connect(self.set_fc_slider)
|
||||
self._fc_slider_slider = Qwt.QwtSlider(None, Qt.Qt.Horizontal, Qwt.QwtSlider.BottomScale, Qwt.QwtSlider.BgSlot)
|
||||
self._fc_slider_slider.setRange(925e6, 1990e6, 2e5)
|
||||
self._fc_slider_slider.setValue(self.fc_slider)
|
||||
self._fc_slider_slider.setMinimumWidth(100)
|
||||
self._fc_slider_slider.valueChanged.connect(self.set_fc_slider)
|
||||
self._fc_slider_layout.addWidget(self._fc_slider_slider)
|
||||
self.top_layout.addLayout(self._fc_slider_layout)
|
||||
self.rtlsdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + "" )
|
||||
self.rtlsdr_source_0.set_sample_rate(samp_rate)
|
||||
self.rtlsdr_source_0.set_center_freq(fc_slider, 0)
|
||||
self.rtlsdr_source_0.set_freq_corr(ppm_slider, 0)
|
||||
self.rtlsdr_source_0.set_dc_offset_mode(2, 0)
|
||||
self.rtlsdr_source_0.set_iq_balance_mode(2, 0)
|
||||
self.rtlsdr_source_0.set_gain_mode(True, 0)
|
||||
self.rtlsdr_source_0.set_gain(g_slider, 0)
|
||||
self.rtlsdr_source_0.set_if_gain(20, 0)
|
||||
self.rtlsdr_source_0.set_bb_gain(20, 0)
|
||||
self.rtlsdr_source_0.set_antenna("", 0)
|
||||
self.rtlsdr_source_0.set_bandwidth(250e3, 0)
|
||||
|
||||
self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
|
||||
1024, #size
|
||||
firdes.WIN_BLACKMAN_hARRIS, #wintype
|
||||
fc_slider, #fc
|
||||
samp_rate, #bw
|
||||
"", #name
|
||||
1 #number of inputs
|
||||
)
|
||||
self.qtgui_freq_sink_x_0.set_update_time(0.10)
|
||||
self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
|
||||
self.qtgui_freq_sink_x_0.enable_autoscale(False)
|
||||
self.qtgui_freq_sink_x_0.enable_grid(False)
|
||||
self.qtgui_freq_sink_x_0.set_fft_average(1.0)
|
||||
|
||||
labels = ["", "", "", "", "",
|
||||
"", "", "", "", ""]
|
||||
widths = [1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1]
|
||||
colors = ["blue", "red", "green", "black", "cyan",
|
||||
"magenta", "yellow", "dark red", "dark green", "dark blue"]
|
||||
alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
1.0, 1.0, 1.0, 1.0, 1.0]
|
||||
for i in xrange(1):
|
||||
if len(labels[i]) == 0:
|
||||
self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
|
||||
else:
|
||||
self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
|
||||
self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
|
||||
self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
|
||||
self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])
|
||||
|
||||
self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget)
|
||||
self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win)
|
||||
self.gsm_universal_ctrl_chans_demapper_0 = grgsm.universal_ctrl_chans_demapper(0, ([2,6,12,16,22,26,32,36,42,46]), ([BCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH]))
|
||||
self.gsm_receiver_0 = grgsm.receiver(4, ([0]), ([]))
|
||||
self.gsm_message_printer_1 = grgsm.message_printer(pmt.intern(""))
|
||||
self.gsm_input_0 = grgsm.gsm_input(
|
||||
ppm=0,
|
||||
osr=4,
|
||||
fc=fc,
|
||||
samp_rate_in=samp_rate,
|
||||
)
|
||||
self.gsm_control_channels_decoder_0 = grgsm.control_channels_decoder()
|
||||
self.gsm_clock_offset_control_0 = grgsm.clock_offset_control(fc)
|
||||
self.blocks_socket_pdu_0 = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", "4729", 10000, False)
|
||||
|
||||
##################################################
|
||||
# Connections
|
||||
##################################################
|
||||
self.connect((self.gsm_input_0, 0), (self.gsm_receiver_0, 0))
|
||||
self.connect((self.rtlsdr_source_0, 0), (self.gsm_input_0, 0))
|
||||
self.connect((self.rtlsdr_source_0, 0), (self.qtgui_freq_sink_x_0, 0))
|
||||
|
||||
##################################################
|
||||
# Asynch Message Connections
|
||||
##################################################
|
||||
self.msg_connect(self.gsm_receiver_0, "C0", self.gsm_universal_ctrl_chans_demapper_0, "bursts")
|
||||
self.msg_connect(self.gsm_clock_offset_control_0, "ppm", self.gsm_input_0, "ppm_in")
|
||||
self.msg_connect(self.gsm_control_channels_decoder_0, "msgs", self.gsm_message_printer_1, "msgs")
|
||||
self.msg_connect(self.gsm_universal_ctrl_chans_demapper_0, "bursts", self.gsm_control_channels_decoder_0, "bursts")
|
||||
self.msg_connect(self.gsm_control_channels_decoder_0, "msgs", self.blocks_socket_pdu_0, "pdus")
|
||||
self.msg_connect(self.gsm_receiver_0, "measurements", self.gsm_clock_offset_control_0, "measurements")
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.settings = Qt.QSettings("GNU Radio", "airprobe_rtlsdr")
|
||||
self.settings.setValue("geometry", self.saveGeometry())
|
||||
event.accept()
|
||||
|
||||
def get_fc(self):
|
||||
return self.fc
|
||||
|
||||
def set_fc(self, fc):
|
||||
self.fc = fc
|
||||
self.gsm_input_0.set_fc(self.fc)
|
||||
self.set_fc_slider(self.fc)
|
||||
|
||||
def get_gain(self):
|
||||
return self.gain
|
||||
|
||||
def set_gain(self, gain):
|
||||
self.gain = gain
|
||||
self.set_g_slider(self.gain)
|
||||
|
||||
def get_samp_rate(self):
|
||||
return self.samp_rate
|
||||
|
||||
def set_samp_rate(self, samp_rate):
|
||||
self.samp_rate = samp_rate
|
||||
self.gsm_input_0.set_samp_rate_in(self.samp_rate)
|
||||
self.rtlsdr_source_0.set_sample_rate(self.samp_rate)
|
||||
self.qtgui_freq_sink_x_0.set_frequency_range(self.fc_slider, self.samp_rate)
|
||||
|
||||
def get_ppm(self):
|
||||
return self.ppm
|
||||
|
||||
def set_ppm(self, ppm):
|
||||
self.ppm = ppm
|
||||
self.set_ppm_slider(self.ppm)
|
||||
|
||||
def get_ppm_slider(self):
|
||||
return self.ppm_slider
|
||||
|
||||
def set_ppm_slider(self, ppm_slider):
|
||||
self.ppm_slider = ppm_slider
|
||||
Qt.QMetaObject.invokeMethod(self._ppm_slider_counter, "setValue", Qt.Q_ARG("double", self.ppm_slider))
|
||||
self.rtlsdr_source_0.set_freq_corr(self.ppm_slider, 0)
|
||||
|
||||
def get_g_slider(self):
|
||||
return self.g_slider
|
||||
|
||||
def set_g_slider(self, g_slider):
|
||||
self.g_slider = g_slider
|
||||
Qt.QMetaObject.invokeMethod(self._g_slider_counter, "setValue", Qt.Q_ARG("double", self.g_slider))
|
||||
self.rtlsdr_source_0.set_gain(self.g_slider, 0)
|
||||
|
||||
def get_fc_slider(self):
|
||||
return self.fc_slider
|
||||
|
||||
def set_fc_slider(self, fc_slider):
|
||||
self.fc_slider = fc_slider
|
||||
Qt.QMetaObject.invokeMethod(self._fc_slider_counter, "setValue", Qt.Q_ARG("double", self.fc_slider))
|
||||
Qt.QMetaObject.invokeMethod(self._fc_slider_slider, "setValue", Qt.Q_ARG("double", self.fc_slider))
|
||||
self.rtlsdr_source_0.set_center_freq(self.fc_slider, 0)
|
||||
self.qtgui_freq_sink_x_0.set_frequency_range(self.fc_slider, self.samp_rate)
|
||||
|
||||
def get_SDCCH(self):
|
||||
return self.SDCCH
|
||||
|
||||
def set_SDCCH(self, SDCCH):
|
||||
self.SDCCH = SDCCH
|
||||
|
||||
def get_SACCH(self):
|
||||
return self.SACCH
|
||||
|
||||
def set_SACCH(self, SACCH):
|
||||
self.SACCH = SACCH
|
||||
|
||||
def get_RACH(self):
|
||||
return self.RACH
|
||||
|
||||
def set_RACH(self, RACH):
|
||||
self.RACH = RACH
|
||||
|
||||
def get_PCH(self):
|
||||
return self.PCH
|
||||
|
||||
def set_PCH(self, PCH):
|
||||
self.PCH = PCH
|
||||
|
||||
def get_CHANNEL_UNKNOWN(self):
|
||||
return self.CHANNEL_UNKNOWN
|
||||
|
||||
def set_CHANNEL_UNKNOWN(self, CHANNEL_UNKNOWN):
|
||||
self.CHANNEL_UNKNOWN = CHANNEL_UNKNOWN
|
||||
|
||||
def get_CCCH(self):
|
||||
return self.CCCH
|
||||
|
||||
def set_CCCH(self, CCCH):
|
||||
self.CCCH = CCCH
|
||||
|
||||
def get_BCCH(self):
|
||||
return self.BCCH
|
||||
|
||||
def set_BCCH(self, BCCH):
|
||||
self.BCCH = BCCH
|
||||
|
||||
def get_AGCH(self):
|
||||
return self.AGCH
|
||||
|
||||
def set_AGCH(self, AGCH):
|
||||
self.AGCH = AGCH
|
||||
|
||||
if __name__ == '__main__':
|
||||
import ctypes
|
||||
import sys
|
||||
if sys.platform.startswith('linux'):
|
||||
try:
|
||||
x11 = ctypes.cdll.LoadLibrary('libX11.so')
|
||||
x11.XInitThreads()
|
||||
except:
|
||||
print "Warning: failed to XInitThreads()"
|
||||
parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
|
||||
parser.add_option("-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(939.4e6),
|
||||
help="Set fc [default=%default]")
|
||||
parser.add_option("-g", "--gain", dest="gain", type="eng_float", default=eng_notation.num_to_str(30),
|
||||
help="Set gain [default=%default]")
|
||||
parser.add_option("-s", "--samp-rate", dest="samp_rate", type="eng_float", default=eng_notation.num_to_str(2000000.052982),
|
||||
help="Set samp_rate [default=%default]")
|
||||
parser.add_option("-p", "--ppm", dest="ppm", type="intx", default=0,
|
||||
help="Set ppm [default=%default]")
|
||||
(options, args) = parser.parse_args()
|
||||
if(StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0")):
|
||||
Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
|
||||
qapp = Qt.QApplication(sys.argv)
|
||||
tb = airprobe_rtlsdr(fc=options.fc, gain=options.gain, samp_rate=options.samp_rate, ppm=options.ppm)
|
||||
tb.start()
|
||||
tb.show()
|
||||
def quitting():
|
||||
tb.stop()
|
||||
tb.wait()
|
||||
qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
|
||||
qapp.exec_()
|
||||
tb = None #to clean up Qt widgets
|
|
@ -258,37 +258,6 @@ function(GR_LOGGING)
|
|||
|
||||
endfunction(GR_LOGGING)
|
||||
|
||||
########################################################################
|
||||
# Run GRCC to compile .grc files into .py files.
|
||||
#
|
||||
# Usage: GRCC(filename, directory)
|
||||
# - filenames: List of file name of .grc file
|
||||
# - directory: directory of built .py file - usually in
|
||||
# ${CMAKE_CURRENT_BINARY_DIR}
|
||||
# - Sets PYFILES: output converted GRC file names to Python files.
|
||||
########################################################################
|
||||
function(GRCC)
|
||||
# Extract directory from list of args, remove it for the list of filenames.
|
||||
list(GET ARGV -1 directory)
|
||||
list(REMOVE_AT ARGV -1)
|
||||
set(filenames ${ARGV})
|
||||
file(MAKE_DIRECTORY ${directory})
|
||||
|
||||
SET(GRCC_COMMAND ${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc)
|
||||
|
||||
foreach(f ${filenames})
|
||||
execute_process(
|
||||
COMMAND ${GRCC_COMMAND} -d ${directory} "${CMAKE_CURRENT_SOURCE_DIR}/${f}"
|
||||
)
|
||||
string(REPLACE ".grc" ".py" pyfile ${f})
|
||||
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" pyfile "${pyfile}")
|
||||
set(pyfile "${CMAKE_CURRENT_BINARY_DIR}/${pyfile}")
|
||||
list(APPEND pyfiles ${pyfile})
|
||||
endforeach(f)
|
||||
|
||||
set(PYFILES ${pyfiles} PARENT_SCOPE)
|
||||
endfunction(GRCC)
|
||||
|
||||
########################################################################
|
||||
# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER
|
||||
# should be defined
|
||||
|
|
Loading…
Reference in New Issue