---恢复内容开始---

frameworks/base/services/java/com/android/server/wifi 中的ReadMe文件

WifiService: Implements the IWifiManager 3rd party API. The API and the device state information (screen on/off, battery state, sleep policy) go as input into the WifiController which tracks high level states as to whether STA or AP mode is operational and controls the WifiStateMachine to handle  and shut down.

实现IWifiManager第三方API。API和设备信息(比如屏幕亮/暗,电量状态,睡眠方案)作为WifiController的输入。WifiController跟踪高级别状态(STA或者AP模式是否可用)

并且控制WifiStateMachine去操控

1):AP模式: Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接

AP,也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就一个AP。

DSC0000.jpg (46.51 KB, 下载次数: 2)

2015-10-1 07:37 上传

2):STA模式: Station, 类似于无线终端,sta本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。

STA站点,每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。

DSC0001.jpg (37.83 KB, 下载次数: 2)

2015-10-1 07:37 上传

WifiController: Acts as a controller to the WifiStateMachine based on various inputs (API and device state). Runs on the same thread created in WifiService.

基于各种API和设备状态的输入,充当WifiStateMachine的控制器。和WifiService运行在同一个线程

WifiSettingsStore: Tracks the various settings (wifi toggle, airplane toggle, tethering toggle, scan mode toggle) and provides API to figure if wifi should be turned on or off.

跟踪各种用户设置(wifi,飞行模式,网络分享,扫描模式的切换),并将这些设置提供给API,去计算出wifi需要开还是关

Tethering,意指通過智能手機或平板電腦等行動裝置,將它的上網功能分享給其他裝置使用的功能。中文尚未有合適譯名,有人譯為Internet 共享、網絡共享、以手機作為數據機、手機帶動電腦上網、共用上網、继流联等。

如果是以WiFi進行分享,通常稱為行動熱點(Mobile Hotspot)。

WifiTrafficPoller: Polls traffic on wifi and notifies apps listening on it.

wifi传输量轮询:轮询wifi传输量,通知监听传输量的app

WifiNotificationController: Controls whether the open network notification is displayed or not based on the scan results.

控制 wifi扫描结果中的开放网络是否通过nodification通知给用户

WifiStateMachine: Tracks the various states on STA and AP connectivity and handles

跟踪STA和AP连接的各种状态。控制开启和关闭

Feature description:

Scan-only mode with Wi-Fi turned off:

- Setup wizard opts user into allowing scanning for improved location. We show no further dialogs in setup wizard since the user has just opted into the feature. This is the reason WifiService listens to DEVICE_PROVISIONED setting.

- Once the user has his device provisioned, turning off Wi-Fi from settings or from a third party app will show up a dialog reminding the user that scan mode will be on even though Wi-Fi is being turned off. The user has the choice to turn this notification off.

- In the scan mode, the device continues to allow scanning from any app with Wi-Fi turned off. This is done by disabling all networks and allowing only scans to be passed.

以下参考www.cnblogs.com/snake-hand/p/3174650.html

1. 系统架构

Android WiFi系统引入了wpa_supplicant,它的整个WiFi系统以wpa_supplicant为核心来定义上层用户接口和下层驱动接口。整个WiFi系统架构如下图所示:

DSC0002.png (83.84 KB, 下载次数: 2)

2015-10-1 07:37 上传

一切尽在上图中,下面将对每部分进行详细分析。

1.1 WifiService

由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及更新WIFI的状态。

处理其它模块通过IWifiManager接口发送过来的远端WiFi操作。

1.2 WifiMonitor

负责从wpa_supplicant接收事件通知。

1.3 wpa_supplicant

1) 读取配置文件

2) 初始化配置参数,驱动函数

3) 让驱动scan当前所有的bssid

4) 检查扫描的参数是否和用户设置的相符

5) 如果相符,通知驱动进行权限和认证操作

6) 连上AP

1.4 Wifi驱动模块

厂商提供的source,主要进行load firware和kernel的wireless进行通信

1.5 Wifi电源管理模块

主要控制硬件的GPIO和上下电,让CPU和Wifi模组之间通过sdio接口或USB接口通信

1.6 Wifi工作步骤

1) Wifi启动

2) 开始扫描

3) 显示扫描的AP

4) 配置AP

5) 连接AP

6) 获取IP地址

7) 上网

1.7 Wifi模块代码

1) Wifi Settings应用程序       packages/apps/Settings/src/com/android/settings/wifi

2) Wifi Framework       frameworks/base/wifi/java/android/net/wifi (UI通过android.net.wifi package

发送命令给wifi.c)

frameworks/base/core/java/android/net(更高一级的网络管理)

frameworks/base/services/java/com/android/server

3) Wifi JNI       frameworks/base/core/jni/android_net_wifi_Wifi.cpp

4) Wifi Hardware (wifi管理库)       hardware/libhardware_legacy/wifi/wifi.c

5) wpa_supplicant(wifi  tool)

external/wpa_supplicant8

(1) wpa_client (生成库libwpaclient.so)

external/wpa_supplicant_8/wpa_supplicant/src/common/wpa_ctrl.c

(2) wpa_server (生成守护进程wpa_supplicant)

external/wpa_supplicant_8/wpa_supplicant/main.c

6) Wifi kernel       net/wireless     drivers/wlan_xxx       arch/arm/mach-xxx/wlan_pm.c

2. WifiService和wpa_supplicant启动流程

WifiService和wpa_supplicant启动流程如下图所示:

DSC0003.png (48.26 KB, 下载次数: 2)

2015-10-1 07:37 上传

2.1 状态变化

· 加载wifi驱动的状态变化流程如下:

初始状态:mInitialState

|

mDriverUnloadedState

|

mWaitForP2pDisableState

|

mDriverLoadingState(其enter中调用WifiNative.loadDriver)

· 启动wpa_supplicant的状态变化如下:

在DriverLoadedState状态的processMessage中调用WifiNative.startSupplicant

3. 生产时自动打开Wifi

在生产时, 默认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);

}

---恢复内容结束---

android wifi 框架图,android wifi框架相关推荐

  1. android应用程序框架图,Android系统框架图详解

    Android系统从下至上分为4层:Linux内核.Android程序库及Android运行时.Android应用程序框架,以及应用程序等. 图1-1 Android系统框架 1. Linux内核(L ...

  2. android 字符串折线图,Android + MPAndroidChart 实现折线、柱形和饼状图

    本文讲讲怎么用 MPAndroidChart 框架实现折线图.柱形图.饼图,并且进行样式设置,达到和宣传图差不多的效果. 一开始看到 MPAndroidChart 的各种图表介绍图感觉很好看,但是直接 ...

  3. android自定义波浪图,Android自定义控件--波浪图控件

    今天给大家分享一个android的波浪图控件制作.具体效果如下图所示: 上次有个app使用了这个控件,感觉特别酷炫.今天讲解一下这个控件的思路分析与代码编写. 思路分析: 1.绘制波浪图 2.移动波浪 ...

  4. android 分辨率 切图,Android设计图(标注、切图)

    1.Android: 1)Android的单位是dp 2)分为ldpi/mdpi/hdpi/xhdpi/xxhdpi. 3)分辨率对应DPI ldpi  QVGA (240×320) mdpi  HV ...

  5. Android自定义sleep图,android自定义view实现钟表效果

    本文实例为大家分享了android view实现钟表的具体代码,供大家参考,具体内容如下 先看效果图: 自定义view大家肯定已经不陌生了,所以直接今天直接步入正题:如何利用canvas去绘制出一个钟 ...

  6. android 切凹凸图,Android实现边缘凹凸的View

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 转载 最近做项目的时候遇到一个卡劵的效果,由于自己觉得用图片来做的话可以会出现适配效果不好,再加上自己自定义view方面 ...

  7. android 自定义雷达图,Android自定义蛛网图(雷达图)

    前言 纸上得来终觉浅,绝知此事要躬行. 直接上代码 import android.content.Context; import android.graphics.Canvas; import and ...

  8. android 程序类图,Android模板设计模式之 - 构建整个应用的BaseActivity

    1. 模式介绍 模式的定义 定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模式的使用场景 多个子类有公有的方法,并且逻辑基本相 ...

  9. android 继承类图,Android Studio中绘制UML类图介绍

    Android Studio中绘制UML类图介绍 Android Studio中绘制UML类图介绍 动机 最近开始阅读项目源码,从其中一个模块开始看,奈何大项目中的一个模块,对于萌新而言,也太过于复杂 ...

最新文章

  1. python语言特点有哪些-Python是什么?Python有什么特点?
  2. Bochs安装FreeDOS与调试
  3. 那个双非本科,还想转算法岗的姑娘,最后怎么了?
  4. SAP Spartacus基于travis的持续集成
  5. php内容管理器是什么原因,有什么好的php内容管理后台吗?打算试水接单的大三狗提问...
  6. 现代软件工程讲义 目录
  7. MySQL存储引擎:MyISAM InnoDB
  8. 【Vegas原创】Exchange报550 5.7.1 Unable to relay for …错误的分析
  9. 图标缩排和悬浮突显的简单实现
  10. MIPS指令集确实够精简,编译文件明显小
  11. 解决屏蔽JS代码报错的问题
  12. 依据余弦相似度查找常用汉字形似字
  13. h5页面 请在微信客户端打开链接_使用Fiddler抓包解决“请在微信客户端打开链接”的问题...
  14. 1.嵌入式之80C51单片机
  15. php-hyperf 使用Saber报 HTTP -4 Unknown: Linux Code 11: Resource temporarily unavailable
  16. 发光二极管二极管引脚_LCD? 发光二极管? 等离子体? HDTV技术入门指南
  17. 给数据穿上美丽的外衣
  18. Android100问之什么是Android
  19. 浅谈三种近场通信技术的特点,对未来近场通信技术的应用场景进行分析与预测
  20. C#学习笔记(四):.net 第一个业务逻辑(同名用户不可创建)(优化逻辑)

热门文章

  1. tp6 导入excel文件
  2. NOI2010~NOI2018选做
  3. 你究竟多想成功?(nba励志视频)
  4. 从Linux角度以及JVM源码,深入NIO的细节
  5. python-turtle 小发现
  6. 服务器入门/tomcat以及如何部署
  7. 树莓派开发笔记(五):GPIO引脚介绍和GPIO的输入输出使用(驱动LED灯、检测按键)
  8. RC串、并联选频网络特性的硬件分析与详解
  9. 没有人能够一味地淡定,没有人能够一味地忍受
  10. 使用spacedesk实现两台笔记本的双屏显示