WiFi信号强度

WiFi Command流程

 

3. wpa_supplicant启动流程

4. WifiService启动流程

5. SIGNAL_POLL调用流程

[cpp]  view plain copy
  1. eloop_run->..  
  2. wpa_supplicant_ctrl_iface_receive-> //接收并处理来自framework的command  
  3. wpa_supplicant_ctrl_iface_process-> (SIGNAL_POLL)  
  4. wpa_supplicant_signal_poll->  
  5. wpa_drv_signal_poll  (struct wpa_supplicant *wpa_s,struct wpa_signal_info *si)->  
  6. wpa_driver_signal_poll  (void *priv, struct wpa_signal_info *si)->  
  7.     wpa_driver_wext_driver_cmd(priv, RSSI_CMD, buf, sizeof(buf))或  //driver_cmd_wext.c  
  8.     wpa_driver_wext_driver_cmd(priv, LINKSPEED_CMD, buf, sizeof(buf))->  
  9.         
  10.       struct iwreq iwr;  
  11.       iwr.u.data.pointer = buf;  
  12.       iwr.u.data.length = buf_len;  
  13.       ioctl(drv->ioctl_sock, SIOCSIWPRIV, &iwr);  
  14.       在Kernel中对应函数:  
  15.       cfg80211_wext_setpriv (wext-compat.c)  
  16.       RSSI_CMD:  
  17.       cfg80211_wireless_stats (获取当前已连接AP的信号强度等信息)  
  18.   
  19.      对于上面的LINKSPEED_CMD,如果ioctl不成功,则调用ioctl(drv->ioctl_sock, SIOCGIWRATE, &wrq)  
  20.      在Kernel中对应函数:  
  21.      cfg80211_wext_giwrate (获取当前已连接AP的发送速度)  
  22.   
  23.      //每个AP对应的信息       
  24.      struct station_info {  
  25.     u32 filled;  
  26.     u32 connected_time;  
  27.     u32 inactive_time;  
  28.     u32 rx_bytes;  
  29.     u32 tx_bytes;  
  30.     u16 llid;  
  31.     u16 plid;  
  32.     u8 plink_state;  
  33.     s8 signal;  //信号强度  
  34.     s8 signal_avg;  
  35.     struct rate_info txrate;  //发送速度  
  36.     struct rate_info rxrate;  
  37.     u32 rx_packets;  
  38.     u32 tx_packets;  
  39.     u32 tx_retries;  
  40.     u32 tx_failed;  
  41.     u32 rx_dropped_misc;  
  42.     struct sta_bss_parameters bss_param;  
  43.   
  44.     int generation;  
  45.     };  

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

[cpp]  view plain copy
  1. /** 
  2.  * Check if Wi-Fi needs to be enabled and start 
  3.  * if needed 
  4.  * 
  5.  * This function is used only at boot time 
  6.  */  
  7. public void checkAndStartWifi() {  
  8.     mAirplaneModeOn.set(isAirplaneModeOn());  
  9.     mPersistWifiState.set(getPersistedWifiState());  
  10.     /* Start if Wi-Fi should be enabled or the saved state indicates Wi-Fi was on */  
  11.     boolean wifiEnabled = shouldWifiBeEnabled() || testAndClearWifiSavedState();  
  12.     Slog.i(TAG, "WifiService starting up with Wi-Fi " +  
  13.             (wifiEnabled ? "enabled" : "disabled"));  
  14.     setWifiEnabled(wifiEnabled); //强制设置为true  
  15.   
  16.     mWifiWatchdogStateMachine = WifiWatchdogStateMachine.  
  17.            makeWifiWatchdogStateMachine(mContext);  
  18.   
  19. }  

你可能感兴趣的:(wifi)