FreeCalypso > hg > gsm-codec-lib
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 } |
