#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); }