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


 

更多相关文章

  1. libgdx一个完整的处理流程
  2. android 安全设置相关at流程分析
  3. Android输入法弹出流程
  4. Android(安卓)Camera2 HAL3 高通Qualcomm Camera底层initialize
  5. Android(安卓)Framework Boot Up Overview(Android系统框架启动流
  6. Android系统启动流程 -- linux kernel
  7. Android(安卓)Mms之短信接收流程--从Framework到App
  8. Android(安卓)SO逆向-流程控制语句及表达式运算
  9. Android(安卓)4.4 Kitkat Phone工作流程浅析(五)__MT(来电)流程

随机推荐

  1. Android之Service
  2. Android button防多次点击
  3. Android adb shell后面可用的常用命令详
  4. android中实现全局变量
  5. Android优秀开源项目大全
  6. Android从SD卡中加载图片或读取信息
  7. Android:获取屏幕完整宽高,包含状态栏
  8. android帐号管理
  9. json defines classes that conflict wit
  10. android listview每个item定义动画呈现