#include #include #include #include "eos.h" #include "event.h" #include "dev/net.h" #include "wifi.h" #define WIFI_SIZE_SSID 33 #define WIFI_SIZE_PWD 64 static eos_evt_handler_t evt_handler[EOS_WIFI_MAX_MTYPE]; static void wifi_handle_msg(unsigned char type, unsigned char *buffer, uint16_t len) { unsigned char mtype; if ((buffer == NULL) || (len < 1)) { eos_net_bad_handler(type, buffer, len); return; } mtype = buffer[0]; if ((mtype < EOS_WIFI_MAX_MTYPE) && evt_handler[mtype]) { evt_handler[mtype](mtype, buffer, len); } else { eos_net_bad_handler(type, buffer, len); } } void eos_wifi_init(void) { int i; for (i=0; i WIFI_SIZE_SSID)) { rv = EOS_ERR_SIZE; goto wifi_status_fin; } buf[len - 1] = '\0'; if (ssid) strcpy(ssid, buf); break; } wifi_status_fin: if (do_release) eos_net_free(buffer, 1); return rv; } int eos_wifi_start(unsigned char *buffer) { int async; async = 0; if (buffer == NULL) { buffer = eos_net_alloc(); async = 1; } buffer[0] = EOS_WIFI_MTYPE_START; return _eos_net_send(EOS_NET_MTYPE_WIFI, buffer, 1, async, 1); } int eos_wifi_stop(unsigned char *buffer) { int async; async = 0; if (buffer == NULL) { buffer = eos_net_alloc(); async = 1; } buffer[0] = EOS_WIFI_MTYPE_STOP; return _eos_net_send(EOS_NET_MTYPE_WIFI, buffer, 1, async, 1); } int eos_wifi_scan(unsigned char *buffer) { int async; async = 0; if (buffer == NULL) { buffer = eos_net_alloc(); async = 1; } buffer[0] = EOS_WIFI_MTYPE_SCAN; return _eos_net_send(EOS_NET_MTYPE_WIFI, buffer, 1, async, 1); } int eos_wifi_connect(const char *ssid, const char *pwd, unsigned char *buffer) { unsigned char *buf; size_t ssid_len, pwd_len; int async; ssid_len = strlen(ssid); pwd_len = strlen(pwd); if (ssid_len > WIFI_SIZE_SSID - 1) return EOS_ERR_SIZE; if (pwd_len > WIFI_SIZE_PWD - 1) return EOS_ERR_SIZE; async = 0; if (buffer == NULL) { buffer = eos_net_alloc(); async = 1; } buf = buffer; buf[0] = EOS_WIFI_MTYPE_CONNECT; buf++; strcpy(buf, ssid); buf += ssid_len + 1; strcpy(buf, pwd); buf += pwd_len + 1; return _eos_net_send(EOS_NET_MTYPE_WIFI, buffer, 1, async, 1); } int eos_wifi_disconnect(unsigned char *buffer) { int async; async = 0; if (buffer == NULL) { buffer = eos_net_alloc(); async = 1; } buffer[0] = EOS_WIFI_MTYPE_DISCONNECT; return _eos_net_send(EOS_NET_MTYPE_WIFI, buffer, 1, async, 1); }