Hi, I am planning to modify benchmark_xx to send and receive custom packets (similar to 802.11 packets). I have been rooting around these two files. I would like to know: in benchmark_rx how does the radio "know" when it has received a packet (and call rx_callback). rx_callback is called by pkt.py I believe, demod_pkts. I looked at demod_pkts and I am still unclear how demod_pkts realizes it has a packet on its hands? Thanking you in advance.
on 2009-03-09 23:29
on 2009-03-10 01:03
On Mon, Mar 09, 2009 at 11:29:54PM +0100, William Sherman wrote: > > Thanking you in advance. If you look at demod_pkts in pkt.py you'll see that it connects together the chosen demodulator (passed in), gr.correlate_access_code_bb and a gr_framer_sink_1. gr_correlate_access_code_bb slides the given access code (usually an M-sequence) across the demodulated bits, and produces two bits of output for each input bit: the original bit, and a flag bit: [from gr_correlate_access_code_bb.h] /*! * \param access_code is represented with 1 byte per bit, e.g., "010101010111000100" * \param threshold maximum number of bits that may be wrong */ gr_correlate_access_code_bb_sptr gr_make_correlate_access_code_bb (const std::string &access_code, int threshold); /*! * \brief Examine input for specified access code, one bit at a time. * \ingroup synch * * input: stream of bits, 1 bit per input byte (data in LSB) * output: stream of bits, 2 bits per output byte (data in LSB, flag in next higher bit) * * Each output byte contains two valid bits, the data bit, and the * flag bit. The LSB (bit 0) is the data bit, and is the original * input data, delayed 64 bits. Bit 1 is the * flag bit and is 1 if the corresponding data bit is the first data * bit following the access code. Otherwise the flag bit is 0. */ gr_framer_sync_1 reads the output from gr_correlate_access_code_bb and builds packets which it inserts into a message queue. [from gr_framer_sync_1.h] gr_framer_sink_1_sptr gr_make_framer_sink_1 (gr_msg_queue_sptr target_queue); /*! * \brief Given a stream of bits and access_code flags, assemble packets. * \ingroup sink * * input: stream of bytes from gr_correlate_access_code_bb * output: none. Pushes assembled packet into target queue * * The framer expects a fixed length header of 2 16-bit shorts * containing the payload length, followed by the payload. If the * 2 16-bit shorts are not identical, this packet is ignored. Better * algs are welcome. * * The input data consists of bytes that have two bits used. * Bit 0, the LSB, contains the data bit. * Bit 1 if set, indicates that the corresponding bit is the * the first bit of the packet. That is, this bit is the first * one after the access code. */ class gr_framer_sink_1 : public gr_sync_block Did this help? Eric