diff options
author | Dmitry Shmidt <dimitrysh@google.com> | 2011-09-28 09:51:34 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-09-28 09:51:34 -0700 |
commit | 19d2c55e9022469221d9dad7fb8d82dcf84a5893 (patch) | |
tree | 779c55b5ddffa51a1783873725c72f3a6d4c3e6a | |
parent | 7119f025f7c249abb40f2e409e54f6241dfe42b6 (diff) | |
parent | d7edab78ddecd5492c22006c1b1e23c6c6b2a479 (diff) | |
download | hardware_broadcom_wlan-19d2c55e9022469221d9dad7fb8d82dcf84a5893.zip hardware_broadcom_wlan-19d2c55e9022469221d9dad7fb8d82dcf84a5893.tar.gz hardware_broadcom_wlan-19d2c55e9022469221d9dad7fb8d82dcf84a5893.tar.bz2 |
am d7edab78: bcm4329: bcmdhd: Add signal_poll command support
* commit 'd7edab78ddecd5492c22006c1b1e23c6c6b2a479':
bcm4329: bcmdhd: Add signal_poll command support
-rw-r--r-- | bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c | 39 | ||||
-rw-r--r-- | bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h | 4 | ||||
-rw-r--r-- | bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c | 32 |
3 files changed, 67 insertions, 8 deletions
diff --git a/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c b/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c index 9a691a3..8aa45d6 100644 --- a/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c +++ b/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c @@ -115,7 +115,10 @@ int wpa_driver_wext_combo_scan(void *priv, struct wpa_driver_scan_params *params iwr.u.data.length = bp; if ((ret = ioctl(drv->ioctl_sock, SIOCSIWPRIV, &iwr)) < 0) { - wpa_printf(MSG_ERROR, "ioctl[SIOCSIWPRIV] (cscan): %d", ret); + if (!drv->bgscan_enabled) + wpa_printf(MSG_ERROR, "ioctl[SIOCSIWPRIV] (cscan): %d", ret); + else + ret = 0; /* Hide error in case of bg scan */ } return ret; } @@ -217,7 +220,7 @@ static int wpa_driver_set_backgroundscan_params(void *priv) bp = WEXT_PNOSETUP_HEADER_SIZE; os_memcpy(buf, WEXT_PNOSETUP_HEADER, bp); - buf[bp++] = 'S'; + buf[bp++] = WEXT_PNO_TLV_PREFIX; buf[bp++] = WEXT_PNO_TLV_VERSION; buf[bp++] = WEXT_PNO_TLV_SUBVERSION; buf[bp++] = WEXT_PNO_TLV_RESERVED; @@ -285,7 +288,7 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len } 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; @@ -338,8 +341,8 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len } 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)) { @@ -360,3 +363,29 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len } return ret; } + +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; +} diff --git a/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h b/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h index a952d7e..d121b2c 100644 --- a/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h +++ b/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h @@ -16,6 +16,9 @@ #define WEXT_NUMBER_SCAN_CHANNELS_ETSI 13 #define WEXT_NUMBER_SCAN_CHANNELS_MKK1 14 +#define RSSI_CMD "RSSI" +#define LINKSPEED_CMD "LINKSPEED" + #define WPA_DRIVER_WEXT_WAIT_US 400000 #define MAX_DRV_CMD_SIZE 248 #define WEXT_NUMBER_SEQUENTIAL_ERRORS 4 @@ -39,6 +42,7 @@ #define WEXT_PNOSETUP_HEADER "PNOSETUP " #define WEXT_PNOSETUP_HEADER_SIZE 9 +#define WEXT_PNO_TLV_PREFIX 'S' #define WEXT_PNO_TLV_VERSION '1' #define WEXT_PNO_TLV_SUBVERSION '2' #define WEXT_PNO_TLV_RESERVED '0' diff --git a/bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c b/bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c index aa2fb4a..70a8157 100644 --- a/bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c +++ b/bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c @@ -289,7 +289,7 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len } 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; @@ -342,8 +342,8 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len } 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)) { @@ -364,3 +364,29 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len } return ret; } + +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; +} |