WEB开发网
开发学院手机开发Android 开发 Android 移植 wifi 设计原理 阅读

Android 移植 wifi 设计原理

 2010-02-24 05:10:00 来源:WEB开发网   
核心提示:初始化在 SystemServer 启动的时候,会生成一个 ConnectivityService 的实例,try {Log.i(TAG, "Starting Connectivity Service.");ServiceManager.addService(Context.CONNECTIVITY
wifi设计原理

初始化

在 SystemServer 启动的时候,会生成一个 ConnectivityService 的实例,

try {

Log.i(TAG, "Starting Connectivity Service.");

ServiceManager.addService(Context.CONNECTIVITY_SERVICE, new

ConnectivityService(context));

} catch (Throwable e) {

Log.e(TAG, "Failure starting Connectivity Service", e);

}

ConnectivityService 的构造函数会创建 WifiService,

if (DBG) Log.v(TAG, "Starting Wifi Service.");

mWifiStateTracker = new WifiStateTracker(context, handler);

WifiService wifiService = new WifiService(context, mWifiStateTracker);

ServiceManager.addService(Context.WIFI_SERVICE, wifiService);

WifiStateTracker 会创建 WifiMonitor 接收来自底层的事件,WifiService 和 WifiMonitor 是整

个模块的核心。WifiService 负责启动关闭 wpa_supplicant、启动关闭 WifiMonitor 监视线程

和把命令下发给 wpa_supplicant,而 WifiMonitor 则负责从 wpa_supplicant 接收事件通知。

连接 AP

1. 使能 WIFI

WirelessSettings 在初始化的时候配置了由 WifiEnabler 来处理 Wifi 按钮,

private void initToggles() {

mWifiEnabler = new WifiEnabler(

this,

(WifiManager) getSystemService(WIFI_SERVICE),

(CheckBoxPreference) findPreference(KEY_TOGGLE_WIFI));

当用户按下 Wifi 按钮后, Android 会调用 WifiEnabler 的 onPreferenceChange, 再由 WifiEnabler

调用 WifiManager 的 setWifiEnabled 接口函数,通过 AIDL,实际调用的是 WifiService 的

setWifiEnabled 函数,WifiService 接着向自身发送一条 MESSAGE_ENABLE_WIFI 消息,在

处理该消息的代码中做真正的使能工作:首先装载 WIFI 内核模块(该模块的位置硬编码为

"/system/lib/modules/wlan.ko" ), 然 后 启 动 wpa_supplicant ( 配 置 文 件 硬 编 码 为

"/data/misc/wifi/wpa_supplicant.conf") 再通过 WifiStateTracker 来启动 WifiMonitor

1 2 3 4 5  下一页

Tags:Android 移植 wifi

编辑录入:coldstar [复制链接] [打 印]
赞助商链接