Fixing up GUI windows to better scale with gtgui sinks.
[debian/gnuradio] / usrp / limbo / inband / qa_inband_packet_prims.cc
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2007 Free Software Foundation, Inc.
4  * 
5  * This file is part of GNU Radio
6  * 
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)
10  * any later version.
11  * 
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.
16  * 
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.
20  */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <qa_inband_packet_prims.h>
27 #include <cppunit/TestAssert.h>
28 #include <stdio.h>
29 #include <string.h>
30 #include <usrp_inband_usb_packet.h>             // will change on gigabit crossover
31
32 typedef usrp_inband_usb_packet transport_pkt;
33
34 void
35 qa_inband_packet_prims::test_flags()
36 {
37   transport_pkt pkt;
38
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());
49
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());
59
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());
69
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());
79
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());
89
90   // test of all fields set
91   pkt.set_header(
92     pkt.FL_START_OF_BURST |
93     pkt.FL_END_OF_BURST |
94     pkt.FL_UNDERRUN |
95     pkt.FL_OVERRUN |
96     pkt.FL_DROPPED 
97     ,0,0,0);
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());
106
107
108 }
109 //////////////////////////////////////////////////////////////////////
110
111 void
112 qa_inband_packet_prims::test_fields()
113 {
114   transport_pkt pkt;
115   void * payload;
116   
117   // test word0 field exclusiveness
118   //
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());
127
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());
132
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());
137
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());
142
143   // test the payload, ensure no other fields overwritten
144   //
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());
159   free(payload);
160
161 }
162 //////////////////////////////////////////////////////////////////////