comparison miscutil/gsmrec-dump.c @ 46:edd2e20e7090

gsmrec-dump: decode EFR frames
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 25 Nov 2022 03:06:03 +0000
parents baadb1cb744d
children a5ffec18e4cd
comparison
equal deleted inserted replaced
45:4ae1dd43e332 46:edd2e20e7090
5 5
6 #include <stdio.h> 6 #include <stdio.h>
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <stdlib.h> 8 #include <stdlib.h>
9 #include <gsm.h> 9 #include <gsm.h>
10 #include "../libgsmefr/gsm_efr.h"
10 #include "../libtest/binreader.h" 11 #include "../libtest/binreader.h"
11 12
12 main(argc, argv) 13 main(argc, argv)
13 char **argv; 14 char **argv;
14 { 15 {
15 FILE *binf; 16 FILE *binf;
16 gsm dummy_state; 17 gsm dummy_state;
17 unsigned frame_index; 18 unsigned frame_index;
18 uint8_t frame[BINFILE_MAX_FRAME]; 19 uint8_t frame[BINFILE_MAX_FRAME];
19 gsm_signal fr_params[76]; 20 gsm_signal params[76];
20 int rc, i, j, n; 21 int rc, i, j, n;
21 22
22 if (argc != 2) { 23 if (argc != 2) {
23 fprintf(stderr, "usage: %s bin-stream-file\n", argv[0]); 24 fprintf(stderr, "usage: %s bin-stream-file\n", argv[0]);
24 exit(1); 25 exit(1);
45 switch (frame[0] & 0xF0) { 46 switch (frame[0] & 0xF0) {
46 case 0xB0: 47 case 0xB0:
47 printf("BFI TAF=%u\n", frame[1] & 1); 48 printf("BFI TAF=%u\n", frame[1] & 1);
48 break; 49 break;
49 case 0xC0: 50 case 0xC0:
50 puts("EFR (decoding not implemented)"); 51 printf("EFR SID=%d LPC", EFR_sid_classify(frame));
52 EFR_frame2params(frame, params);
53 n = 0;
54 for (i = 0; i < 5; i++)
55 printf(" %u", params[n++]);
56 putchar('\n');
57 for (i = 0; i < 4; i++) {
58 putchar(' ');
59 for (j = 0; j < 13; j++)
60 printf(" %u", params[n++]);
61 putchar('\n');
62 }
51 break; 63 break;
52 case 0xD0: 64 case 0xD0:
53 fputs("FR", stdout); 65 fputs("FR", stdout);
54 gsm_explode(dummy_state, frame, fr_params); 66 gsm_explode(dummy_state, frame, params);
55 n = 0; 67 n = 0;
56 for (i = 0; i < 8; i++) 68 for (i = 0; i < 8; i++)
57 printf(" %u", fr_params[n++]); 69 printf(" %u", params[n++]);
58 putchar('\n'); 70 putchar('\n');
59 for (i = 0; i < 4; i++) { 71 for (i = 0; i < 4; i++) {
60 putchar(' '); 72 putchar(' ');
61 for (j = 0; j < 17; j++) 73 for (j = 0; j < 17; j++)
62 printf(" %u", fr_params[n++]); 74 printf(" %u", params[n++]);
63 putchar('\n'); 75 putchar('\n');
64 } 76 }
65 break; 77 break;
66 } 78 }
67 } 79 }