diff --git a/cmd/handlers.c b/cmd/handlers.c index 1be8b6e..ac5452c 100644 --- a/cmd/handlers.c +++ b/cmd/handlers.c @@ -19,6 +19,8 @@ #endif #include +#include "config.h" + #ifdef CMD_DBG #define DBG(format, ...) do { os_printf(format, ## __VA_ARGS__); } while(0) #else @@ -93,7 +95,7 @@ CmdCallback callbacks[MAX_CALLBACKS]; // cleared in cmdSync uint32_t ICACHE_FLASH_ATTR cmdAddCb(char* name, uint32_t cb) { for (uint8_t i = 0; i < MAX_CALLBACKS; i++) { - //os_printf("cmdAddCb: index %d name=%s cb=%p\n", i, callbacks[i].name, + //DBG("cmdAddCb: index %d name=%s cb=%p\n", i, callbacks[i].name, // (void *)callbacks[i].callback); // find existing callback or add to the end if (os_strncmp(callbacks[i].name, name, CMD_CBNLEN) == 0 || callbacks[i].name[0] == '\0') { @@ -110,7 +112,7 @@ cmdAddCb(char* name, uint32_t cb) { CmdCallback* ICACHE_FLASH_ATTR cmdGetCbByName(char* name) { for (uint8_t i = 0; i < MAX_CALLBACKS; i++) { - //os_printf("cmdGetCbByName: index %d name=%s cb=%p\n", i, callbacks[i].name, + //DBG("cmdGetCbByName: index %d name=%s cb=%p\n", i, callbacks[i].name, // (void *)callbacks[i].callback); // if callback doesn't exist or it's null if (os_strncmp(callbacks[i].name, name, CMD_CBNLEN) == 0) { @@ -118,7 +120,7 @@ cmdGetCbByName(char* name) { return &callbacks[i]; } } - os_printf("cmdGetCbByName: cb %s not found\n", name); + DBG("cmdGetCbByName: cb %s not found\n", name); return 0; } @@ -249,7 +251,7 @@ cmdAddCallback(CmdPacket *cmd) { // Query the number of wifi access points static void ICACHE_FLASH_ATTR cmdWifiGetApCount(CmdPacket *cmd) { int n = wifiGetApCount(); - os_printf("WifiGetApCount : %d\n", n); + DBG("WifiGetApCount : %d\n", n); cmdResponseStart(CMD_RESP_V, n, 0); cmdResponseEnd(); } @@ -261,7 +263,7 @@ static void ICACHE_FLASH_ATTR cmdWifiGetApName(CmdPacket *cmd) { cmdRequest(&req, cmd); int argc = cmdGetArgc(&req); - os_printf("cmdWifiGetApName: argc %d\n", argc); + DBG("cmdWifiGetApName: argc %d\n", argc); if (argc != 1) return; @@ -273,7 +275,7 @@ static void ICACHE_FLASH_ATTR cmdWifiGetApName(CmdPacket *cmd) { char myssid[33]; wifiGetApName(i, myssid); myssid[32] = '\0'; - os_printf("wifiGetApName(%d) -> {%s}\n", i, myssid); + DBG("wifiGetApName(%d) -> {%s}\n", i, myssid); cmdResponseStart(CMD_RESP_CB, callback, 1); cmdResponseBody(myssid, strlen(myssid)+1); @@ -301,18 +303,18 @@ static void ICACHE_FLASH_ATTR cmdWifiSelectSSID(CmdPacket *cmd) { uint8_t ix; cmdPopArg(&req, &ix, 1); len = cmdArgLen(&req); - pass = (char *)os_malloc(len+2); + pass = (char *)os_malloc(len+1); cmdPopArg(&req, pass, len); pass[len] = 0; - os_printf("SelectSSID(%d,%s)", ix, pass); + DBG("SelectSSID(%d,%s)", ix, pass); char myssid[33]; wifiGetApName(ix, myssid); myssid[32] = '\0'; connectToNetwork(myssid, pass); } else { - ssid = os_malloc(len+2); + ssid = os_malloc(len+1); cmdPopArg(&req, ssid, len); ssid[len] = 0; @@ -321,7 +323,7 @@ static void ICACHE_FLASH_ATTR cmdWifiSelectSSID(CmdPacket *cmd) { cmdPopArg(&req, pass, len); pass[len] = 0; - os_printf("SelectSSID(%s,%s)", ssid, pass); + DBG("SelectSSID(%s,%s)", ssid, pass); connectToNetwork(ssid, pass); } } @@ -331,7 +333,7 @@ static void ICACHE_FLASH_ATTR cmdWifiSelectSSID(CmdPacket *cmd) { * DHCP or so but set our own. */ static void ICACHE_FLASH_ATTR cmdSetWifiInfo(CmdPacket *cmd) { - os_printf("SetWifiInfo()\n"); + DBG("SetWifiInfo()\n"); } static void ICACHE_FLASH_ATTR cmdWifiSignalStrength(CmdPacket *cmd) { @@ -341,18 +343,58 @@ static void ICACHE_FLASH_ATTR cmdWifiSignalStrength(CmdPacket *cmd) { int argc = cmdGetArgc(&req); if (argc != 1) { - os_printf("cmdWifiSignalStrength: argc %d\n", argc); + DBG("cmdWifiSignalStrength: argc %d\n", argc); return; } char x; cmdPopArg(&req, (uint8_t*)&x, 1); int i = x; - os_printf("cmdWifiSignalStrength: argc %d, ", argc); - os_printf("i %d\n", i); + DBG("cmdWifiSignalStrength: argc %d, ", argc); + DBG("i %d\n", i); int rssi = wifiSignalStrength(i); cmdResponseStart(CMD_RESP_V, rssi, 0); cmdResponseEnd(); } + +// +void ICACHE_FLASH_ATTR cmdWifiQuerySSID(CmdPacket *cmd) { + CmdRequest req; + cmdRequest(&req, cmd); + uint32_t callback = req.cmd->value; + + struct station_config conf; + bool res = wifi_station_get_config(&conf); + if (res) { + // #warning handle me + } else { + } + + DBG("QuerySSID : %s\n", conf.ssid); + + cmdResponseStart(CMD_RESP_CB, callback, 1); + cmdResponseBody(conf.ssid, strlen((char *)conf.ssid)+1); + cmdResponseEnd(); +} + +// Command handler for MQTT information +void ICACHE_FLASH_ATTR cmdMqttGetClientId(CmdPacket *cmd) { + CmdRequest req; + + cmdRequest(&req, cmd); + if(cmd->argc != 0 || cmd->value == 0) { + cmdResponseStart(CMD_RESP_V, 0, 0); + cmdResponseEnd(); + return; + } + + uint32_t callback = req.cmd->value; + + cmdResponseStart(CMD_RESP_CB, callback, 1); + cmdResponseBody(flashConfig.mqtt_clientid, strlen(flashConfig.mqtt_clientid)+1); + cmdResponseEnd(); + + os_printf("MqttGetClientId : %s\n", flashConfig.mqtt_clientid); +} diff --git a/esp-link/cgiwifi.c b/esp-link/cgiwifi.c index 246806e..f5ab9af 100644 --- a/esp-link/cgiwifi.c +++ b/esp-link/cgiwifi.c @@ -232,12 +232,10 @@ static void ICACHE_FLASH_ATTR scanStartCb(void *arg) { static int ICACHE_FLASH_ATTR cgiWiFiStartScan(HttpdConnData *connData) { if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. jsonHeader(connData, 200); - if (!cgiWifiAps.scanInProgress) { - cgiWifiAps.scanInProgress = 1; - os_timer_disarm(&scanTimer); - os_timer_setfn(&scanTimer, scanStartCb, NULL); - os_timer_arm(&scanTimer, 200, 0); - } + + // Don't duplicate code, reuse the function below + cmdWifiStartScan(0); + return HTTPD_CGI_DONE; } @@ -257,7 +255,7 @@ static int ICACHE_FLASH_ATTR cgiWiFiGetScan(HttpdConnData *connData) { const int chunk = 1460/64; // ssid is up to 32 chars int len = 0; - os_printf("GET scan: cgiData=%d noAps=%d\n", (int)connData->cgiData, cgiWifiAps.noAps); + DBG("GET scan: cgiData=%d noAps=%d\n", (int)connData->cgiData, cgiWifiAps.noAps); // handle continuation call, connData->cgiData-1 is the position in the scan results where we // we need to continue sending from (using -1 'cause 0 means it's the first call) @@ -444,12 +442,12 @@ static bool ICACHE_FLASH_ATTR parse_ip(char *buff, ip_addr_t *ip_ptr) { static void ICACHE_FLASH_ATTR debugIP() { struct ip_info info; if (wifi_get_ip_info(0, &info)) { - os_printf("\"ip\": \"%d.%d.%d.%d\"\n", IP2STR(&info.ip.addr)); - os_printf("\"netmask\": \"%d.%d.%d.%d\"\n", IP2STR(&info.netmask.addr)); - os_printf("\"gateway\": \"%d.%d.%d.%d\"\n", IP2STR(&info.gw.addr)); - os_printf("\"hostname\": \"%s\"\n", wifi_station_get_hostname()); + DBG("\"ip\": \"%d.%d.%d.%d\"\n", IP2STR(&info.ip.addr)); + DBG("\"netmask\": \"%d.%d.%d.%d\"\n", IP2STR(&info.netmask.addr)); + DBG("\"gateway\": \"%d.%d.%d.%d\"\n", IP2STR(&info.gw.addr)); + DBG("\"hostname\": \"%s\"\n", wifi_station_get_hostname()); } else { - os_printf("\"ip\": \"-none-\"\n"); + DBG("\"ip\": \"-none-\"\n"); } } #endif @@ -581,7 +579,7 @@ int ICACHE_FLASH_ATTR cgiApSettingsChange(HttpdConnData *connData) { if (checkString(buff) && len>7 && len<=64) { // String preprocessing done in client side, wifiap.js line 31 os_memcpy(apconf.password, buff, len); - os_printf("Setting AP password len=%d\n", len); + DBG("Setting AP password len=%d\n", len); } else if (len != 0) { jsonHeader(connData, 400); httpdSend(connData, "PASSWORD not valid or out of range", -1); @@ -597,18 +595,18 @@ int ICACHE_FLASH_ATTR cgiApSettingsChange(HttpdConnData *connData) { apconf.authmode = value; } else { // If out of range set by default - os_printf("Forcing AP authmode to WPA_WPA2_PSK\n"); + DBG("Forcing AP authmode to WPA_WPA2_PSK\n"); apconf.authmode = 4; } } else { // Valid password but wrong auth mode, default 4 - os_printf("Forcing AP authmode to WPA_WPA2_PSK\n"); + DBG("Forcing AP authmode to WPA_WPA2_PSK\n"); apconf.authmode = 4; } } else { apconf.authmode = 0; } - os_printf("Setting AP authmode=%d\n", apconf.authmode); + DBG("Setting AP authmode=%d\n", apconf.authmode); // Set max connection number len=httpdFindArg(connData->getArgs, "ap_maxconn", buff, sizeof(buff)); if(len>0){ @@ -965,13 +963,14 @@ void ICACHE_FLASH_ATTR wifiInit() { os_timer_arm(&resetTimer, RESET_TIMEOUT, 0); } -// Access functions for cgiWifiAps +// Access functions for cgiWifiAps : query the number of entries in the table int ICACHE_FLASH_ATTR wifiGetApCount() { if (cgiWifiAps.scanInProgress) return 0; return cgiWifiAps.noAps; } +// Access functions for cgiWifiAps : returns the name of a network, i is the index into the array, return stored in memory pointed to by ptr. ICACHE_FLASH_ATTR void wifiGetApName(int i, char *ptr) { if (i < 0) return; @@ -981,17 +980,10 @@ ICACHE_FLASH_ATTR void wifiGetApName(int i, char *ptr) { if (ptr != 0) strncpy(ptr, cgiWifiAps.apData[i]->ssid, 32); - os_printf("AP %s\n", cgiWifiAps.apData[i]->ssid); -} - -// This may not belong here : called from cmd/handlers.c -// But it's good to have similar functionality close to each other. -// This performs functions similar to cgiWiFiConnect() -int ICACHE_FLASH_ATTR wifiConnect(char *ssid, char *pass) { -// Danny - return 0; + DBG("AP %s\n", cgiWifiAps.apData[i]->ssid); } +// Access functions for cgiWifiAps : returns the signal strength of network (i is index into array). Return current network strength for negative i. ICACHE_FLASH_ATTR int wifiSignalStrength(int i) { sint8 rssi; @@ -1004,18 +996,3 @@ ICACHE_FLASH_ATTR int wifiSignalStrength(int i) { return rssi; } - -void ICACHE_FLASH_ATTR cmdWifiQuerySSID(CmdPacket *cmd) { - CmdRequest req; - cmdRequest(&req, cmd); - uint32_t callback = req.cmd->value; - - struct station_config conf; - // bool res = wifi_station_get_config(&conf); - - os_printf("QuerySSID : %s\n", conf.ssid); - - cmdResponseStart(CMD_RESP_CB, callback, 1); - cmdResponseBody(conf.ssid, strlen((char *)conf.ssid)+1); - cmdResponseEnd(); -} diff --git a/esp-link/mqtt_client.c b/esp-link/mqtt_client.c index 5f46bf2..2900ed8 100644 --- a/esp-link/mqtt_client.c +++ b/esp-link/mqtt_client.c @@ -115,24 +115,4 @@ void ICACHE_FLASH_ATTR mqtt_client_on_data(MqttDataCallback dataCb) { data_cb = dataCb; } - -// Command handler for MQTT information -void ICACHE_FLASH_ATTR cmdMqttGetClientId(CmdPacket *cmd) { - CmdRequest req; - - cmdRequest(&req, cmd); - if(cmd->argc != 0 || cmd->value == 0) { - cmdResponseStart(CMD_RESP_V, 0, 0); - cmdResponseEnd(); - return; - } - - uint32_t callback = req.cmd->value; - - cmdResponseStart(CMD_RESP_CB, callback, 1); - cmdResponseBody(flashConfig.mqtt_clientid, strlen(flashConfig.mqtt_clientid)+1); - cmdResponseEnd(); - - os_printf("MqttGetClientId : %s\n", flashConfig.mqtt_clientid); -} #endif // MQTT