FreeCalypso > hg > gsm-codec-lib
annotate libtest/tw5reader.c @ 607:cdf3f5c618b8
hrutil: new program gsmhr-decode
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Fri, 05 Dec 2025 02:43:19 +0000 |
| parents | 3c6bf0d26ee7 |
| children |
| rev | line source |
|---|---|
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
2 * Here we implement our twts005_read_frame() function. |
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 */ |
|
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
5 #include <ctype.h> |
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <stdio.h> |
|
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdint.h> |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
8 #include <string.h> |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
9 #include <strings.h> |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
10 #include "tw5reader.h" |
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
12 static int decode_hex_digit(char c) |
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 { |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
14 if (isdigit(c)) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
15 return c - '0'; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
16 else if (isupper(c)) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
17 return c - 'A' + 10; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
18 else |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
19 return c - 'a' + 10; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
20 } |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
21 |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
22 int twts005_read_frame(FILE *hexf, unsigned *lineno, uint8_t *frame, |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
23 unsigned *lenp) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
24 { |
|
585
3c6bf0d26ee7
TW-TS-005 reader: fix maximum line length bug
Mychaela Falconia <falcon@freecalypso.org>
parents:
522
diff
changeset
|
25 char linebuf[82]; |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
26 char *cp, *np; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
27 uint8_t *dp; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
28 unsigned len; |
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
30 for (;;) { |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
31 if (!fgets(linebuf, sizeof linebuf, hexf)) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
32 return 0; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
33 (*lineno)++; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
34 if (!index(linebuf, '\n')) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
35 return -2; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
36 for (cp = linebuf; isspace(*cp); cp++) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
37 ; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
38 if (*cp != '\0' && *cp != '#') |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
39 break; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
40 } |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
41 for (np = cp; *cp && !isspace(*cp); cp++) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
42 ; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
43 if (*cp) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
44 *cp++ = '\0'; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
45 while (isspace(*cp)) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
46 cp++; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
47 if (*cp != '\0' && *cp != '#') |
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 return -1; |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
49 if (!strcasecmp(np, "NULL")) { |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
50 *lenp = 0; |
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 return 1; |
|
522
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
52 } |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
53 |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
54 dp = frame; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
55 len = 0; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
56 for (cp = np; *cp; cp += 2) { |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
57 if (!isxdigit(cp[0]) || !isxdigit(cp[1])) |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
58 return -1; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
59 *dp++ = (decode_hex_digit(cp[0]) << 4) | |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
60 decode_hex_digit(cp[1]); |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
61 len++; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
62 } |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
63 *lenp = len; |
|
4d2cccaeb4a7
libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
64 return 1; |
|
10
820d88b97924
libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 } |
