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>
30 #include <usrp_inband_usb_packet.h> // will change on gigabit crossover
32 typedef usrp_inband_usb_packet transport_pkt;
35 qa_inband_packet_prims::test_flags()
39 // Test each one of the flags while ensuring no other fields become set in the process
40 pkt.set_header(pkt.FL_START_OF_BURST,0,0,0);
41 CPPUNIT_ASSERT_EQUAL(1, pkt.start_of_burst());
42 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
43 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
44 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
45 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
46 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
47 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
48 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
50 pkt.set_header(pkt.FL_END_OF_BURST,0,0,0);
51 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
52 CPPUNIT_ASSERT_EQUAL(1, pkt.end_of_burst());
53 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
54 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
55 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
56 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
57 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
58 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
60 pkt.set_header(pkt.FL_OVERRUN,0,0,0);
61 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
62 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
63 CPPUNIT_ASSERT_EQUAL(1, pkt.overrun());
64 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
65 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
66 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
67 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
68 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
70 pkt.set_header(pkt.FL_UNDERRUN,0,0,0);
71 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
72 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
73 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
74 CPPUNIT_ASSERT_EQUAL(1, pkt.underrun());
75 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
76 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
77 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
78 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
80 pkt.set_header(pkt.FL_DROPPED,0,0,0);
81 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
82 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
83 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
84 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
85 CPPUNIT_ASSERT_EQUAL(1, pkt.dropped());
86 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
87 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
88 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
90 // test of all fields set
92 pkt.FL_START_OF_BURST |
98 CPPUNIT_ASSERT_EQUAL(1, pkt.start_of_burst());
99 CPPUNIT_ASSERT_EQUAL(1, pkt.end_of_burst());
100 CPPUNIT_ASSERT_EQUAL(1, pkt.overrun());
101 CPPUNIT_ASSERT_EQUAL(1, pkt.underrun());
102 CPPUNIT_ASSERT_EQUAL(1, pkt.dropped());
103 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
104 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
105 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
109 //////////////////////////////////////////////////////////////////////
112 qa_inband_packet_prims::test_fields()
117 // test word0 field exclusiveness
119 // I want to test max values of each field to ensure field boundaries
120 // but these max values could change based on technology? The
121 // max payload is returned by a private method so the code is not
122 // technology dependent
123 pkt.set_header(0,16,0,0);
124 CPPUNIT_ASSERT_EQUAL(16, pkt.chan());
125 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
126 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
128 pkt.set_header(0,0,8,0);
129 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
130 CPPUNIT_ASSERT_EQUAL(8, pkt.tag());
131 CPPUNIT_ASSERT_EQUAL(0,pkt.payload_len());
133 pkt.set_header(0,0,0,pkt.max_payload());
134 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
135 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
136 CPPUNIT_ASSERT_EQUAL(pkt.max_payload(), pkt.payload_len());
138 // test timestamp, shouldn't have to test other fields since
139 // setting the timestamp only has the ability to affect one word
140 pkt.set_timestamp(54);
141 CPPUNIT_ASSERT_EQUAL(uint32_t(54), pkt.timestamp());
143 // test the payload, ensure no other fields overwritten
145 // is there a better test for this?
146 pkt.set_header(0,0,0,0);
147 payload = malloc(pkt.payload_len());
148 memset(payload, 'f', pkt.payload_len());
149 memcpy(pkt.payload(), payload, pkt.payload_len());
150 CPPUNIT_ASSERT_EQUAL(0, memcmp(pkt.payload(), payload, pkt.payload_len()));
151 CPPUNIT_ASSERT_EQUAL(0, pkt.start_of_burst());
152 CPPUNIT_ASSERT_EQUAL(0, pkt.end_of_burst());
153 CPPUNIT_ASSERT_EQUAL(0, pkt.overrun());
154 CPPUNIT_ASSERT_EQUAL(0, pkt.underrun());
155 CPPUNIT_ASSERT_EQUAL(0, pkt.dropped());
156 CPPUNIT_ASSERT_EQUAL(0, pkt.chan());
157 CPPUNIT_ASSERT_EQUAL(0, pkt.tag());
158 CPPUNIT_ASSERT_EQUAL(0, pkt.payload_len());
162 //////////////////////////////////////////////////////////////////////