Query the signal strength of a wifi network

pull/206/head
dannybackx 8 years ago
parent e659c99a9a
commit 0b540af2f7
  1. 1
      cmd/cmd.h
  2. 51
      cmd/handlers.c
  3. 13
      esp-link/cgiwifi.c
  4. 3
      esp-link/cgiwifi.h

@ -64,6 +64,7 @@ typedef enum {
CMD_WIFI_GET_APCOUNT = 50, /* */
CMD_WIFI_GET_APNAME,
CMD_WIFI_SELECT_SSID,
CMD_WIFI_SIGNAL_STRENGTH, // Query RSSI
} CmdName;

@ -35,6 +35,8 @@ static void cmdAddCallback(CmdPacket *cmd);
static void cmdWifiGetApCount(CmdPacket *cmd);
static void cmdWifiGetApName(CmdPacket *cmd);
static void cmdWifiSelectSSID(CmdPacket *cmd);
static void cmdWifiSignalStrength(CmdPacket *cmd);
void cmdMqttGetClientId(CmdPacket *cmd);
@ -57,6 +59,8 @@ const CmdList commands[] = {
{CMD_WIFI_GET_APCOUNT, "WIFI_GET_APCOUNT", cmdWifiGetApCount},
{CMD_WIFI_GET_APNAME, "WIFI_GET_APNAME", cmdWifiGetApName},
{CMD_WIFI_SELECT_SSID, "WIFI_SELECT_SSID", cmdWifiSelectSSID},
{CMD_WIFI_SIGNAL_STRENGTH, "WIFI_SIGNAL_STRENGTH", cmdWifiSignalStrength},
#ifdef MQTT
{CMD_MQTT_SETUP, "MQTT_SETUP", MQTTCMD_Setup},
@ -220,11 +224,6 @@ cmdGetWifiInfo(CmdPacket *cmd) {
cmdResponseEnd();
}
static void ICACHE_FLASH_ATTR
cmdSetWifiInfo(CmdPacket *cmd) {
os_printf("SetWifiInfo()\n");
}
// 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) {
@ -246,8 +245,7 @@ cmdAddCallback(CmdPacket *cmd) {
}
// Query the number of wifi access points
static void ICACHE_FLASH_ATTR
cmdWifiGetApCount(CmdPacket *cmd) {
static void ICACHE_FLASH_ATTR cmdWifiGetApCount(CmdPacket *cmd) {
int n = wifiGetApCount();
os_printf("WifiGetApCount : %d\n", n);
cmdResponseStart(CMD_RESP_V, n, 0);
@ -255,8 +253,7 @@ cmdWifiGetApCount(CmdPacket *cmd) {
}
// Query the name of a wifi access point
static void ICACHE_FLASH_ATTR
cmdWifiGetApName(CmdPacket *cmd) {
static void ICACHE_FLASH_ATTR cmdWifiGetApName(CmdPacket *cmd) {
CmdRequest req;
cmdRequest(&req, cmd);
@ -280,3 +277,39 @@ cmdWifiGetApName(CmdPacket *cmd) {
cmdResponseBody(myssid, strlen(myssid)+1);
cmdResponseEnd();
}
/*
* Select a wireless network.
*/
static void ICACHE_FLASH_ATTR cmdWifiSelectSSID(CmdPacket *cmd) {
}
/*
* Once we're attached to some wireless network, choose not to pick up address from
* DHCP or so but set our own.
*/
static void ICACHE_FLASH_ATTR cmdSetWifiInfo(CmdPacket *cmd) {
os_printf("SetWifiInfo()\n");
}
static void ICACHE_FLASH_ATTR cmdWifiSignalStrength(CmdPacket *cmd) {
CmdRequest req;
cmdRequest(&req, cmd);
int argc = cmdGetArgc(&req);
if (argc != 1) {
os_printf("cmdWifiSignalStrength: argc %d\n", argc);
return;
}
int32_t i;
cmdPopArg(&req, (uint8_t*)&i, 4);
os_printf("cmdWifiSignalStrength: argc %d, ", argc);
os_printf("i %d\n", i);
int rssi = wifiSignalStrength(i);
cmdResponseStart(CMD_RESP_V, rssi, 0);
cmdResponseEnd();
}

@ -152,7 +152,7 @@ void ICACHE_FLASH_ATTR wifiStartMDNS(struct ip_addr ip) {
//WiFi access point data
typedef struct {
char ssid[32];
sint8 rssi;
sint8 rssi; // Received signal strength indication
char enc;
} ApData;
@ -970,3 +970,14 @@ int ICACHE_FLASH_ATTR wifiConnect(char *ssid, char *pass) {
return 0;
}
ICACHE_FLASH_ATTR int wifiSignalStrength(int i) {
sint8 rssi;
if (i < 0)
rssi = wifi_station_get_rssi(); // Current network's signal strength
else if (i >= cgiWifiAps.noAps)
rssi = 0; // FIX ME
else
rssi = cgiWifiAps.apData[i]->rssi; // Signal strength of any known network
return rssi;
}

@ -25,6 +25,7 @@ extern uint8_t wifiState;
extern bool mdns_started;
int wifiGetApCount();
void wifiGetApName(int i, char *ptr);
void wifiGetApName(int, char *);
int wifiSignalStrength(int);
#endif

Loading…
Cancel
Save