From ea4510dfe03f891340985594c4de15134e548853 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 17 Nov 2015 12:54:57 +0000 Subject: recvr --- polycom_recv/msg.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 polycom_recv/msg.c (limited to 'polycom_recv/msg.c') 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); +} -- cgit v1.2.3