Add 'signal_poll' command interface
authorDmitry Shmidt <dimitrysh@google.com>
Fri, 15 Apr 2011 15:52:01 +0000 (18:52 +0300)
committerJouni Malinen <j@w1.fi>
Fri, 15 Apr 2011 15:52:01 +0000 (18:52 +0300)
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
wpa_supplicant/ctrl_iface.c
wpa_supplicant/wpa_cli.c

index 7382abc..8604d16 100644 (file)
@@ -2870,6 +2870,26 @@ static int wpa_supplicant_ctrl_iface_sta_autoconnect(
 }
 
 
+static int wpa_supplicant_signal_poll(struct wpa_supplicant *wpa_s, char *buf,
+                                     size_t buflen)
+{
+       struct wpa_signal_info si;
+       int ret;
+
+       ret = wpa_drv_signal_poll(wpa_s, &si);
+       if (ret)
+               return -1;
+
+       ret = os_snprintf(buf, buflen, "RSSI=%d\nLINKSPEED=%d\n"
+                         "NOISE=%d\nFREQUENCY=%u\n",
+                         si.current_signal, si.current_txrate / 1000,
+                         si.current_noise, si.frequency);
+       if (ret < 0 || (unsigned int) ret > buflen)
+               return -1;
+       return ret;
+}
+
+
 char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
                                         char *buf, size_t *resp_len)
 {
@@ -3262,6 +3282,9 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
                if (wpa_supplicant_ctrl_iface_tdls_teardown(wpa_s, buf + 14))
                        reply_len = -1;
 #endif /* CONFIG_TDLS */
+       } else if (os_strncmp(buf, "SIGNAL_POLL", 11) == 0) {
+               reply_len = wpa_supplicant_signal_poll(wpa_s, reply,
+                                                      reply_size);
        } else {
                os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
                reply_len = 16;
index f414af7..a1db53a 100644 (file)
@@ -2293,6 +2293,13 @@ static int wpa_cli_cmd_tdls_teardown(struct wpa_ctrl *ctrl, int argc,
 }
 
 
+static int wpa_cli_cmd_signal_poll(struct wpa_ctrl *ctrl, int argc,
+                                  char *argv[])
+{
+       return wpa_ctrl_command(ctrl, "SIGNAL_POLL");
+}
+
+
 enum wpa_cli_cmd_flags {
        cli_cmd_flag_none               = 0x00,
        cli_cmd_flag_sensitive          = 0x01
@@ -2608,6 +2615,9 @@ static struct wpa_cli_cmd wpa_cli_commands[] = {
        { "tdls_teardown", wpa_cli_cmd_tdls_teardown,
          cli_cmd_flag_none,
          "<addr> = tear down TDLS with <addr>" },
+       { "signal_poll", wpa_cli_cmd_signal_poll,
+         cli_cmd_flag_none,
+         "= get signal parameters" },
        { NULL, NULL, cli_cmd_flag_none, NULL }
 };