WiFi信号强度--SIGNAL POLL

               

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;    };


 

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

你可能感兴趣的:(WiFi信号强度--SIGNAL POLL)