WiFi信号强度--SIGNAL_POLL

来源:互联网 发布:xampp mysql 远程访问 编辑:程序博客网 时间:2024/04/29 00:57

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

在生产时, 默认Wifi是关闭的,如果需要默认打开,可修改wifiservice.java中的如下代码:

    /**     * Check if Wi-Fi needs to be enabled and start     * if needed     *     * This function is used only at boot time     */    public void checkAndStartWifi() {        mAirplaneModeOn.set(isAirplaneModeOn());        mPersistWifiState.set(getPersistedWifiState());        /* Start if Wi-Fi should be enabled or the saved state indicates Wi-Fi was on */        boolean wifiEnabled = shouldWifiBeEnabled() || testAndClearWifiSavedState();        Slog.i(TAG, "WifiService starting up with Wi-Fi " +                (wifiEnabled ? "enabled" : "disabled"));        setWifiEnabled(wifiEnabled); //强制设置为true        mWifiWatchdogStateMachine = WifiWatchdogStateMachine.               makeWifiWatchdogStateMachine(mContext);    }


原创粉丝点击