annotate uptools/atcmd/resp_parse.c @ 542:b95b251b33eb

dspdump: bigdump command implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 28 Oct 2019 20:42:06 +0000
parents 02d6c8469535
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
352
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * Parsing of structured responses to AT commands
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 */
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 #include <ctype.h>
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <stdio.h>
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdlib.h>
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include "resp_parse.h"
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 parse_structured_response(start, fields, max_fields)
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 char *start;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 struct resp_field *fields;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 int max_fields;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 {
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 char *cp;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 int fieldcnt;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 cp = start;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 for (fieldcnt = 0; fieldcnt < max_fields; fieldcnt++) {
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 if (*cp == '\0')
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 break;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 if (isdigit(*cp)) {
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 fields[fieldcnt].type = RESP_FIELD_NUMBER;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 fields[fieldcnt].num = strtoul(cp, 0, 10);
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 while (isdigit(*cp))
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 cp++;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 } else if (*cp == '"') {
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 cp++;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 fields[fieldcnt].type = RESP_FIELD_STRING;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 fields[fieldcnt].str = cp;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 while (*cp && *cp != '"')
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 cp++;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 if (*cp != '"')
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 return(-1);
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 *cp++ = '\0';
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 } else if (*cp == ',')
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 fields[fieldcnt].type = RESP_FIELD_EMPTY;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 else
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 return(-1);
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 if (*cp == ',')
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 cp++;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 else if (*cp)
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 return(-1);
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 }
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 return fieldcnt;
02d6c8469535 fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 }