#!/usr/bin/env python # # Transmitter of IEEE 802.15.4 RADIO Packets. # # Modified by: Thomas Schmid, Sanna Leidelof # from gnuradio import gr, eng_notation, packet_utils from gnuradio import uhd from gnuradio import ucla from gnuradio.ucla_blks import ieee802_15_4_pkt from gnuradio.eng_option import eng_option from optparse import OptionParser import math, struct, time import socket, os, stat class transmit_path(gr.top_block): def __init__(self, options): gr.top_block.__init__(self) # parameter settings self.normal_gain = 8000 self._data_rate = options.data_rate self._samp_rate = 200000 self._spb = 2 self.u = uhd.usrp_sink(device_addr=options.address, io_type=uhd.io_type.COMPLEX_FLOAT32, num_channels=1) # set and print sampling rate self.u.set_samp_rate(self._samp_rate) smpl_rate = self.u.get_samp_rate() print "Sampling rate: %d" % (smpl_rate) # set and print center frequency treq = uhd.tune_request(options.center_freq) self.u.set_center_freq(treq) cntr_freq = self.u.get_center_freq() print "Center frequency: %d" % (cntr_freq) # transmitter self.packet_transmitter = ieee802_15_4_pkt.ieee802_15_4_mod_pkts(self, spb=self._spb, msgq_limit=2) self.gain = gr.multiply_const_cc (self.normal_gain) # self.vecsink = gr.vector_sink_c() self.connect(self.packet_transmitter, self.gain, self.u) def send_pkt(self, payload='', eof=False): return self.packet_transmitter.send_pkt(0xe5, struct.pack("HHHH", 192, 168, 10, 2), payload, eof) def main (): # this option part is not actually useful when usrp is absent parser = OptionParser (option_class=eng_option) parser.add_option ("-a", "--address", type="string", default="addr=192.168.10.2", help="Address of UHD device, [default=%default]") parser.add_option ("-c", "--center_freq", type="eng_float", default=2475000000, help="set Tx center frequency to FREQ", metavar="FREQ") parser.add_option ("-r", "--data_rate", type="eng_float", default=2000000) parser.add_option ("-f", "--filename", type="string", default="rx.dat", help="write data to FILENAME") parser.add_option ("-g", "--gain", type="eng_float", default=None, help="set Rx PGA gain in dB [0,20]") parser.add_option ("-N", "--no-gui", action="store_true", default=False) (options, args) = parser.parse_args () tb = transmit_path(options) tb.start() for i in range(100): print "send message %d:"%(i+1,) content = struct.pack('9B', 0x1, 0x80, 0x80, 0xff, 0xff, 0x10, 0x0, 0x20, 0x0) tb.send_pkt(content) time.sleep(0.1) tb.stop() if __name__ == '__main__': # insert this in your test code... #import os #print 'Blocked waiting for GDB attach (pid = %d)' % (os.getpid(),) #raw_input ('Press Enter to continue: ') main ()