Hi all,

I'm trying to port the tx code to the usrp2 based on Colby's branch and i'm
having some problems. The program freezes when the 3rd packet is being sent.

The program uses a gr.message_source to buffer the packets and convert them
into a data flow to the modulator, and the problem is that, for some reason,
the data flow isn't flowing and the packets are accumulating in the
msg_source. Since the msg_source's queue size is 2, the method to add the
3rd packet to the queue blocks because the queue is full.

I didn't figured out whats the problem with my code. The bbn80211b_test.py
woks, so  the problem is probably related to the connection of the modulator
block with the usrp2 sink or to the configuration of the usrp2.

I'm sending the files i have modified.

2009/3/31 Colby Boyer <csbo...@berkeley.edu>

> Hi all,
>
> I created a branch on the cgran server for the usrp2 code. If anyone is
> interested in still using the usrp with the hier_block2, just dont use the
> rx/tx.py files. The rest of the files should work with the usrp1.
>
> Cheers,
> Colby
>
>
> On Mon, Mar 30, 2009 at 3:58 PM, George Nychis <gnyc...@cmu.edu> wrote:
>
>> Hi all,
>>
>> CGRAN's trac has a core dumping issue that I still have not figured out
>> how to address yet.  So, if you're using the wiki and get blank pages or a
>> 500 internal server error, sorry.   I've been trying to sort it out, but no
>> luck yet:
>> http://www.gossamer-threads.com/lists/trac/users/40954
>>
>> It should not affect the svn server though.
>>
>> - George
>>
>>
>> 2009/3/30 Colby Boyer <csbo...@berkeley.edu>
>>
>>>  The cgran server seems to be down. I'll let you know when I am able to
>>> get an account.
>>>
>>> On Mon, Mar 30, 2009 at 8:36 AM, Colby Boyer <colby.bo...@gmail.com>wrote:
>>>
>>>> Sure. I will try to get a cgran account and upload my code to their SVN.
>>>> It would then be easy to see the changes I made.
>>>>
>>>>
>>>> On Mon, Mar 30, 2009 at 2:21 AM, Costantini, Andrea 
>>>> <costant...@ftw.at>wrote:
>>>>
>>>>> Hi Colby,
>>>>>
>>>>> I am glad that I am not the only one trying to port the code.
>>>>> I guess you are in a more advanced state. I wasn't even able to run the
>>>>> test.py. ;-)
>>>>>
>>>>> Would you like to share your modified code (even if it is not
>>>>> finished)? so that I try to understand your modifications.
>>>>>
>>>>> Best Regards,
>>>>> Andrea
>>>>>
>>>>> P.S. For the USRP2 api, I usually compare the USRP2 and USRP swig code
>>>>> (e.g. usrp2.py and usrp_swig.py).
>>>>>
>>>>>
>>>>> Colby Boyer wrote:
>>>>>
>>>>>> Hi Andrea,
>>>>>>
>>>>>> I am also working to port the 802.11b code to the USRP2. I have
>>>>>> finished converting the code to hier_block2, and the bbn_80211b_test.py
>>>>>> script works correctly and it can send packets in simulation. I am 
>>>>>> currently
>>>>>> working on modifying the rx, and tx files to connect to the USRP2, but 
>>>>>> been
>>>>>> struggling to make progress. I have not had much luck finding any
>>>>>> documentation for the USRP2 function calls, so I am sorta lost on what to
>>>>>> change in rx, tx and tx transmit path files. Does anyone have any links 
>>>>>> to
>>>>>> the usrp2 api?
>>>>>>
>>>>>> I would be more than happy to share the modifications I made (built
>>>>>> largly upon Douglas's work) with rest of the GNU radio community.
>>>>>>
>>>>>> Regards,
>>>>>> Colby Boyer
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>
>>> _______________________________________________
>>> Discuss-gnuradio mailing list
>>> Discuss-gnuradio@gnu.org
>>> http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>
>>>
>>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
#
# Copyright 2005 Free Software Foundation, Inc.
#
# Copyright (c) 2006 BBN Technologies Corp.  All rights reserved.
# Effort sponsored in part by the Defense Advanced Research Projects
# Agency (DARPA) and the Department of the Interior National Business
# Center under agreement number NBCHC050166.
# 
# 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 2, 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., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
# 

from gnuradio import gr, gru, blks2
from gnuradio import usrp2
from bbn_80211b_pkt import *

# /////////////////////////////////////////////////////////////////////////////
#                              transmit path
# /////////////////////////////////////////////////////////////////////////////

class bbn_80211b_transmit_path(gr.hier_block2):
  def __init__(self, interp, spb, use_barker, interface="", mac_addr=None):

    gr.hier_block2.__init__(self, "bbn_80211b_transmit_path", gr.io_signature(0,0,0), gr.io_signature(0,0,0))

    self.normal_gain = 28000

    self.u = usrp2.sink_32fc(interface, mac_addr)
    dac_rate = self.u.dac_rate();

    self._spb = spb
    self._interp=int(interp)
    self.u.set_interp(self._interp)

    # transmitter
    self.packet_transmitter = bbn_80211b_mod_pkts(spb=spb,
                                                  alpha=0.5,
                                                  gain=self.normal_gain,
                                                  use_barker=use_barker)
    self.connect(self.packet_transmitter, self.u)
    #self.set_gain(self.u.gain_max())  # set max Tx gain

  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.  Finally, we feed
    any residual_freq to the s/w freq translater.
    """
    tr = self.u.set_center_freq(target_freq)
    if tr == None:
    	sys.stderr.write('Failed to set center frequency\n')
    	raise SystemExit, 1
            
    return tr

  def set_gain(self, gain):
    self.gain = gain
    self.u.set_gain(gain)
      
  def send_pkt(self, payload='', eof=False):
    return self.packet_transmitter.send_pkt(payload, eof)
      
  def spb(self):
    return self._spb

  def interp(self):
    return self._interp
#!/usr/bin/env python
#
# Copyright 2005 Free Software Foundation, Inc.
#
# Copyright (c) 2006 BBN Technologies Corp.  All rights reserved.
# Effort sponsored in part by the Defense Advanced Research Projects
# Agency (DARPA) and the Department of the Interior National Business
# Center under agreement number NBCHC050166.
# 
# 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 2, 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., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
# 

from gnuradio import gr, gru, blks2
from gnuradio import usrp2
from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
from optparse import OptionParser

import random
import time
import struct
import sys

# from current dir
from bbn_80211b_transmit_path_port import bbn_80211b_transmit_path

n2s = eng_notation.num_to_str

class my_graph(gr.top_block):

    def __init__(self, interp_rate, spb, use_barker, interface="", mac_addr=None):
        gr.top_block.__init__(self)
        self.txpath = bbn_80211b_transmit_path(interp_rate, spb, use_barker, interface, mac_addr)


# /////////////////////////////////////////////////////////////////////////////
#                                   main
# /////////////////////////////////////////////////////////////////////////////

def main():

    def send_pkt(payload='', eof=False):
        return tb.txpath.send_pkt(payload, eof)

    def rx_callback(ok, payload):
        print "ok = %r, payload = '%s'" % (ok, payload)

    parser = OptionParser (option_class=eng_option)
    parser.add_option("-e", "--interface", type="string", default="eth0",
            help="use specified Ethernet interface [default=%default]")
    parser.add_option("-m", "--mac-addr", type="string", default="",
            help="use USRP2 at specified MAC address [default=None]")
    parser.add_option("-f", "--freq", type="eng_float", default=2.4e9,
                       help= \
                      "set Tx and Rx frequency to FREQ [default=%default]",
                      metavar="FREQ")
    parser.add_option("-S", "--spb", type="int", default=8,
                      help="set samples/baud [default=%default]")
    parser.add_option("-i", "--interp", type="int", default=32,
                      help=
                      "set fpga interpolation rate to INTERP [default=%default]")
    parser.add_option("-r", "--reps", type="int", default=20,
                      help=
                      "Number of packets to send [default=%default]")
    parser.add_option("-b", "--barker", action="store_true",
                      default=False,
                      help="Use Barker Spreading [default=%default]")

    (options, args) = parser.parse_args ()

    if len(args) != 0:
        parser.print_help()
        sys.exit(1)

    if options.freq < 1e6:
        options.freq *= 1e6

    # build the graph
    tb = my_graph(options.interp, options.spb, options.barker, options.interface, options.mac_addr)

    tr = tb.txpath.set_freq(options.freq)
            
    usrp = tb.txpath.u
    
    print "Network interface: ", options.interface
    print "USRP2 address: ", usrp.mac_addr()
    print "Using TX d'board id 0x%04X" % (usrp.daughterboard_id(),)
    print "Tx baseband frequency: ", n2s(tr.baseband_freq)
    print "Tx DUC frequency: ", n2s(tr.dxc_freq)
    print "Tx residual frequency: ", n2s(tr.residual_freq)
    print "Tx interpolation rate: ", usrp.interp()
    print "Samples per data bit: ", tb.txpath.spb()
 
    tb.start()                       # start flow graph

    # generate and send packets
    n = 0

    fp = open('getty.txt')
    lines = fp.readlines()
    payload = ""
    i = 0;
    while i < len(lines):
        payload = payload + lines[i]
        i = i + 1
    
    print ""
    print ""    
    print "DATA:"
    print ""
    print payload
    print ""

    while n < options.reps:
        print "Sending pkt ", n
        send_pkt(payload, False);
        n = n + 1

    time.sleep(1)
    send_pkt(eof=True)
    tb.wait()                       # wait for it to finish

    
if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        raise SystemExit
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to