summaryrefslogtreecommitdiffstats
path: root/polycom_recv/msg.c
diff options
context:
space:
mode:
Diffstat (limited to 'polycom_recv/msg.c')
-rw-r--r--polycom_recv/msg.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/polycom_recv/msg.c b/polycom_recv/msg.c
new file mode 100644
index 0000000..7671fd6
--- /dev/null
+++ b/polycom_recv/msg.c
@@ -0,0 +1,101 @@
+#include "project.h"
+
+static struct espconn udp;
+
+static int a, b, c, d;
+
+
+static void ICACHE_FLASH_ATTR
+parse_field (char *str, int *v)
+{
+ if (!strcmp (str, "0"))
+ *v = 0;
+ if (!strcmp (str, "1"))
+ *v = 1;
+ if (!strcmp (str, "2"))
+ *v = 2;
+}
+
+static void ICACHE_FLASH_ATTR
+parse_comma (char **pdata, size_t * pdata_len, char *obuf, size_t obuf_len)
+{
+ char buf[64];
+ char *data = *pdata;
+ size_t data_len = *pdata_len;
+ size_t buf_len = sizeof (buf) - 1;
+ char *ptr;
+
+ memset (obuf, 0, obuf_len);
+
+ buf[0] = 0;
+
+ for (ptr = buf; (*data != ',') && data_len; ptr++, data++, data_len--)
+ {
+ if (buf_len)
+ {
+ *ptr = *data;
+ *(ptr + 1) = 0;
+ buf_len--;
+ }
+ }
+
+ if (*data == ',')
+ {
+ data++;
+ data_len--;
+ }
+
+ strncpy (obuf, buf, obuf_len - 1);
+
+ *pdata_len = data_len;
+ *pdata = data;
+}
+
+
+
+static void ICACHE_FLASH_ATTR
+msg_recv (void *arg, char *data, unsigned short _data_len)
+{
+ char sa[6], sb[6], sc[6], sd[6], se[6];
+ size_t data_len = data_len;
+
+ if (!data_len)
+ return;
+
+
+ parse_comma (&data, &data_len, sa, sizeof (sa));
+ parse_comma (&data, &data_len, sb, sizeof (sb));
+ parse_comma (&data, &data_len, sc, sizeof (sc));
+ parse_comma (&data, &data_len, sd, sizeof (sd));
+ parse_comma (&data, &data_len, se, sizeof (se));
+
+
+ os_printf("A->%s B->%s C->%s D->%s E->%s\n",sa,sb,sc,sd,se);
+
+
+ if (*sb)
+ parse_field (sa, &a);
+ if (*sc)
+ parse_field (sb, &b);
+ if (*sd)
+ parse_field (sc, &c);
+ if (*se)
+ parse_field (sd, &d);
+
+ os_printf("a->%d b->%d c->%d d->%d\n",a,b,c,d);
+
+ gpio_write (a, b, c, d);
+
+
+}
+
+
+void ICACHE_FLASH_ATTR
+msg_init (void)
+{
+ udp.type = ESPCONN_UDP;
+ udp.proto.udp = (esp_udp *) os_zalloc (sizeof (esp_udp));
+ udp.proto.udp->local_port = 29153;
+ espconn_create (&udp);
+ espconn_regist_recvcb (&udp, msg_recv);
+}