Mercurial > hg > audiostuff
comparison spandsp-0.0.6pre17/tests/t38_non_ecm_buffer_tests.c @ 4:26cd8f1ef0b1
import spandsp-0.0.6pre17
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Fri, 25 Jun 2010 15:50:58 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:c6c5a16ce2f2 | 4:26cd8f1ef0b1 |
---|---|
1 /* | |
2 * SpanDSP - a series of DSP components for telephony | |
3 * | |
4 * t38_non_ecm_buffer_tests.c - Tests for the T.38 non-ECM image data buffer module. | |
5 * | |
6 * Written by Steve Underwood <steveu@coppice.org> | |
7 * | |
8 * Copyright (C) 2008 Steve Underwood | |
9 * | |
10 * All rights reserved. | |
11 * | |
12 * This program is free software; you can redistribute it and/or modify | |
13 * it under the terms of the GNU General Public License version 2, as | |
14 * published by the Free Software Foundation. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
24 * | |
25 * $Id: t38_non_ecm_buffer_tests.c,v 1.5.4.1 2009/12/19 06:43:28 steveu Exp $ | |
26 */ | |
27 | |
28 /*! \file */ | |
29 | |
30 /*! \page t38_non_ecm_buffer_tests_page T.38 non-ECM buffer tests | |
31 \section t38_non_ecm_buffer_tests_page_sec_1 What does it do? | |
32 These tests exercise the flow controlling non-ECM image data buffer | |
33 module, used for T.38 gateways. | |
34 */ | |
35 | |
36 #if defined(HAVE_CONFIG_H) | |
37 #include <config.h> | |
38 #endif | |
39 | |
40 #include <stdlib.h> | |
41 #include <stdio.h> | |
42 #include <fcntl.h> | |
43 #include <string.h> | |
44 #include <assert.h> | |
45 #include <errno.h> | |
46 | |
47 //#if defined(WITH_SPANDSP_INTERNALS) | |
48 #define SPANDSP_EXPOSE_INTERNAL_STRUCTURES | |
49 //#endif | |
50 | |
51 #include "spandsp.h" | |
52 | |
53 /* A pattern of widening gaps between ones, until at 11 apart an | |
54 EOL should be registered */ | |
55 static const uint8_t spreader[] = | |
56 { | |
57 0x55, | |
58 0x55, | |
59 0x55, | |
60 0x55, | |
61 0x55, | |
62 0x55, | |
63 0x55, | |
64 0x55, /* 1 apart */ | |
65 0x22, /* 2 and 3 apart */ | |
66 0x10, /* 4 apart */ | |
67 0x40, /* 5 apart */ | |
68 0x80, /* 6 apart */ | |
69 0x80, /* 7 apart */ | |
70 0x40, /* 8 apart */ | |
71 0x10, /* 9 apart */ | |
72 0x02, /* 10 apart */ | |
73 0x00, | |
74 0x25 /* 11 apart */ | |
75 }; | |
76 | |
77 static int bit_no; | |
78 | |
79 static int xxx(t38_non_ecm_buffer_state_t *s, logging_state_t *l, int log_bits, int n, int expected) | |
80 { | |
81 int i; | |
82 int j; | |
83 int bit; | |
84 | |
85 t38_non_ecm_buffer_inject(s, &spreader[n], 1); | |
86 if (expected >= 0) | |
87 { | |
88 for (i = 0; i < 128; i++) | |
89 { | |
90 bit = t38_non_ecm_buffer_get_bit((void *) s); | |
91 if (log_bits) | |
92 printf("Rx bit %d - %d\n", bit_no, bit); | |
93 if (bit != expected) | |
94 { | |
95 printf("Tests failed - %d %d %d\n", bit_no, bit, expected); | |
96 exit(2); | |
97 } | |
98 bit_no++; | |
99 } | |
100 } | |
101 else | |
102 { | |
103 j = -1; | |
104 for (i = 0; i < 256; i++) | |
105 { | |
106 bit = t38_non_ecm_buffer_get_bit((void *) s); | |
107 if (log_bits) | |
108 printf("Rx bit %d - %d\n", bit_no, bit); | |
109 if (j < 0) | |
110 { | |
111 if (bit == 1) | |
112 j = 18*8 - 5; | |
113 } | |
114 else | |
115 { | |
116 expected = (spreader[j >> 3] >> (7 - (j & 7))) & 1; | |
117 if (bit != expected) | |
118 { | |
119 printf("Tests failed - %d %d %d\n", bit_no, bit, expected); | |
120 exit(2); | |
121 } | |
122 j++; | |
123 if (j >= 18*8) | |
124 j = 0; | |
125 } | |
126 bit_no++; | |
127 if (j == 17*8) | |
128 return 0; | |
129 } | |
130 } | |
131 return 0; | |
132 } | |
133 /*- End of function --------------------------------------------------------*/ | |
134 | |
135 int main(int argc, char *argv[]) | |
136 { | |
137 t38_non_ecm_buffer_state_t buffer; | |
138 logging_state_t logging; | |
139 uint8_t buf[1024]; | |
140 int bit; | |
141 int n; | |
142 int log_bits; | |
143 int i; | |
144 | |
145 log_bits = (argc > 1); | |
146 printf("T.38 non-ECM rate adapting buffer tests.\n"); | |
147 span_log_init(&logging, SPAN_LOG_FLOW, NULL); | |
148 span_log_set_protocol(&logging, "Buffer"); | |
149 | |
150 printf("1 - Impose no minimum for the bits per row\n"); | |
151 t38_non_ecm_buffer_init(&buffer, TRUE, 0); | |
152 n = 0; | |
153 bit_no = 0; | |
154 /* We should get ones until the buffers recognises an EOL */ | |
155 printf(" We should get ones here\n"); | |
156 for (i = 0; i < 17; i++) | |
157 xxx(&buffer, &logging, log_bits, i, 1); | |
158 printf(" We should change to zeros here\n"); | |
159 xxx(&buffer, &logging, log_bits, i, 0); | |
160 for (i = 0; i < 17; i++) | |
161 xxx(&buffer, &logging, log_bits, i, 0); | |
162 printf(" We should get the first row here\n"); | |
163 xxx(&buffer, &logging, log_bits, i, -1); | |
164 for (i = 0; i < 17; i++) | |
165 xxx(&buffer, &logging, log_bits, i, 0); | |
166 printf(" We should get the second row here\n"); | |
167 xxx(&buffer, &logging, log_bits, i, -1); | |
168 for (i = 0; i < 17; i++) | |
169 xxx(&buffer, &logging, log_bits, i, 0); | |
170 printf(" We should get the third row here\n"); | |
171 xxx(&buffer, &logging, log_bits, i, -1); | |
172 printf(" Done\n"); | |
173 t38_non_ecm_buffer_report_input_status(&buffer, &logging); | |
174 t38_non_ecm_buffer_report_output_status(&buffer, &logging); | |
175 | |
176 printf("2 - Impose no minimum for the bits per row, different alignment\n"); | |
177 t38_non_ecm_buffer_init(&buffer, TRUE, 0); | |
178 n = 0; | |
179 memset(buf, 0, sizeof(buf)); | |
180 /* The first one in this should be seen as the first EOL */ | |
181 memset(buf + 10, 0x55, 10); | |
182 /* EOL 2 */ | |
183 buf[25] = 0x20; | |
184 /* EOL 3 */ | |
185 memset(buf + 30, 0x55, 10); | |
186 /* EOL 4 */ | |
187 buf[45] = 0x10; | |
188 t38_non_ecm_buffer_inject(&buffer, buf, 50); | |
189 t38_non_ecm_buffer_push(&buffer); | |
190 for (;;) | |
191 { | |
192 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
193 if (log_bits) | |
194 printf("Rx bit %d - %d\n", n, bit); | |
195 n++; | |
196 if (bit == SIG_STATUS_END_OF_DATA) | |
197 { | |
198 if (n != 337) | |
199 { | |
200 printf("Tests failed\n"); | |
201 exit(2); | |
202 } | |
203 break; | |
204 } | |
205 if (n >= 18 && n <= 96) | |
206 { | |
207 if (bit == (n & 1)) | |
208 { | |
209 printf("Tests failed\n"); | |
210 exit(2); | |
211 } | |
212 } | |
213 else if (n >= 178 && n <= 256) | |
214 { | |
215 if (bit == (n & 1)) | |
216 { | |
217 printf("Tests failed\n"); | |
218 exit(2); | |
219 } | |
220 } | |
221 else if (n == 139 || n == 300) | |
222 { | |
223 if (bit != 1) | |
224 { | |
225 printf("Tests failed\n"); | |
226 exit(2); | |
227 } | |
228 } | |
229 else | |
230 { | |
231 if (bit != 0) | |
232 { | |
233 printf("Tests failed\n"); | |
234 exit(2); | |
235 } | |
236 } | |
237 } | |
238 t38_non_ecm_buffer_report_input_status(&buffer, &logging); | |
239 t38_non_ecm_buffer_report_output_status(&buffer, &logging); | |
240 | |
241 printf("3 - Demand a fairly high minimum for the bits per row\n"); | |
242 t38_non_ecm_buffer_init(&buffer, TRUE, 400); | |
243 n = 0; | |
244 memset(buf, 0, sizeof(buf)); | |
245 /* The first one in this should be seen as the first EOL */ | |
246 memset(buf + 10, 0x55, 10); | |
247 /* EOL 2 */ | |
248 buf[25] = 0x08; | |
249 /* EOL 3 */ | |
250 memset(buf + 30, 0x55, 10); | |
251 /* EOL 4 */ | |
252 buf[45] = 0x04; | |
253 t38_non_ecm_buffer_inject(&buffer, buf, 50); | |
254 t38_non_ecm_buffer_push(&buffer); | |
255 for (;;) | |
256 { | |
257 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
258 if (log_bits) | |
259 printf("Rx bit %d - %d\n", n, bit); | |
260 n++; | |
261 if (bit == SIG_STATUS_END_OF_DATA) | |
262 { | |
263 if (n != 1273) | |
264 { | |
265 printf("Tests failed\n"); | |
266 exit(2); | |
267 } | |
268 break; | |
269 } | |
270 if (n >= 18 && n <= 96) | |
271 { | |
272 if (bit == (n & 1)) | |
273 { | |
274 printf("Tests failed\n"); | |
275 exit(2); | |
276 } | |
277 } | |
278 else if (n >= 834 && n <= 912) | |
279 { | |
280 if (bit == (n & 1)) | |
281 { | |
282 printf("Tests failed\n"); | |
283 exit(2); | |
284 } | |
285 } | |
286 else if (n == 429 || n == 1238) | |
287 { | |
288 if (bit != 1) | |
289 { | |
290 printf("Tests failed\n"); | |
291 exit(2); | |
292 } | |
293 } | |
294 else | |
295 { | |
296 if (bit != 0) | |
297 { | |
298 printf("Tests failed\n"); | |
299 exit(2); | |
300 } | |
301 } | |
302 } | |
303 t38_non_ecm_buffer_report_input_status(&buffer, &logging); | |
304 t38_non_ecm_buffer_report_output_status(&buffer, &logging); | |
305 | |
306 printf("4 - Take some time to get to the first row of the image, output ahead\n"); | |
307 t38_non_ecm_buffer_init(&buffer, TRUE, 400); | |
308 n = 0; | |
309 /* Get some initial bits from an empty buffer. These should be ones */ | |
310 for (i = 0; i < 1000; i++) | |
311 { | |
312 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
313 if (log_bits) | |
314 printf("Rx bit %d - %d\n", n++, bit); | |
315 if (bit != 1) | |
316 { | |
317 printf("Tests failed\n"); | |
318 exit(2); | |
319 } | |
320 } | |
321 printf(" Initial ones OK\n"); | |
322 /* Now put some zeros into the buffer, but no EOL. We should continue | |
323 getting ones out. */ | |
324 memset(buf, 0, sizeof(buf)); | |
325 t38_non_ecm_buffer_inject(&buffer, buf, 20); | |
326 for (i = 0; i < 1000; i++) | |
327 { | |
328 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
329 if (log_bits) | |
330 printf("Rx bit %d - %d\n", n++, bit); | |
331 if (bit != 1) | |
332 { | |
333 printf("Tests failed\n"); | |
334 exit(2); | |
335 } | |
336 } | |
337 printf(" Continuing initial ones OK\n"); | |
338 /* Now add a one, to make an EOL. We should see the zeros come out. */ | |
339 buf[0] = 0x01; | |
340 t38_non_ecm_buffer_inject(&buffer, buf, 1); | |
341 for (i = 0; i < 1000; i++) | |
342 { | |
343 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
344 if (log_bits) | |
345 printf("Rx bit %d - %d\n", n++, bit); | |
346 if (bit != 0) | |
347 { | |
348 printf("Tests failed\n"); | |
349 exit(2); | |
350 } | |
351 } | |
352 printf(" First EOL caused zeros to output OK\n"); | |
353 /* Now add another line. We should see the first line come out. This means just the | |
354 23rd bit from now will be a one. */ | |
355 buf[0] = 0x00; | |
356 buf[4] = 0x01; | |
357 t38_non_ecm_buffer_inject(&buffer, buf, 5); | |
358 for (i = 0; i < 1000; i++) | |
359 { | |
360 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
361 if (log_bits) | |
362 printf("Rx bit %d - %d\n", n++, bit); | |
363 if ((i == 23 && bit == 0) || (i != 23 && bit != 0)) | |
364 { | |
365 printf("Tests failed (%d)\n", i); | |
366 exit(2); | |
367 } | |
368 } | |
369 printf(" Second EOL caused the first row to output OK\n"); | |
370 /* Now inject an RTC - 6 EOLs */ | |
371 memset(buf, 0, sizeof(buf)); | |
372 /* T.4 1D style */ | |
373 for (i = 10; i < 19; i += 3) | |
374 { | |
375 buf[i] = 0x00; | |
376 buf[i + 1] = 0x10; | |
377 buf[i + 2] = 0x01; | |
378 } | |
379 /* T.4 2D style */ | |
380 buf[25 + 0] = 0x00; | |
381 buf[25 + 1] = 0x18; | |
382 buf[25 + 2] = 0x00; | |
383 buf[25 + 3] = 0xC0; | |
384 buf[25 + 4] = 0x06; | |
385 buf[25 + 5] = 0x00; | |
386 buf[25 + 6] = 0x30; | |
387 buf[25 + 7] = 0x01; | |
388 buf[25 + 8] = 0x80; | |
389 buf[25 + 9] = 0x0C; | |
390 t38_non_ecm_buffer_inject(&buffer, buf, 50); | |
391 t38_non_ecm_buffer_push(&buffer); | |
392 for (i = 0; i < 1000; i++) | |
393 { | |
394 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
395 if (log_bits) | |
396 printf("Rx bit %d - %d\n", n++, bit); | |
397 if (i == 7 | |
398 || | |
399 i == 400 + 11 + 0*12 | |
400 || | |
401 i == 400 + 11 + 1*12 | |
402 || | |
403 i == 400 + 11 + 2*12 | |
404 || | |
405 i == 400 + 11 + 3*12 | |
406 || | |
407 i == 400 + 11 + 4*12 | |
408 || | |
409 i == 400 + 11 + 5*12 | |
410 || | |
411 i == 400 + 11 + 60 + 400 + 4 + 0*13 | |
412 || | |
413 i == 400 + 11 + 60 + 400 + 4 + 0*13 + 1 | |
414 || | |
415 i == 400 + 11 + 60 + 400 + 4 + 1*13 | |
416 || | |
417 i == 400 + 11 + 60 + 400 + 4 + 1*13 + 1 | |
418 || | |
419 i == 400 + 11 + 60 + 400 + 4 + 2*13 | |
420 || | |
421 i == 400 + 11 + 60 + 400 + 4 + 2*13 + 1 | |
422 || | |
423 i == 400 + 11 + 60 + 400 + 4 + 3*13 | |
424 || | |
425 i == 400 + 11 + 60 + 400 + 4 + 3*13 + 1 | |
426 || | |
427 i == 400 + 11 + 60 + 400 + 4 + 4*13 | |
428 || | |
429 i == 400 + 11 + 60 + 400 + 4 + 4*13 + 1 | |
430 || | |
431 i == 400 + 11 + 60 + 400 + 4 + 5*13 | |
432 || | |
433 i == 400 + 11 + 60 + 400 + 4 + 5*13 + 1) | |
434 { | |
435 if (bit == 0) | |
436 { | |
437 printf("Tests failed (%d)\n", i); | |
438 exit(2); | |
439 } | |
440 } | |
441 else | |
442 { | |
443 if (bit == 1) | |
444 { | |
445 printf("Tests failed (%d)\n", i); | |
446 exit(2); | |
447 } | |
448 } | |
449 } | |
450 printf(" RTC output OK\n"); | |
451 t38_non_ecm_buffer_report_input_status(&buffer, &logging); | |
452 t38_non_ecm_buffer_report_output_status(&buffer, &logging); | |
453 | |
454 printf("5 - Take some time to get to the first row of the image, output behind\n"); | |
455 t38_non_ecm_buffer_init(&buffer, TRUE, 400); | |
456 n = 0; | |
457 /* Inject some ones. */ | |
458 memset(buf, 0xFF, 100); | |
459 t38_non_ecm_buffer_inject(&buffer, buf, 100); | |
460 /* Inject some zeros */ | |
461 memset(buf, 0, sizeof(buf)); | |
462 t38_non_ecm_buffer_inject(&buffer, buf, 100); | |
463 for (i = 0; i < 1000; i++) | |
464 { | |
465 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
466 if (log_bits) | |
467 printf("Rx bit %d - %d\n", n++, bit); | |
468 if (bit != 1) | |
469 { | |
470 printf("Tests failed\n"); | |
471 exit(2); | |
472 } | |
473 } | |
474 printf(" Initial ones OK\n"); | |
475 /* Now add a one, to make an EOL. We should see the zeros come out. */ | |
476 buf[0] = 0x01; | |
477 t38_non_ecm_buffer_inject(&buffer, buf, 1); | |
478 for (i = 0; i < 1000; i++) | |
479 { | |
480 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
481 if (log_bits) | |
482 printf("Rx bit %d - %d\n", n++, bit); | |
483 if (bit != 0) | |
484 { | |
485 printf("Tests failed\n"); | |
486 exit(2); | |
487 } | |
488 } | |
489 printf(" First EOL caused zeros to output OK\n"); | |
490 /* Now add another line. We should see the first line come out. This means just the | |
491 23rd bit from now will be a one. */ | |
492 buf[0] = 0x00; | |
493 buf[4] = 0x01; | |
494 t38_non_ecm_buffer_inject(&buffer, buf, 5); | |
495 for (i = 0; i < 1000; i++) | |
496 { | |
497 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
498 if (log_bits) | |
499 printf("Rx bit %d - %d\n", n++, bit); | |
500 if ((i == 23 && bit == 0) || (i != 23 && bit != 0)) | |
501 { | |
502 printf("Tests failed (%d)\n", i); | |
503 exit(2); | |
504 } | |
505 } | |
506 printf(" Second EOL caused the first row to output OK\n"); | |
507 /* Now inject an RTC - 6 EOLs */ | |
508 memset(buf, 0, sizeof(buf)); | |
509 /* T.4 1D style */ | |
510 for (i = 10; i < 19; i += 3) | |
511 { | |
512 buf[i] = 0x00; | |
513 buf[i + 1] = 0x10; | |
514 buf[i + 2] = 0x01; | |
515 } | |
516 /* T.4 2D style */ | |
517 buf[25 + 0] = 0x00; | |
518 buf[25 + 1] = 0x18; | |
519 buf[25 + 2] = 0x00; | |
520 buf[25 + 3] = 0xC0; | |
521 buf[25 + 4] = 0x06; | |
522 buf[25 + 5] = 0x00; | |
523 buf[25 + 6] = 0x30; | |
524 buf[25 + 7] = 0x01; | |
525 buf[25 + 8] = 0x80; | |
526 buf[25 + 9] = 0x0C; | |
527 t38_non_ecm_buffer_inject(&buffer, buf, 50); | |
528 t38_non_ecm_buffer_push(&buffer); | |
529 for (i = 0; i < 1000; i++) | |
530 { | |
531 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
532 if (log_bits) | |
533 printf("Rx bit %d - %d\n", n++, bit); | |
534 if (i == 7 | |
535 || | |
536 i == 400 + 11 + 0*12 | |
537 || | |
538 i == 400 + 11 + 1*12 | |
539 || | |
540 i == 400 + 11 + 2*12 | |
541 || | |
542 i == 400 + 11 + 3*12 | |
543 || | |
544 i == 400 + 11 + 4*12 | |
545 || | |
546 i == 400 + 11 + 5*12 | |
547 || | |
548 i == 400 + 11 + 60 + 400 + 4 + 0*13 | |
549 || | |
550 i == 400 + 11 + 60 + 400 + 4 + 0*13 + 1 | |
551 || | |
552 i == 400 + 11 + 60 + 400 + 4 + 1*13 | |
553 || | |
554 i == 400 + 11 + 60 + 400 + 4 + 1*13 + 1 | |
555 || | |
556 i == 400 + 11 + 60 + 400 + 4 + 2*13 | |
557 || | |
558 i == 400 + 11 + 60 + 400 + 4 + 2*13 + 1 | |
559 || | |
560 i == 400 + 11 + 60 + 400 + 4 + 3*13 | |
561 || | |
562 i == 400 + 11 + 60 + 400 + 4 + 3*13 + 1 | |
563 || | |
564 i == 400 + 11 + 60 + 400 + 4 + 4*13 | |
565 || | |
566 i == 400 + 11 + 60 + 400 + 4 + 4*13 + 1 | |
567 || | |
568 i == 400 + 11 + 60 + 400 + 4 + 5*13 | |
569 || | |
570 i == 400 + 11 + 60 + 400 + 4 + 5*13 + 1) | |
571 { | |
572 if (bit == 0) | |
573 { | |
574 printf("Tests failed (%d)\n", i); | |
575 exit(2); | |
576 } | |
577 } | |
578 else | |
579 { | |
580 if (bit == 1) | |
581 { | |
582 printf("Tests failed (%d)\n", i); | |
583 exit(2); | |
584 } | |
585 } | |
586 } | |
587 printf(" RTC output OK\n"); | |
588 t38_non_ecm_buffer_report_input_status(&buffer, &logging); | |
589 t38_non_ecm_buffer_report_output_status(&buffer, &logging); | |
590 | |
591 printf("6 - TCF without leading ones\n"); | |
592 t38_non_ecm_buffer_init(&buffer, FALSE, 400); | |
593 n = 0; | |
594 /* Get some initial bits from an empty buffer. These should be ones */ | |
595 for (i = 0; i < 1000; i++) | |
596 { | |
597 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
598 if (log_bits) | |
599 printf("Rx bit %d - %d\n", n++, bit); | |
600 if (bit != 1) | |
601 { | |
602 printf("Tests failed\n"); | |
603 exit(2); | |
604 } | |
605 } | |
606 printf(" Initial ones from an empty TCF buffer OK\n"); | |
607 /* Now send some TCF through, and see that it comes out */ | |
608 memset(buf, 0x00, sizeof(buf)); | |
609 t38_non_ecm_buffer_inject(&buffer, buf, 500); | |
610 t38_non_ecm_buffer_push(&buffer); | |
611 for (i = 0; i < 500*8; i++) | |
612 { | |
613 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
614 if (log_bits) | |
615 printf("Rx bit %d - %d\n", n++, bit); | |
616 if (bit != 0) | |
617 { | |
618 printf("Tests failed\n"); | |
619 exit(2); | |
620 } | |
621 } | |
622 printf(" Passthrough of TCF OK\n"); | |
623 /* Check the right number of bits was buffered */ | |
624 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
625 if (log_bits) | |
626 printf("Rx bit %d - %d\n", n++, bit); | |
627 if (bit != SIG_STATUS_END_OF_DATA) | |
628 { | |
629 printf("Tests failed\n"); | |
630 exit(2); | |
631 } | |
632 printf(" End of data seen OK\n"); | |
633 t38_non_ecm_buffer_report_input_status(&buffer, &logging); | |
634 t38_non_ecm_buffer_report_output_status(&buffer, &logging); | |
635 | |
636 printf("7 - TCF with leading ones\n"); | |
637 t38_non_ecm_buffer_init(&buffer, FALSE, 400); | |
638 n = 0; | |
639 /* Get some initial bits from an empty buffer. These should be ones */ | |
640 for (i = 0; i < 1000; i++) | |
641 { | |
642 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
643 if (log_bits) | |
644 printf("Rx bit %d - %d\n", n++, bit); | |
645 if (bit != 1) | |
646 { | |
647 printf("Tests failed\n"); | |
648 exit(2); | |
649 } | |
650 } | |
651 printf(" Initial ones from an empty TCF buffer OK\n"); | |
652 | |
653 /* Now send some initial ones, and see that we continue to get all ones | |
654 as the stuffing. */ | |
655 memset(buf, 0xFF, 500); | |
656 t38_non_ecm_buffer_inject(&buffer, buf, 500); | |
657 for (i = 0; i < 500*8; i++) | |
658 { | |
659 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
660 if (log_bits) | |
661 printf("Rx bit %d - %d\n", n++, bit); | |
662 if (bit != 1) | |
663 { | |
664 printf("Tests failed\n"); | |
665 exit(2); | |
666 } | |
667 } | |
668 printf(" Sustaining ones OK\n"); | |
669 | |
670 /* Now send some initial ones, and some TCF through, and see that only | |
671 the TCF comes out */ | |
672 memset(buf, 0x00, sizeof(buf)); | |
673 memset(buf, 0xFF, 100); | |
674 /* End the ones mid byte */ | |
675 buf[100] = 0xF0; | |
676 t38_non_ecm_buffer_inject(&buffer, buf, 500); | |
677 t38_non_ecm_buffer_push(&buffer); | |
678 for (i = 0; i < 400*8; i++) | |
679 { | |
680 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
681 if (log_bits) | |
682 printf("Rx bit %d - %d\n", n++, bit); | |
683 if ((i < 4 && bit == 0) || (i >= 4 && bit != 0)) | |
684 { | |
685 printf("Tests failed\n"); | |
686 exit(2); | |
687 } | |
688 } | |
689 printf(" Passthrough of TCF OK\n"); | |
690 /* Check the right number of bits was buffered */ | |
691 bit = t38_non_ecm_buffer_get_bit((void *) &buffer); | |
692 if (log_bits) | |
693 printf("Rx bit %d - %d\n", n++, bit); | |
694 if (bit != SIG_STATUS_END_OF_DATA) | |
695 { | |
696 printf("Tests failed\n"); | |
697 exit(2); | |
698 } | |
699 printf(" End of data seen OK\n"); | |
700 t38_non_ecm_buffer_report_input_status(&buffer, &logging); | |
701 t38_non_ecm_buffer_report_output_status(&buffer, &logging); | |
702 | |
703 printf("Tests passed\n"); | |
704 return 0; | |
705 } | |
706 /*- End of function --------------------------------------------------------*/ | |
707 /*- End of file ------------------------------------------------------------*/ |