apps/fft: make recording controls visible, but don't record by default

To start recording, verify the filename and press REC button...
This commit is contained in:
Dimitri Stolnikov 2014-03-14 10:51:15 +01:00
parent 567fcbdffa
commit 1e8b45d09e
1 changed files with 58 additions and 64 deletions

View File

@ -75,8 +75,8 @@ class app_top_block(stdgui2.std_top_block, pubsub):
help="Set gain in dB (default is midpoint)") help="Set gain in dB (default is midpoint)")
parser.add_option("-G", "--gains", type="string", default=None, parser.add_option("-G", "--gains", type="string", default=None,
help="Set named gain in dB, name:gain,name:gain,...") help="Set named gain in dB, name:gain,name:gain,...")
parser.add_option("-r", "--record", type="string", default=None, parser.add_option("-r", "--record", type="string", default="/tmp/name-f%F-s%S-t%T.cfile",
help="Record to file, available wildcards: %S: sample rate, %F: center frequency, %T: timestamp, Example: /tmp/name-f%F-s%S-t%T.cfile") help="Filename to record to, available wildcards: %S: sample rate, %F: center frequency, %T: timestamp, Example: /tmp/name-f%F-s%S-t%T.cfile")
parser.add_option("", "--dc-offset-mode", type="int", default=None, parser.add_option("", "--dc-offset-mode", type="int", default=None,
help="Set the RX frontend DC offset correction mode") help="Set the RX frontend DC offset correction mode")
parser.add_option("", "--iq-balance-mode", type="int", default=None, parser.add_option("", "--iq-balance-mode", type="int", default=None,
@ -185,7 +185,7 @@ class app_top_block(stdgui2.std_top_block, pubsub):
self[SAMP_RATE_KEY] = options.samp_rate self[SAMP_RATE_KEY] = options.samp_rate
self[CENTER_FREQ_KEY] = options.center_freq self[CENTER_FREQ_KEY] = options.center_freq
self[FREQ_CORR_KEY] = options.freq_corr self[FREQ_CORR_KEY] = options.freq_corr
self['record'] = self.record = options.record self['record'] = options.record
self.dc_offset_mode = options.dc_offset_mode self.dc_offset_mode = options.dc_offset_mode
self.iq_balance_mode = options.iq_balance_mode self.iq_balance_mode = options.iq_balance_mode
@ -250,16 +250,14 @@ class app_top_block(stdgui2.std_top_block, pubsub):
self.connect(self.src, self.scope) self.connect(self.src, self.scope)
self.file_sink = blocks.file_sink(gr.sizeof_gr_complex, "/dev/null", False)
self.file_sink.set_unbuffered(False)
self.file_sink.close() # close the sink immediately
# lock/connect/unlock at record button event did not work, so we leave it connected at all times
self.connect(self.src, self.file_sink)
self._build_gui(vbox) self._build_gui(vbox)
if self.record != None:
self.recording = self.record_to_filename()
print "Recording samples to ", self.recording
self.file_sink = blocks.file_sink(gr.sizeof_gr_complex, self.recording, False)
self.file_sink.set_unbuffered(False)
self.connect(self.src, self.file_sink)
if self.dc_offset_mode != None: if self.dc_offset_mode != None:
self.set_dc_offset_mode(self.dc_offset_mode) self.set_dc_offset_mode(self.dc_offset_mode)
@ -270,6 +268,13 @@ class app_top_block(stdgui2.std_top_block, pubsub):
if not(self.set_freq(options.center_freq)): if not(self.set_freq(options.center_freq)):
self._set_status_msg("Failed to set initial frequency") self._set_status_msg("Failed to set initial frequency")
def record_to_filename(self):
s = self['record']
s = s.replace('%S', '%e' % self.src.get_sample_rate())
s = s.replace('%F', '%e' % self.src.get_center_freq())
s = s.replace('%T', datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
return s
def wxsink_callback(self, x, y): def wxsink_callback(self, x, y):
self.set_freq_from_callback(x) self.set_freq_from_callback(x)
@ -491,66 +496,55 @@ class app_top_block(stdgui2.std_top_block, pubsub):
# File recording controls # File recording controls
################################################## ##################################################
if self.record != None: rec_vbox = forms.static_box_sizer(parent=self.panel,
label="File recording",
orient=wx.VERTICAL,
bold=True)
rec_vbox.AddSpacer(3)
# First row of sample rate controls
rec_hbox = wx.BoxSizer(wx.HORIZONTAL)
rec_vbox.Add(rec_hbox, 0, wx.EXPAND)
rec_vbox.AddSpacer(5)
rec_vbox = forms.static_box_sizer(parent=self.panel, # Add sample rate controls to top window sizer
label="File recording", vbox.Add(rec_vbox, 0, wx.EXPAND)
orient=wx.VERTICAL, vbox.AddSpacer(5)
bold=True)
rec_vbox.AddSpacer(3)
# First row of sample rate controls
rec_hbox = wx.BoxSizer(wx.HORIZONTAL)
rec_vbox.Add(rec_hbox, 0, wx.EXPAND)
rec_vbox.AddSpacer(5)
# Add sample rate controls to top window sizer rec_hbox.AddSpacer(3)
vbox.Add(rec_vbox, 0, wx.EXPAND) self.record_text = forms.text_box(
vbox.AddSpacer(5) parent=self.panel, sizer=rec_hbox,
label='File Name',
proportion=1,
ps=self,
key='record',
converter=forms.str_converter(),
)
rec_hbox.AddSpacer(5)
rec_hbox.AddSpacer(3) def record_callback(value):
self.record_text = forms.text_box( if value:
parent=self.panel, sizer=rec_hbox, self.sample_rate_text.Disable()
label='File Name', self.record_text.Disable()
proportion=1,
ps=self,
key='record',
converter=forms.str_converter(),
)
rec_hbox.AddSpacer(5)
def record_callback(value): self.rec_file_name = self.record_to_filename()
if value:
self.sample_rate_text.Disable()
self.record_text.Disable()
self.recording = self.record_to_filename() print "Recording samples to ", self.rec_file_name
self.file_sink.open(self.rec_file_name);
else:
self.sample_rate_text.Enable()
self.record_text.Enable()
print "Recording samples to ", self.recording self.file_sink.close()
self.file_sink.open(self.recording); print "Finished recording to", self.rec_file_name
else:
self.sample_rate_text.Enable()
self.record_text.Enable()
self.file_sink.close()
print "Finished recording to", self.recording
forms.toggle_button(
sizer=rec_hbox,
parent=self.panel,
false_label='REC',
true_label='STOP',
value=True,
callback=record_callback,
)
def record_to_filename(self):
s = self['record']
s = s.replace('%S', '%e' % self.src.get_sample_rate())
s = s.replace('%F', '%e' % self.src.get_center_freq())
s = s.replace('%T', datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
return s
forms.toggle_button(
sizer=rec_hbox,
parent=self.panel,
false_label='REC',
true_label='STOP',
value=False,
callback=record_callback,
)
################################################## ##################################################
# DC Offset controls # DC Offset controls