Index: vtcross/branches/sriram/transmit_path.py
===================================================================
--- vtcross/branches/sriram/transmit_path.py	(revision 319)
+++ vtcross/branches/sriram/transmit_path.py	(revision 319)
@@ -0,0 +1,217 @@
+#
+# Copyright 2005,2006,2007,2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr, gru, blks2
+from gnuradio import usrp
+from gnuradio import eng_notation
+
+import copy
+import sys
+
+# from current dir
+from pick_bitrate import pick_tx_bitrate
+import usrp_options
+
+# /////////////////////////////////////////////////////////////////////////////
+#                              transmit path
+# /////////////////////////////////////////////////////////////////////////////
+
+class transmit_path(gr.hier_block2): 
+    def __init__(self, modulator_class, options):
+        '''
+        See below for what options should hold
+        '''
+	gr.hier_block2.__init__(self, "transmit_path",
+                                gr.io_signature(0, 0, 0), # Input signature
+                                gr.io_signature(0, 0, 0)) # Output signature
+
+        options = copy.copy(options)    # make a copy so we can destructively modify
+
+        self._verbose            = options.verbose
+        self._tx_freq            = options.tx_freq         # tranmitter's center frequency
+        self._tx_amplitude       = options.tx_amplitude    # digital amplitude sent to USRP
+        self._bitrate            = options.bitrate         # desired bit rate
+        self._interp             = options.interp          # interpolating rate for the USRP (prelim)
+        self._samples_per_symbol = options.samples_per_symbol  # desired samples/baud
+        self._use_whitener_offset = options.use_whitener_offset # increment start of whitener XOR data
+        
+        self._modulator_class = modulator_class         # the modulator_class we are using
+    
+        if self._tx_freq is None:
+            sys.stderr.write("-f FREQ or --freq FREQ or --tx-freq FREQ must be specified\n")
+            raise SystemExit
+
+        # Set up USRP sink; also adjusts interp, samples_per_symbol, and bitrate
+        self._setup_usrp_sink(options)
+
+        if options.show_tx_ampl_range:
+            print "Tx Amplitude Range: minimum = %g, maximum = %g"%tuple(self.u.ampl_range())
+
+        # copy the final answers back into options for use by modulator
+        options.samples_per_symbol = self._samples_per_symbol
+        options.bitrate = self._bitrate
+        options.interp = self._interp
+
+        # Get mod_kwargs
+        mod_kwargs = self._modulator_class.extract_kwargs_from_options(options)
+
+        # Set center frequency of USRP
+        ok = self.set_freq(self._tx_freq)
+        if not ok:
+            print "Failed to set Tx frequency to %s" % (eng_notation.num_to_str(self._tx_freq),)
+            raise ValueError
+    
+        # transmitter
+        self.packet_transmitter = \
+            blks2.mod_pkts(self._modulator_class(**mod_kwargs),
+                           access_code=None,
+                           msgq_limit=4,
+                           pad_for_usrp=True,
+                           use_whitener_offset=options.use_whitener_offset)
+
+
+        # Set the USRP for maximum transmit gain
+        # (Note that on the RFX cards this is a nop.)
+        self.set_gain(self.u.gain_range()[1])
+
+        self.amp = gr.multiply_const_cc(1)
+        self.set_tx_amplitude(self._tx_amplitude)
+
+        # Display some information about the setup
+        if self._verbose:
+            self._print_verbage()
+
+        # Create and setup transmit path flow graph
+        self.connect(self.packet_transmitter, self.amp, self.u)
+
+    def _setup_usrp_sink(self, options):
+        """
+        Creates a USRP sink, determines the settings for best bitrate,
+        and attaches to the transmitter's subdevice.
+        """
+        self.u = usrp_options.create_usrp_sink(options)
+        dac_rate = self.u.dac_rate();
+
+        # derive values of bitrate, samples_per_symbol, and interp from desired info
+        (self._bitrate, self._samples_per_symbol, self._interp) = \
+            pick_tx_bitrate(self._bitrate, self._modulator_class.bits_per_symbol(),
+                            self._samples_per_symbol, self._interp, dac_rate)
+        
+        self.u.set_interp(self._interp)
+	print "printing interpolation ",self._interp,"\n"
+
+    def set_freq(self, target_freq):
+        """
+        Set the center frequency we're interested in.
+
+        @param target_freq: frequency in Hz
+        @rypte: bool
+
+        Tuning is a two step process.  First we ask the front-end to
+        tune as close to the desired frequency as it can.  Then we use
+        the result of that operation and our target_frequency to
+        determine the value for the digital up converter.
+        """
+        return self.u.set_center_freq(target_freq)
+        
+    def set_gain(self, gain):
+        """
+        Sets the analog gain in the USRP
+        """
+        return self.u.set_gain(gain)
+
+    def set_tx_amplitude(self, ampl):
+        """
+        Sets the transmit amplitude sent to the USRP
+        @param ampl the amplitude or None for automatic
+        """
+        ampl_range = self.u.ampl_range()
+        if ampl is None: ampl = (ampl_range[1] - ampl_range[0])*0.15 + ampl_range[0]
+        self._tx_amplitude = max(ampl_range[0], min(ampl, ampl_range[1]))
+        self.amp.set_k(self._tx_amplitude)
+
+    def send_pkt(self, payload='', eof=False):
+        """
+        Calls the transmitter method to send a packet
+        """
+        return self.packet_transmitter.send_pkt(payload, eof)
+        
+    def bitrate(self):
+        return self._bitrate
+
+    def samples_per_symbol(self):
+        return self._samples_per_symbol
+
+    def interp(self):
+        return self._interp
+
+    def add_options(normal, expert):
+        """
+        Adds transmitter-specific options to the Options Parser
+        """
+        add_freq_option(normal)
+        if not normal.has_option('--bitrate'):
+            normal.add_option("-r", "--bitrate", type="eng_float", default=None,
+                              help="specify bitrate.  samples-per-symbol and interp/decim will be derived.")
+        usrp_options.add_tx_options(normal, expert)
+        normal.add_option("--tx-amplitude", type="eng_float", default=None, metavar="AMPL",
+                          help="set transmitter digital amplitude [default=midpoint].  See also --show-tx-ampl-range")
+        normal.add_option("--show-tx-ampl-range", action="store_true", default=False, 
+                          help="print min and max Tx amplitude available")
+        normal.add_option("-v", "--verbose", action="store_true", default=False)
+        expert.add_option("-S", "--samples-per-symbol", type="int", default=None,
+                          help="set samples/symbol [default=%default]")
+        expert.add_option("", "--tx-freq", type="eng_float", default=None,
+                          help="set transmit frequency to FREQ [default=%default]", metavar="FREQ")
+        expert.add_option("", "--log", action="store_true", default=False,
+                          help="Log all parts of flow graph to file (CAUTION: lots of data)")
+        expert.add_option("","--use-whitener-offset", action="store_true", default=False,
+                          help="make sequential packets use different whitening")
+
+    # Make a static method to call before instantiation
+    add_options = staticmethod(add_options)
+
+    def _print_verbage(self):
+        """
+        Prints information about the transmit path
+        """
+        print "Using TX d'board %s"    % (self.u,)
+        print "Tx amplitude     %s"    % (self._tx_amplitude)
+        print "modulation:      %s"    % (self._modulator_class.__name__)
+        print "bitrate:         %sb/s" % (eng_notation.num_to_str(self._bitrate))
+        print "samples/symbol:  %3d"   % (self._samples_per_symbol)
+        print "interp:          %3d"   % (self._interp)
+        print "Tx Frequency:    %s"    % (eng_notation.num_to_str(self._tx_freq))
+        
+
+def add_freq_option(parser):
+    """
+    Hackery that has the -f / --freq option set both tx_freq and rx_freq
+    """
+    def freq_callback(option, opt_str, value, parser):
+        parser.values.rx_freq = value
+        parser.values.tx_freq = value
+
+    if not parser.has_option('--freq'):
+        parser.add_option('-f', '--freq', type="eng_float",
+                          action="callback", callback=freq_callback,
+                          help="set Tx and/or Rx frequency to FREQ [default=%default]",
+                          metavar="FREQ")
Index: vtcross/branches/sriram/receive_path.py
===================================================================
--- vtcross/branches/sriram/receive_path.py	(revision 319)
+++ vtcross/branches/sriram/receive_path.py	(revision 319)
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007,2009 Free Software Foundation, Inc.
+# 
+# This file is part of GNU Radio
+# 
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+# 
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+# 
+
+from gnuradio import gr, gru, blks2
+from gnuradio import usrp
+from gnuradio import eng_notation
+import copy
+import sys
+
+# from current dir
+from pick_bitrate import pick_rx_bitrate
+import usrp_options
+
+# /////////////////////////////////////////////////////////////////////////////
+#                              receive path
+# /////////////////////////////////////////////////////////////////////////////
+
+class receive_path(gr.hier_block2):
+    def __init__(self, demod_class, rx_callback, options):
+
+	gr.hier_block2.__init__(self, "receive_path",
+                                gr.io_signature(0, 0, 0), # Input signature
+                                gr.io_signature(0, 0, 0)) # Output signature
+
+        options = copy.copy(options)    # make a copy so we can destructively modify
+
+        self._verbose            = options.verbose
+        self._rx_freq            = options.rx_freq         # receiver's center frequency
+        self._rx_gain            = options.rx_gain         # receiver's gain
+        self._bitrate            = options.bitrate         # desired bit rate
+        self._decim              = options.decim           # Decimating rate for the USRP (prelim)
+        self._samples_per_symbol = options.samples_per_symbol  # desired samples/symbol
+
+        self._rx_callback   = rx_callback      # this callback is fired when there's a packet available
+        self._demod_class   = demod_class      # the demodulator_class we're using
+
+        if self._rx_freq is None:
+            sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n")
+            raise SystemExit
+
+        # Set up USRP source; also adjusts decim, samples_per_symbol, and bitrate
+        self._setup_usrp_source(options)
+
+        if options.show_rx_gain_range:
+            print "Rx Gain Range: minimum = %g, maximum = %g, step size = %g"%tuple(self.u.gain_range())
+
+        self.set_gain(options.rx_gain)
+
+        # Set RF frequency
+        ok = self.set_freq(self._rx_freq)
+        if not ok:
+            print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(self._rx_freq))
+            raise ValueError, eng_notation.num_to_str(self._rx_freq)
+
+        # copy the final answers back into options for use by demodulator
+        options.samples_per_symbol = self._samples_per_symbol
+        options.bitrate = self._bitrate
+        options.decim = self._decim
+
+        # Get demod_kwargs
+        demod_kwargs = self._demod_class.extract_kwargs_from_options(options)
+
+        # Design filter to get actual channel we want
+        sw_decim = 1
+        chan_coeffs = gr.firdes.low_pass (1.0,                  # gain
+                                          sw_decim * self._samples_per_symbol, # sampling rate
+                                          1.0,                  # midpoint of trans. band
+                                          0.5,                  # width of trans. band
+                                          gr.firdes.WIN_HANN)   # filter type 
+
+        # Decimating channel filter
+        # complex in and out, float taps
+        self.chan_filt = gr.fft_filter_ccc(sw_decim, chan_coeffs)
+        #self.chan_filt = gr.fir_filter_ccf(sw_decim, chan_coeffs)
+
+        # receiver
+        self.packet_receiver = \
+            blks2.demod_pkts(self._demod_class(**demod_kwargs),
+                             access_code=None,
+                             callback=self._rx_callback,
+                             threshold=-1)
+    
+        # Carrier Sensing Blocks
+        alpha = 0.001
+        thresh = 30   # in dB, will have to adjust
+
+        if options.log_rx_power == True:
+            self.probe = gr.probe_avg_mag_sqrd_cf(thresh,alpha)
+            self.power_sink = gr.file_sink(gr.sizeof_float, "rxpower.dat")
+            self.connect(self.chan_filt, self.probe, self.power_sink)
+        else:
+            self.probe = gr.probe_avg_mag_sqrd_c(thresh,alpha)
+            self.connect(self.chan_filt, self.probe)
+
+        # Display some information about the setup
+        if self._verbose:
+            self._print_verbage()
+            
+        self.connect(self.u, self.chan_filt, self.packet_receiver)
+
+    def _setup_usrp_source(self, options):
+
+        self.u = usrp_options.create_usrp_source(options)
+        adc_rate = self.u.adc_rate()
+
+        # derive values of bitrate, samples_per_symbol, and decim from desired info
+        (self._bitrate, self._samples_per_symbol, self._decim) = \
+            pick_rx_bitrate(self._bitrate, self._demod_class.bits_per_symbol(), \
+                            self._samples_per_symbol, self._decim, adc_rate)
+
+        self.u.set_decim(self._decim)
+
+    def set_freq(self, target_freq):
+        """
+        Set the center frequency we're interested in.
+
+        @param target_freq: frequency in Hz
+        @rypte: bool
+
+        Tuning is a two step process.  First we ask the front-end to
+        tune as close to the desired frequency as it can.  Then we use
+        the result of that operation and our target_frequency to
+        determine the value for the digital up converter.
+        """
+        return self.u.set_center_freq(target_freq)
+
+    def set_gain(self, gain):
+        """
+        Sets the analog gain in the USRP
+        """
+        return self.u.set_gain(gain)
+        
+    def bitrate(self):
+        return self._bitrate
+
+    def samples_per_symbol(self):
+        return self._samples_per_symbol
+
+    def decim(self):
+        return self._decim
+
+    def carrier_sensed(self):
+        """
+        Return True if we think carrier is present.
+        """
+        #return self.probe.level() > X
+        return self.probe.unmuted()
+
+    def carrier_threshold(self):
+        """
+        Return current setting in dB.
+        """
+        return self.probe.threshold()
+
+    def set_carrier_threshold(self, threshold_in_db):
+        """
+        Set carrier threshold.
+
+        @param threshold_in_db: set detection threshold
+        @type threshold_in_db:  float (dB)
+        """
+        self.probe.set_threshold(threshold_in_db)
+    
+    @staticmethod
+    def add_options(normal, expert):
+        """
+        Adds receiver-specific options to the Options Parser
+        """
+        add_freq_option(normal)
+        if not normal.has_option("--bitrate"):
+            normal.add_option("-r", "--bitrate", type="eng_float", default=None,
+                              help="specify bitrate.  samples-per-symbol and interp/decim will be derived.")
+        usrp_options.add_rx_options(normal, expert)
+        normal.add_option("-v", "--verbose", action="store_true", default=False)
+        expert.add_option("-S", "--samples-per-symbol", type="int", default=None,
+                          help="set samples/symbol [default=%default]")
+        expert.add_option("", "--rx-freq", type="eng_float", default=None,
+                          help="set Rx frequency to FREQ [default=%default]", metavar="FREQ")
+        expert.add_option("", "--log", action="store_true", default=False,
+                          help="Log all parts of flow graph to files (CAUTION: lots of data)")
+        expert.add_option("", "--log-rx-power", action="store_true", default=False,
+                          help="Log receive signal power to file (CAUTION: lots of data)")
+
+    def _print_verbage(self):
+        """
+        Prints information about the receive path
+        """
+        print "\nReceive Path:"
+        print "USRP %s"    % (self.u,)
+        print "Rx gain:         %g"    % (self.u.gain(),)
+        print "modulation:      %s"    % (self._demod_class.__name__)
+        print "bitrate:         %sb/s" % (eng_notation.num_to_str(self._bitrate))
+        print "samples/symbol:  %3d"   % (self._samples_per_symbol)
+        print "decim:           %3d"   % (self._decim)
+        print "Rx Frequency:    %s"    % (eng_notation.num_to_str(self._rx_freq))
+
+def add_freq_option(parser):
+    """
+    Hackery that has the -f / --freq option set both tx_freq and rx_freq
+    """
+    def freq_callback(option, opt_str, value, parser):
+        parser.values.rx_freq = value
+        parser.values.tx_freq = value
+
+    if not parser.has_option('--freq'):
+        parser.add_option('-f', '--freq', type="eng_float",
+                          action="callback", callback=freq_callback,
+                          help="set Tx and/or Rx frequency to FREQ [default=%default]",
+                          metavar="FREQ")
Index: vtcross/branches/sriram/benchmark_txrxnode1.py
===================================================================
--- vtcross/branches/sriram/benchmark_txrxnode1.py	(revision 319)
+++ vtcross/branches/sriram/benchmark_txrxnode1.py	(revision 319)
@@ -0,0 +1,291 @@
+#!/usr/bin/env python
+#Transmission and reception, one ata a time on the same antena
+
+from gnuradio import gr, gru, modulation_utils
+from gnuradio import eng_notation
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+from numpy import random
+import random, time, struct, sys, math
+
+# from current dir
+from transmit_path import transmit_path
+from receive_path import receive_path
+
+global sync_status
+sync_status = False #default value is "False"...
+global mode
+#Defining modes of operation
+#sync = synchronizing with other node before data transfer
+#traffic = data transfer
+#spec_sense = sensing spectrum for primary user
+mode = "sync" #default mode of operation...
+class my_top_block(gr.top_block):
+
+    def __init__(self, mod_class, demod_class,
+                 rx_callback, options_tx,options_rx):
+
+        gr.top_block.__init__(self)
+        self.rxpath = receive_path(demod_class, rx_callback, options_rx)
+	self.txpath = transmit_path(mod_class, options_tx)
+	self.connect(self.txpath);
+	self.connect(self.rxpath);
+	
+#//////main//////  
+
+global n_rcvd, n_right
+
+def main():
+    global n_rcvd, n_right,sync_status,mode
+    n_rcvd = 0
+    n_right = 0
+    def send_pkt(self, payload='', eof=False):
+        return self.txpath.send_pkt(payload, eof)
+
+    def rx_callback(ok, payload):
+        #print "inside rx callback"
+        global n_rcvd, n_right, sync_status,mode
+        (pktno,) = struct.unpack('!H', payload[0:2])
+        #temp = struct.unpack('!s', payload[3:10])
+	#print "printing the elements of packet",temp,"!!!!!!!!!!!\n"
+        if mode == "sync":
+	#####################################################
+		(sync_signal,) = struct.unpack('!s', payload[2]) 
+        	(sync_signal_red,) = struct.unpack('!s', payload[3])  #redundant sync bit
+        	(data_channel,) = struct.unpack('!s', payload[4])
+        	(data_channel_red,) = struct.unpack('!s', payload[5])  #redundant channel bit
+        	#print "printing the elements of packet  ",sync_signal,"  !!!!!!!!!!!  ",sync_signal_red," !!!!!\n"    
+        	#print "printing the channel  ",data_channel_red,"  !!!!!!!!!!!  ",data_channel_red," !!!!!\n"
+        	if ok: #== True :# and str(sync_signal) == 'o' and str(sync_signal_red) == 'o':
+            		#print "inside if"
+            		if ok: #== True: #str(data_channel) == str(data_channel_red):
+                		#print "inside if1$$$$$"
+                		if str(data_channel) == str(ch):
+                    			#print "inside if2"
+                    			sync_status = True
+		    			tb.stop()
+		    			#print "after tb stop ans sync status is ",sync_status," sync status\n"
+                    			#print "received a sync packet on channel %s\n" %(data_channel)
+                    			#data = 'o'+'o'+str(data_channel)+str(data_channel)
+                    			#print "sending this data",data,"@@@@@\n"
+                    			#pktno=0
+                    			#ack_payload = struct.pack('!H', pktno & 0xffff) + data
+                    			#print "printing the ack packet",ack_payload,"$$$$$\n"
+                    			#k=0
+                    			#while k < 10000:
+                    			#print "inside while"
+                    			#send_pkt(tb,ack_payload) #sending back the acknowledgement
+                    			#k=k+1
+	#####################################################
+	
+        n_rcvd += 1
+        if ok:
+            n_right += 1
+
+        #print "ok = %5s  pktno = %4d  n_rcvd = %4d  n_right = %4d" % (
+            #ok, pktno, n_rcvd, n_right)
+
+    mods = modulation_utils.type_1_mods()
+    demods = modulation_utils.type_1_demods()
+
+    #setting up the tx options parser
+    parser_tx = OptionParser(option_class=eng_option, conflict_handler="resolve")
+    expert_grp_tx = parser_tx.add_option_group("Expert_tx")
+    print "printing Expert_tx group",expert_grp_tx,"printing Expert_tx group"
+    parser_tx.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
+                      default='gmsk',
+                      help="Select modulation from: %s [default=%%default]"
+                            % (', '.join(mods.keys()),))
+
+    parser_tx.add_option("-s", "--size", type="eng_float", default=1500,
+                      help="set packet size [default=%default]")
+    parser_tx.add_option("-M", "--megabytes", type="eng_float", default=1.0,
+                      help="set megabytes to transmit [default=%default]")
+    parser_tx.add_option("","--discontinuous", action="store_true", default=False,
+                      help="enable discontinous transmission (bursts of 5 packets)")
+    parser_tx.add_option("","--from-file", default=None,
+                      help="use file for packet contents")
+    print "printing parser_tx",parser_tx,"printing parser_tx"
+    transmit_path.add_options(parser_tx, expert_grp_tx)
+
+    for mod in mods.values():
+        mod.add_options(expert_grp_tx)
+
+    (options_tx, args_tx) = parser_tx.parse_args ()
+
+    if len(args_tx) != 0:
+        parser_tx.print_help()
+        sys.exit(1)
+
+    if options_tx.tx_freq is None:
+        sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
+        parser_tx.print_help(sys.stderr)
+        sys.exit(1)
+
+    if options_tx.from_file is not None:
+        source_file = open(options_tx.from_file, 'r')
+    print "printing modulation type",mods[options_tx.modulation],"**"
+    # build the graph
+    print "printing tx options",options_tx,"&&&&\n"
+    #tb = my_top_block(mods[options_tx.modulation], options_tx)
+
+    #r = gr.enable_realtime_scheduling()
+    #if r != gr.RT_OK:
+    #   print "Warning: failed to enable realtime scheduling"
+
+    #setting up rx options parser
+    
+    # Create Options Parser:
+    parser_rx = OptionParser (option_class=eng_option, conflict_handler="resolve")
+    print "printing parser_rx",parser_rx,"!!!!!\n"
+    print "after option parser"
+    expert_grp_rx = parser_rx.add_option_group("Expert_rx")
+    print "printing expert group rx",expert_grp_rx,"@@@@\n"
+    parser_rx.add_option("-m", "--modulation", type="choice", choices=demods.keys(), 
+                      default='gmsk',
+                      help="Select modulation from: %s [default=%%default]"
+                            % (', '.join(demods.keys()),))
+    print "inside rx option parser"
+    receive_path.add_options(parser_rx, expert_grp_rx)
+
+    for mod in demods.values():
+        mod.add_options(expert_grp_rx)
+
+    (options_rx, args_rx) = parser_rx.parse_args ()
+
+    if len(args_rx) != 0:
+        parser_rx.print_help(sys.stderr)
+        sys.exit(1)
+
+    if options_rx.rx_freq is None:
+        sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
+        parser_rx.print_help(sys.stderr)
+        sys.exit(1)
+    print "printing rx options",options_rx,"&&&&\n"
+
+# build the graph
+
+    tb = my_top_block(mods[options_tx.modulation],
+                      demods[options_rx.modulation],
+                      rx_callback,options_tx,
+                      options_rx)
+    r = gr.enable_realtime_scheduling()
+    if r != gr.RT_OK:
+        print "Warning: failed to enable realtime scheduling"
+
+    tb.start()
+    # generate and send packets
+    #print "printing megamytes",options_tx.megabytes,"  $$$$\n"
+    
+    #n = 0
+    #pktno = 0
+    #pkt_size = int(options_tx.size)
+    #options_tx.megabytes = 0.000048
+    
+    #options_tx.size = 6 #2 bytes for packet size,2 bytes for the synchronization request(including redundant bit) and 2 bits to specify the channel number(including redundant bit)
+    
+    
+    myfile = file("logfile.txt", 'w')
+    myfile.write("") 
+    #sending sync packet-format 
+    global ch
+    check =True
+    #ch = random.randint(1, 7)#which channel to send information on...this is the second data packet of the synchronization frame
+    #resend = 5; #number of times a batch of sync packets is sent on a channel before trying a different channel
+    running = True
+    #resend_count= 0 #initializing resend count
+    #while running
+    
+    if mode  == "sync":
+    	#nbytes = int(1e6 * .0003)
+	#nbytes = int(1e6 * .0003)
+	nbytes = 6
+    	pkt_size = 6
+    	print "printing packet size",pkt_size,"pkt size\n"
+    	while sync_status != True:
+		ch = random.randint(1, 7)
+		#ch = int(random.choice('17'))
+		#ch = random.randint(6,12)
+		#ch = 1
+	    	hop_freq = float(1e6 * (462.5625+(ch-1)*0.025))#setting the centre freq frequency for sending packets
+		print "hop freq is ",hop_freq
+		#hop_freq = float(1e6 * (462.5625+(5-1)*0.05))#setting the centre freq frequency for sending packets
+	    	tb.txpath.set_freq(hop_freq)
+	    	tb.rxpath.set_freq(hop_freq)
+        	#print "inside while pppp printing sync channel",sync_status,"  done"
+		#if sync_status == "True":
+            	#print "synchronization done..data channel is found"
+	    	#break
+		#else:
+	    	#print "inside else1"
+	    	n = 0
+	    	pktno = 0
+		print >> myfile, "out"
+    	    	while n < nbytes:
+                        print >> myfile, "inside while"
+                	if options_tx.from_file is None:
+                    		#data = (pkt_size - 2) * chr(pktno & 0xff) #0xff is 255
+                    		data = 's'+'s'+str(ch)+str(ch) #adding redundant bits for sync and channel
+	            		#print >> myfile, data
+                    		#print "printing data",data,"****\n"
+                	else:
+            	    		data = source_file.read(pkt_size - 2)
+            	    		if data == '':
+                        		break;
+
+                	payload = struct.pack('!H', pktno & 0xffff) + data
+	       		#print "printing payload",payload,"**\n"
+	
+                	send_pkt(tb,payload)
+			#print "printing payload",payload,"**\n"
+                	n += len(payload)
+                	sys.stderr.write('.')
+                	if options_tx.discontinuous and pktno % 5 == 4:
+                    		time.sleep(1)
+                	pktno += 1
+	    		#print "before sleeping for 10 seconds and value of resend count is",resend_count
+            	time.sleep(0.05)
+		#time.sleep(2)
+            	#resend_count += 1 
+    print "sync channel found! and it is channel ",ch,"\n"
+    send_pkt(tb,eof=True)
+    #myfile.close()
+    tb.wait()
+
+
+if __name__ == '__main__':
+    try:
+        main()
+    except KeyboardInterrupt:
+        pass
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+
+
+
