From bd38e2e00b770ed4e0584e53b00ea4230cac30af Mon Sep 17 00:00:00 2001 From: dannybackx Date: Sun, 30 Oct 2016 09:51:47 +0100 Subject: [PATCH] Code to query the IP address data for our WiFi interface. This allows the microcontroller to query e.g. the IP address of the IoT device and communicate it to trusted parties. --- cmd/cmd.h | 2 ++ cmd/handlers.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/cmd/cmd.h b/cmd/cmd.h index 3b4e8ab..03549cc 100644 --- a/cmd/cmd.h +++ b/cmd/cmd.h @@ -58,6 +58,8 @@ typedef enum { CMD_SOCKET_SETUP = 40, // set-up callbacks CMD_SOCKET_SEND, // send data over UDP socket + CMD_GET_WIFI_INFO = 50,// Query IP address info + } CmdName; typedef void (*cmdfunc_t)(CmdPacket *cmd); diff --git a/cmd/handlers.c b/cmd/handlers.c index c191091..ee43982 100644 --- a/cmd/handlers.c +++ b/cmd/handlers.c @@ -17,6 +17,7 @@ #ifdef SOCKET #include #endif +#include #ifdef CMD_DBG #define DBG(format, ...) do { os_printf(format, ## __VA_ARGS__); } while(0) @@ -29,6 +30,7 @@ static void cmdSync(CmdPacket *cmd); static void cmdWifiStatus(CmdPacket *cmd); static void cmdGetTime(CmdPacket *cmd); static void cmdAddCallback(CmdPacket *cmd); +static void cmdGetWifiInfo(CmdPacket *cmd); // keep track of last status sent to uC so we can notify it when it changes static uint8_t lastWifiStatus = wifiIsDisconnected; @@ -44,6 +46,7 @@ const CmdList commands[] = { {CMD_WIFI_STATUS, "WIFI_STATUS", cmdWifiStatus}, {CMD_CB_ADD, "ADD_CB", cmdAddCallback}, {CMD_GET_TIME, "GET_TIME", cmdGetTime}, + {CMD_GET_WIFI_INFO, "GET_WIFI_INFO", cmdGetWifiInfo}, #ifdef MQTT {CMD_MQTT_SETUP, "MQTT_SETUP", MQTTCMD_Setup}, {CMD_MQTT_PUBLISH, "MQTT_PUB", MQTTCMD_Publish}, @@ -178,6 +181,32 @@ cmdGetTime(CmdPacket *cmd) { return; } +// Command handler for IP information +static void ICACHE_FLASH_ATTR +cmdGetWifiInfo(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; + + struct ip_info info; + wifi_get_ip_info(0, &info); + + cmdResponseStart(CMD_RESP_CB, callback, 3); + cmdResponseBody(&info.ip.addr, sizeof(info.ip.addr)); + cmdResponseBody(&info.netmask.addr, sizeof(info.netmask.addr)); + cmdResponseBody(&info.gw.addr, sizeof(info.gw.addr)); + cmdResponseEnd(); + + return; +} + // Command handler to add a callback to the named-callbacks list, this is for a callback to the uC static void ICACHE_FLASH_ATTR cmdAddCallback(CmdPacket *cmd) {