FreeCalypso > hg > freecalypso-tools
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uptools/atcmd/resp_parse.c Mon Feb 05 08:47:45 2018 +0000 @@ -0,0 +1,46 @@ +/* + * Parsing of structured responses to AT commands + */ + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include "resp_parse.h" + +parse_structured_response(start, fields, max_fields) + char *start; + struct resp_field *fields; + int max_fields; +{ + char *cp; + int fieldcnt; + + cp = start; + for (fieldcnt = 0; fieldcnt < max_fields; fieldcnt++) { + if (*cp == '\0') + break; + if (isdigit(*cp)) { + fields[fieldcnt].type = RESP_FIELD_NUMBER; + fields[fieldcnt].num = strtoul(cp, 0, 10); + while (isdigit(*cp)) + cp++; + } else if (*cp == '"') { + cp++; + fields[fieldcnt].type = RESP_FIELD_STRING; + fields[fieldcnt].str = cp; + while (*cp && *cp != '"') + cp++; + if (*cp != '"') + return(-1); + *cp++ = '\0'; + } else if (*cp == ',') + fields[fieldcnt].type = RESP_FIELD_EMPTY; + else + return(-1); + if (*cp == ',') + cp++; + else if (*cp) + return(-1); + } + return fieldcnt; +}