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;
+}