Android Wifi服务框架描述

摘要:本文简单的描述了Android WifiManager、WifiService以及wpa_supplicant之间的关系。

1. 框架结构

Wifi服务框架

2. 框架描述

① 应用进程调用Android API,通过例如开关操作WifiManager.setWifiEnabled()对wifi进行控制。

② 应用进程调用API后将通过Binder通信方式将操作传递给WifiService中的WifiServiceImpl(IWifiManager接口实现)。

③ Wifi服务控制是通过状态机机制的WifiStateMachine来实现的,一是它实现了状态切换后对应的各种状态子类,例如默认状态下收到消息应该进行何种处理,连接状态下收到消息应该如何处理,如是而已;二是它包含了WifiNative、WifiMonitor两个对象,WifiNative对应了wifi操作的JNI行为,WifiMonitor通过JNI侦听来自下层wpa_supplicant的事件。

④ com_android_server_wifi_WifiNative为JNI实现部分,它通过wpa_ctrl来创建两个socket作为wpa_supplicant的客户端,一个用来发送控制命令,一个用来侦听,可以分别认为对应了WifiNative和WifiMonitor功能。

⑤ wpa_supplicant作为服务端通过socket接收来自上层的控制,同时通过socket传递wifi状态信息给上层。

⑥ wpa_supplicant与底层驱动进行交互来实现对无线网络进行管理和控制的功能。

3. 相关文件

文件名 完整路径
WifiManager.java frameworks/base/wifi/java/android/net/wifi/WifiManager.java
WifiService.java frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiService.java
WifiServiceImpl.java frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
WifiStateMachine.java frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java
WifiMonitor.java frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiMonitor.java
WifiNative.java frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNative.java
com_android_server_wifi_WifiNative.cpp frameworks/opt/net/wifi/service/jni/com_android_server_wifi_WifiNative.cpp
wpa_ctrl.c external/wpa_supplicant_8/src/common/wpa_ctrl.c
wifi.c hardware/libhardware_legacy/wifi/wifi.c
main.c external/wpa_supplicant_8/wpa_supplicant/main.c
wpa_supplicant.c external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant.c

4. 参考

http://www.cnblogs.com/snake-hand/p/3174650.html
http://www.cnblogs.com/chenbin7/category/503027.html