Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176025
  • 博文数量: 76
  • 博客积分: 287
  • 博客等级: 二等列兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-16 18:23
文章分类

全部博文(76)

文章存档

2018年(1)

2017年(1)

2015年(1)

2014年(31)

2013年(34)

2012年(3)

2011年(3)

2010年(2)

我的朋友

分类: LINUX

2012-12-13 17:55:12

wifi上层有默认设置有三个睡眠策略
以ics为例,在休眠状态下保持WLAN连接
1:始终     --代码中是wow模式睡眠,始终保持wifi连接
2:仅限充电时--在充电时才始终保持wifi连接

3:从不     --采用deepsleep模式睡眠,休眠后wifi不连接

底层驱动有四种状态:

enum {
    WLAN_POWER_STATE_ON = 0,
    WLAN_POWER_STATE_CUT_PWR = 1,
    WLAN_POWER_STATE_DEEP_SLEEP,
    WLAN_POWER_STATE_WOW
};

上层鱼底层通过文件/sys/android_wlan/wlan_power/sleep_policy进行通信

1:始终 对应WLAN_POWER_STATE_WOW

2,3是WLAN_POWER_STATE_DEEP_SLEEP


上层有关的文件:
frameworks/base/services/java/com/android/server/WifiService.java
frameworks/base/core/java/android/provider/Settings.java

中间层设置此文件的文件为frameworks/base/services/java/com/android/server/WifiService.java中

在第三种情况,在屏灭后wifi默认会在15分钟后进行休眠,这里需注意

android:wpa_supplicant中使用的四个套接字
上行接口:
static struct wpa_ctrl *ctrl_conn;控制接口,用于发送命令,获取信息,发送request,接受response
static struct wpa_ctrl *monitor_conn;用于监听wpa_supplicant的event
主要调用到的接口是
wpa_ctrl_open

wpa_ctrl_close
wpa_ctrl_request
简历client端节点

wpa_supplicant_ctrl_iface_receive
wpa_supplicant_ctrl_iface_send
sever端消息的接受和发送,也就是sever端套接字的处理流程

1.ioctl_sock:发送命令道kernel(driver_nl80211.c)wpa_driver_nl80211_init
drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
和framework层进行通信的
2.netlink sock:接受kernel发上来的event(driver_nl80211.c)wpa_driver_nl80211_init---netlink_init---
netlink->sock = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);

3.monitor_sock:i802_init---wpa_driver_nl80211_set_mode---nl80211_create_monitor_interface
drv->monitor_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

4.l2 packet sock:处理802.1x报文 l2_packet_init
l2->fd = socket(PF_PACKET, l2_hdr ? SOCK_RAW : SOCK_DGRAM,
htons(protocol));



4.与android HAL层wifi.c中通信的socket,想HAL层发送event
wpa_supplicant_ctrl_iface_init
priv->sock = android_get_control_socket(addr.sun_path);此处就不再使用wpa_supplicant中默认的套接字

wpa_supplicant_ctrl_iface_init
priv->sock = android_get_control_socket(addr.sun_path);
这两个是在不同时期使用的,wpa_supplicant_ctrl_iface_init在wpa_supplicant_reload_configuration中调用,是在重新加载配置文件时使用



阅读(2821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~