3 * Copyright 2007 Free Software Foundation, Inc.
5 * This file is part of GNU Radio
7 * GNU Radio is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3, or (at your option)
12 * GNU Radio is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 #include <qa_inband_packet_prims.h>
27 #include <cppunit/TestAssert.h>
29 #include <usrp_inband_usb_packet.h> // will change on gigabit crossover
31 typedef usrp_inband_usb_packet transport_pkt;
34 qa_inband_packet_prims::test_flags()
38 // Test each one of the flags while ensuring no other fields become set in the process
39 pkt.set_header(pkt.FL_START_OF_BURST,0,0,0);
40 CPPUNIT_ASSERT_EQUAL(1, pkt.start_of_burst());
41 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
42 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
43 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
44 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
45 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
46 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
47 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
49 pkt.set_header(pkt.FL_END_OF_BURST,0,0,0);
50 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
51 CPPUNIT_ASSERT_EQUAL(1, pkt.end_of_burst());
52 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
53 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
54 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
55 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
56 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
57 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
59 pkt.set_header(pkt.FL_OVERRUN,0,0,0);
60 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
61 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
62 CPPUNIT_ASSERT_EQUAL(1, pkt.overrun());
63 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
64 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
65 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
66 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
67 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
69 pkt.set_header(pkt.FL_UNDERRUN,0,0,0);
70 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
71 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
72 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
73 CPPUNIT_ASSERT_EQUAL(1, pkt.underrun());
74 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
75 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
76 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
77 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
79 pkt.set_header(pkt.FL_DROPPED,0,0,0);
80 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
81 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
82 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
83 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
84 CPPUNIT_ASSERT_EQUAL(1, pkt.dropped());
85 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
86 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
87 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
89 // test of all fields set
91 pkt.FL_START_OF_BURST |
97 CPPUNIT_ASSERT_EQUAL(1, pkt.start_of_burst());
98 CPPUNIT_ASSERT_EQUAL(1, pkt.end_of_burst());
99 CPPUNIT_ASSERT_EQUAL(1, pkt.overrun());
100 CPPUNIT_ASSERT_EQUAL(1, pkt.underrun());
101 CPPUNIT_ASSERT_EQUAL(1, pkt.dropped());
102 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
103 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
104 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
108 //////////////////////////////////////////////////////////////////////
111 qa_inband_packet_prims::test_fields()
116 // test word0 field exclusiveness
118 // I want to test max values of each field to ensure field boundaries
119 // but these max values could change based on technology? The
120 // max payload is returned by a private method so the code is not
121 // technology dependent
122 pkt.set_header(0,16,0,0);
123 CPPUNIT_ASSERT_EQUAL(16, pkt.chan());
124 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
125 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
127 pkt.set_header(0,0,8,0);
128 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
129 CPPUNIT_ASSERT_EQUAL(8, pkt.tag());
130 CPPUNIT_ASSERT_EQUAL(0,pkt.payload_len());
132 pkt.set_header(0,0,0,pkt.max_payload());
133 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
134 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
135 CPPUNIT_ASSERT_EQUAL(pkt.max_payload(), pkt.payload_len());
137 // test timestamp, shouldn't have to test other fields since
138 // setting the timestamp only has the ability to affect one word
139 pkt.set_timestamp(54);
140 CPPUNIT_ASSERT_EQUAL(uint32_t(54), pkt.timestamp());
142 // test the payload, ensure no other fields overwritten
144 // is there a better test for this?
145 pkt.set_header(0,0,0,0);
146 payload = malloc(pkt.payload_len());
147 memset(payload, 'f', pkt.payload_len());
148 memcpy(pkt.payload(), payload, pkt.payload_len());
149 CPPUNIT_ASSERT_EQUAL(0, memcmp(pkt.payload(), payload, pkt.payload_len()));
150 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
151 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
152 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
153 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
154 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
155 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
156 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
157 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
161 //////////////////////////////////////////////////////////////////////