#!/usr/bin/env python

from gnuradio import analog
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio import uhd
from gnuradio.eng_option import eng_option
from gnuradio.gr import firdes
from gnuradio.wxgui import forms
from grc_gnuradio import wxgui as grc_wxgui
from optparse import OptionParser
import wx
class top_block(grc_wxgui.top_block_gui):
	def __init__(self):
		grc_wxgui.top_block_gui.__init__(self, title="Top Block")
		_icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
		self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))
		##################################################
		# Variables
		##################################################
		self.variable_slider_2 = variable_slider_2 = .1
		self.variable_slider_1 = variable_slider_1 = 32
		self.variable_slider_0_0 = variable_slider_0_0 = 25
		self.variable_slider_0 = variable_slider_0 = 0
		self.test_freq = test_freq = variable_slider_0_0
		self.samp_rate = samp_rate = 21e6
		self.gain = gain = variable_slider_1
		self.delay_length = delay_length = variable_slider_0
		self.amplitude = amplitude = variable_slider_2
		##################################################
		# Blocks
		##################################################
		_variable_slider_0_0_sizer = wx.BoxSizer(wx.VERTICAL)
		self._variable_slider_0_0_text_box = forms.text_box(
			parent=self.GetWin(),
			sizer=_variable_slider_0_0_sizer,
			value=self.variable_slider_0_0,
			callback=self.set_variable_slider_0_0,
			
			label="Radar Chirp Frequency",
			converter=forms.float_converter(),
			proportion=0,
		)
		self._variable_slider_0_0_slider = forms.slider(
			parent=self.GetWin(),
			sizer=_variable_slider_0_0_sizer,
			value=self.variable_slider_0_0,
			callback=self.set_variable_slider_0_0,
			minimum=25,
			maximum=100,
			num_steps=100,
			style=wx.SL_HORIZONTAL,
			cast=float,
			proportion=1,
		)
		self.GridAdd(_variable_slider_0_0_sizer, 11, 10, 1, 9)
		_variable_slider_2_sizer = wx.BoxSizer(wx.VERTICAL)
		self._variable_slider_2_text_box = forms.text_box(
			parent=self.GetWin(),
			sizer=_variable_slider_2_sizer,
			value=self.variable_slider_2,
			callback=self.set_variable_slider_2,
			label="Chirp Amplitude",
			converter=forms.float_converter(),
			proportion=0,
		)
		self._variable_slider_2_slider = forms.slider(
			parent=self.GetWin(),
			sizer=_variable_slider_2_sizer,
			value=self.variable_slider_2,
			callback=self.set_variable_slider_2,
			minimum=0,
			maximum=1,
			num_steps=10,
			style=wx.SL_HORIZONTAL,
			cast=float,
			proportion=1,
		)
		self.Add(_variable_slider_2_sizer)
		_variable_slider_1_sizer = wx.BoxSizer(wx.VERTICAL)
		self._variable_slider_1_text_box = forms.text_box(
			parent=self.GetWin(),
			sizer=_variable_slider_1_sizer,
			
			value=self.variable_slider_1,
			callback=self.set_variable_slider_1,
			label="Output Gain",
			converter=forms.float_converter(),
			proportion=0,
		)
		self._variable_slider_1_slider = forms.slider(
			parent=self.GetWin(),
			sizer=_variable_slider_1_sizer,
			value=self.variable_slider_1,
			callback=self.set_variable_slider_1,
			minimum=0,
			maximum=32,
			num_steps=31,
			style=wx.SL_HORIZONTAL,
			cast=float,
			proportion=1,
		)
		self.GridAdd(_variable_slider_1_sizer, 12, 10, 1, 9)
		_variable_slider_0_sizer = wx.BoxSizer(wx.VERTICAL)
		self._variable_slider_0_text_box = forms.text_box(
			parent=self.GetWin(),
			sizer=_variable_slider_0_sizer,
			value=self.variable_slider_0,
			callback=self.set_variable_slider_0,
			label="Delay Length",
			converter=forms.int_converter(),
			proportion=0,
		)
		self._variable_slider_0_slider = forms.slider(
			parent=self.GetWin(),
			sizer=_variable_slider_0_sizer,
			value=self.variable_slider_0,
			callback=self.set_variable_slider_0,
			minimum=0,
			maximum=710000,
			num_steps=1000,
			style=wx.SL_HORIZONTAL,
			cast=int,
			proportion=1,
		)
		self.GridAdd(_variable_slider_0_sizer, 10, 10, 1, 9)
		self.uhd_usrp_sink_0 = uhd.usrp_sink(
			device_addr="",
			
			stream_args=uhd.stream_args(
				cpu_format="fc32",
				channels=range(1),
		),
		)
		self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
		self.uhd_usrp_sink_0.set_center_freq(2.28e9, 0)
		self.uhd_usrp_sink_0.set_gain(10, 0)
		self.gr_vco_f_0 = gr.vco_f(samp_rate, 6.28e6, 1)
		self.gr_hilbert_fc_0 = gr.hilbert_fc(64)
		self.analog_sig_source_x_0 = analog.sig_source_f(samp_rate,
		analog.GR_SAW_WAVE, variable_slider_0_0, amplitude, 0)
		##################################################
		# Connections
		##################################################
		self.connect((self.analog_sig_source_x_0, 0), (self.gr_vco_f_0, 0))
		self.connect((self.gr_vco_f_0, 0), (self.gr_hilbert_fc_0, 0))
		self.connect((self.gr_hilbert_fc_0, 0), (self.uhd_usrp_sink_0, 0))
	def get_variable_slider_2(self):
		return self.variable_slider_2
	def set_variable_slider_2(self, variable_slider_2):
		self.variable_slider_2 = variable_slider_2
		self._variable_slider_2_slider.set_value(self.variable_slider_2)
		self._variable_slider_2_text_box.set_value(self.variable_slider_2)
		self.set_amplitude(self.variable_slider_2)
	def get_variable_slider_1(self):
		return self.variable_slider_1
	def set_variable_slider_1(self, variable_slider_1):
		self.variable_slider_1 = variable_slider_1
		self.set_gain(self.variable_slider_1)
		self._variable_slider_1_slider.set_value(self.variable_slider_1)
		self._variable_slider_1_text_box.set_value(self.variable_slider_1)
	def get_variable_slider_0_0(self):
		return self.variable_slider_0_0
	def set_variable_slider_0_0(self, variable_slider_0_0):
		self.variable_slider_0_0 = variable_slider_0_0
		
		self.set_test_freq(self.variable_slider_0_0)
		self._variable_slider_0_0_slider.set_value(self.variable_slider_0_0)
		self._variable_slider_0_0_text_box.set_value(self.variable_slider_0_0)
		self.analog_sig_source_x_0.set_frequency(self.variable_slider_0_0)
	def get_variable_slider_0(self):
		return self.variable_slider_0
	def set_variable_slider_0(self, variable_slider_0):
		self.variable_slider_0 = variable_slider_0
		self.set_delay_length(self.variable_slider_0)
		self._variable_slider_0_slider.set_value(self.variable_slider_0)
		self._variable_slider_0_text_box.set_value(self.variable_slider_0)
	def get_test_freq(self):
		return self.test_freq
	def set_test_freq(self, test_freq):
		self.test_freq = test_freq
	def get_samp_rate(self):
		return self.samp_rate
	def set_samp_rate(self, samp_rate):
		self.samp_rate = samp_rate
		self.analog_sig_source_x_0.set_sampling_freq(self.samp_rate)
		self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
	def get_gain(self):
		return self.gain
	def set_gain(self, gain):
		self.gain = gain
	def get_delay_length(self):
		return self.delay_length
	def set_delay_length(self, delay_length):
		self.delay_length = delay_length
	def get_amplitude(self):
		return self.amplitude
	def set_amplitude(self, amplitude):
		
		self.amplitude = amplitude
		self.analog_sig_source_x_0.set_amplitude(self.amplitude)
if __name__ == '__main__':
	
	parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
	(options, args) = parser.parse_args()
	tb = top_block()
	tb.Run(True)
    	
