FreeCalypso > hg > freecalypso-tools
comparison uptools/atcmd/resp_parse.c @ 352:02d6c8469535
fcup-smdump implemented, compiles
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 05 Feb 2018 08:47:45 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
351:f0e9bb28b4d6 | 352:02d6c8469535 |
---|---|
1 /* | |
2 * Parsing of structured responses to AT commands | |
3 */ | |
4 | |
5 #include <ctype.h> | |
6 #include <stdio.h> | |
7 #include <stdlib.h> | |
8 #include "resp_parse.h" | |
9 | |
10 parse_structured_response(start, fields, max_fields) | |
11 char *start; | |
12 struct resp_field *fields; | |
13 int max_fields; | |
14 { | |
15 char *cp; | |
16 int fieldcnt; | |
17 | |
18 cp = start; | |
19 for (fieldcnt = 0; fieldcnt < max_fields; fieldcnt++) { | |
20 if (*cp == '\0') | |
21 break; | |
22 if (isdigit(*cp)) { | |
23 fields[fieldcnt].type = RESP_FIELD_NUMBER; | |
24 fields[fieldcnt].num = strtoul(cp, 0, 10); | |
25 while (isdigit(*cp)) | |
26 cp++; | |
27 } else if (*cp == '"') { | |
28 cp++; | |
29 fields[fieldcnt].type = RESP_FIELD_STRING; | |
30 fields[fieldcnt].str = cp; | |
31 while (*cp && *cp != '"') | |
32 cp++; | |
33 if (*cp != '"') | |
34 return(-1); | |
35 *cp++ = '\0'; | |
36 } else if (*cp == ',') | |
37 fields[fieldcnt].type = RESP_FIELD_EMPTY; | |
38 else | |
39 return(-1); | |
40 if (*cp == ',') | |
41 cp++; | |
42 else if (*cp) | |
43 return(-1); | |
44 } | |
45 return fieldcnt; | |
46 } |