aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2011-11-25 22:06:01 +0200
committerArik Nemtsov <arik@wizery.com>2012-08-02 13:03:58 +0300
commit334c1663ed53c1f584662c7b58ad2aa23c940097 (patch)
treeaf697338004d5aafe215f8d8c0d8f04b3b194bcb /src
parent7c2a971672e9b5852b39e8cdaaa6788ac238b97b (diff)
downloadexternal_wpa_supplicant_8_ti-334c1663ed53c1f584662c7b58ad2aa23c940097.zip
external_wpa_supplicant_8_ti-334c1663ed53c1f584662c7b58ad2aa23c940097.tar.gz
external_wpa_supplicant_8_ti-334c1663ed53c1f584662c7b58ad2aa23c940097.tar.bz2
Android: wext: Add signal_poll command support (wext)
Change-Id: I0ccd9e39928c3e51f1350d2ab34e47ea3191ed0b Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/drivers/android_drv.h3
-rw-r--r--src/drivers/driver_wext.c35
2 files changed, 35 insertions, 3 deletions
diff --git a/src/drivers/android_drv.h b/src/drivers/android_drv.h
index 5906527..5f6165d 100644
--- a/src/drivers/android_drv.h
+++ b/src/drivers/android_drv.h
@@ -19,6 +19,9 @@
#define MAX_DRV_CMD_SIZE 248
#define DRV_NUMBER_SEQUENTIAL_ERRORS 4
+#define RSSI_CMD "RSSI"
+#define LINKSPEED_CMD "LINKSPEED"
+
#define WEXT_PNOSETUP_HEADER "PNOSETUP "
#define WEXT_PNOSETUP_HEADER_SIZE 9
#define WEXT_PNO_TLV_PREFIX 'S'
diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index 5bf9b7c..1696224 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -2718,7 +2718,7 @@ static int wpa_driver_wext_driver_cmd(void *priv, char *cmd, char *buf,
}
if (os_strcasecmp(cmd, "RSSI-APPROX") == 0) {
- os_strncpy(cmd, "RSSI", MAX_DRV_CMD_SIZE);
+ os_strncpy(cmd, RSSI_CMD, MAX_DRV_CMD_SIZE);
} else if (os_strncasecmp(cmd, "SCAN-CHANNELS", 13) == 0) {
int no_of_chan = atoi(cmd + 13);
os_snprintf(cmd, MAX_DRV_CMD_SIZE, "COUNTRY %s",
@@ -2764,8 +2764,8 @@ static int wpa_driver_wext_driver_cmd(void *priv, char *cmd, char *buf,
} else {
drv->errors = 0;
ret = 0;
- if ((os_strcasecmp(cmd, "RSSI") == 0) ||
- (os_strcasecmp(cmd, "LINKSPEED") == 0) ||
+ if ((os_strcasecmp(cmd, RSSI_CMD) == 0) ||
+ (os_strcasecmp(cmd, LINKSPEED_CMD) == 0) ||
(os_strcasecmp(cmd, "MACADDR") == 0) ||
(os_strcasecmp(cmd, "GETPOWER") == 0) ||
(os_strcasecmp(cmd, "GETBAND") == 0)) {
@@ -2797,6 +2797,34 @@ static int wpa_driver_wext_driver_cmd(void *priv, char *cmd, char *buf,
return ret;
}
+
+static int wpa_driver_signal_poll(void *priv, struct wpa_signal_info *si)
+{
+ char buf[MAX_DRV_CMD_SIZE];
+ struct wpa_driver_wext_data *drv = priv;
+ char *prssi;
+ int res;
+
+ os_memset(si, 0, sizeof(*si));
+ res = wpa_driver_wext_driver_cmd(priv, RSSI_CMD, buf, sizeof(buf));
+ /* Answer: SSID rssi -Val */
+ if (res < 0)
+ return res;
+ prssi = strcasestr(buf, RSSI_CMD);
+ if (!prssi)
+ return -1;
+ si->current_signal = atoi(prssi + strlen(RSSI_CMD) + 1);
+
+ res = wpa_driver_wext_driver_cmd(priv, LINKSPEED_CMD, buf,
+ sizeof(buf));
+ /* Answer: LinkSpeed Val */
+ if (res < 0)
+ return res;
+ si->current_txrate = atoi(buf + strlen(LINKSPEED_CMD) + 1) * 1000;
+
+ return 0;
+}
+
#endif /* ANDROID */
@@ -2821,6 +2849,7 @@ const struct wpa_driver_ops wpa_driver_wext_ops = {
.set_operstate = wpa_driver_wext_set_operstate,
.get_radio_name = wext_get_radio_name,
#ifdef ANDROID
+ .signal_poll = wpa_driver_signal_poll,
.driver_cmd = wpa_driver_wext_driver_cmd,
.sched_scan = wext_sched_scan,
.stop_sched_scan = wext_stop_sched_scan,