WiFi信号强度--SIGNAL_POLL
16lz
2021-01-26
1. 信号强度算法
WifiManager.java
/** Anything worse than or equal to this will show 0 bars. */ private static final int MIN_RSSI = -100; /** Anything better than or equal to this will show the max bars. */ private static final int MAX_RSSI = -55; /** * Calculates the level of the signal. This should be used any time a signal * is being shown. * * @param rssi The power of the signal measured in RSSI. * @param numLevels The number of levels to consider in the calculated * level. * @return A level of the signal, given in the range of 0 to numLevels-1 * (both inclusive). */ public static int calculateSignalLevel(int rssi, int numLevels) { /* in general, numLevels is 4 */ if (rssi <= MIN_RSSI) { return 0; } else if (rssi >= MAX_RSSI) { return numLevels - 1; } else { float inputRange = (MAX_RSSI - MIN_RSSI); float outputRange = (numLevels - 1); return (int)((float)(rssi - MIN_RSSI) * outputRange / inputRange); } }
2. WiFi Command流程
3. wpa_supplicant启动流程
4. WifiService启动流程
5. SIGNAL_POLL调用流程
eloop_run->..wpa_supplicant_ctrl_iface_receive-> //接收并处理来自framework的commandwpa_supplicant_ctrl_iface_process-> (SIGNAL_POLL)wpa_supplicant_signal_poll->wpa_drv_signal_poll (struct wpa_supplicant *wpa_s,struct wpa_signal_info *si)->wpa_driver_signal_poll (void *priv, struct wpa_signal_info *si)-> wpa_driver_wext_driver_cmd(priv, RSSI_CMD, buf, sizeof(buf))或 //driver_cmd_wext.c wpa_driver_wext_driver_cmd(priv, LINKSPEED_CMD, buf, sizeof(buf))-> struct iwreq iwr; iwr.u.data.pointer = buf; iwr.u.data.length = buf_len; ioctl(drv->ioctl_sock, SIOCSIWPRIV, &iwr); 在Kernel中对应函数: cfg80211_wext_setpriv (wext-compat.c) RSSI_CMD: cfg80211_wireless_stats (获取当前已连接AP的信号强度等信息) 对于上面的LINKSPEED_CMD,如果ioctl不成功,则调用ioctl(drv->ioctl_sock, SIOCGIWRATE, &wrq) 在Kernel中对应函数: cfg80211_wext_giwrate (获取当前已连接AP的发送速度) //每个AP对应的信息 struct station_info {u32 filled;u32 connected_time;u32 inactive_time;u32 rx_bytes;u32 tx_bytes;u16 llid;u16 plid;u8 plink_state;s8 signal; //信号强度s8 signal_avg;struct rate_info txrate; //发送速度struct rate_info rxrate;u32 rx_packets;u32 tx_packets;u32 tx_retries;u32 tx_failed;u32 rx_dropped_misc;struct sta_bss_parameters bss_param;int generation; };
更多相关文章
- libgdx一个完整的处理流程
- android 安全设置相关at流程分析
- Android输入法弹出流程
- Android(安卓)Camera2 HAL3 高通Qualcomm Camera底层initialize
- Android(安卓)Framework Boot Up Overview(Android系统框架启动流
- Android系统启动流程 -- linux kernel
- Android(安卓)Mms之短信接收流程--从Framework到App
- Android(安卓)SO逆向-流程控制语句及表达式运算
- Android(安卓)4.4 Kitkat Phone工作流程浅析(五)__MT(来电)流程