wifi学习记录
来源:互联网 发布:四轮定位数据怎么看 编辑:程序博客网 时间:2024/06/08 08:09
/external/wpa_supplicant_8/wpa_supplicant/ctrl_iface.c
该类是底层用于对接上层com.android.server.wifi.WifiNative类
WifiNative 通过链接库文件libwifi-service.so
/* Native functions are defined in libwifi-service.so */
System.loadLibrary("wifi-service");
通过doBooleanCommandNative方法,向ctrl_iface传入操作命令字符串,从而起到方法调用的动能。
举例要添加一个wifi network,则需要上层WifiNative点用ctrl_iface的wpa_supplicant_ctrl_iface_process并传入ADD_NETWORK命令字符串以及相关的参数(网络编号)
else if (os_strcmp(buf, "ADD_NETWORK") == 0) {
reply_len = wpa_supplicant_ctrl_iface_add_network(
wpa_s, reply, reply_size);
}
这中间还经由ctrl_iface_unix.c文件的wpa_supplicant_ctrl_iface_receive方法
我wifi完成添加网络的调用步骤:
WifiNative
ctrl_iface_unix : wpa_supplicant_ctrl_iface_receive
ctrl_iface : wpa_supplicant_ctrl_iface_process
ctrl_iface : wpa_supplicant_ctrl_iface_add_network
这里面实际上真正的添加网络操作在wpa_supplicant_ctrl_iface_add_network里
wpa_supplicant_ctrl_iface_add_network
首先ssid = wpa_config_add_network(wpa_s->conf);添加网络,并返回一个ssid,ssid代表了该网络的身份标识。
然后通过wpa_config_set_network_defaults初始化wifi网络信息.。(config.c::wpa_config_set_network_defaults)
/**
* wpa_config_set_network_defaults - Set network default values
* @ssid: Pointer to network configuration data
*/
void wpa_config_set_network_defaults(struct wpa_ssid *ssid)
然后SET_NETWORK流程查看:
} else if (os_strncmp(buf, "SET_NETWORK ", 12) == 0) {
if (wpa_supplicant_ctrl_iface_set_network(wpa_s, buf + 12))
最终调用:wpa_supplicant_ctrl_iface_update_network
ret = wpa_config_set(ssid, name, value, 0); 设置值。
根据name判断是否是‘psk’和'priority',做相应的处理
if ((os_strcmp(name, "psk") == 0 &&
value[0] == '"' && ssid->ssid_len) ||
(os_strcmp(name, "ssid") == 0 && ssid->passphrase))
wpa_config_update_psk(ssid);
else if (os_strcmp(name, "priority") == 0)
wpa_config_update_prio_list(wpa_s->conf);
其中wpa_config_update_prio_list具体实现如下:
int wpa_config_update_prio_list(struct wpa_config *config) (config.c::wpa_config_set_network_defaults)
{
struct wpa_ssid *ssid;
int ret = 0;
os_free(config->pssid);
config->pssid = NULL;
config->num_prio = 0;
ssid = config->ssid;
while (ssid) {
ssid->pnext = NULL;
if (wpa_config_add_prio_network(config, ssid) < 0)
ret = -1;
ssid = ssid->next;
}
return ret;
}
enable wifi network
将会调用到wpa_supplicant.c文件,wpa_supplicant_enable_network,wpa_supplicant_enable_one_network, 然后会启动scan,
wpa_supplicant_req_scan(wpa_s, 0, 0);
- wifi学习记录
- WIFI模块--ESP8266的学习记录
- ESP 8266 WIFI模块学习使用记录
- wifi记录
- 和菜鸟一起学linux之wifi学习记录基础知识
- 和菜鸟一起学linux之wifi学习记录
- 和菜鸟一起学linux之wifi学习记录
- 和菜鸟一起学linux之wifi学习记录
- 和菜鸟一起学linux之wifi学习记录
- 和菜鸟一起学linux之wifi学习记录
- android wifi 移植记录
- android wifi 移植记录
- wifi移植全过程记录
- android wifi 移植记录
- BCM4330 WIFI 调试记录
- android wifi 移植记录
- android wifi 移植记录
- WIFI 调试记录
- 深入分析MapReduce shuffle过程
- Shell 函数
- javascript闭包传参和事件的循环绑定示例探讨(转载)
- Java web后台插入数据库中文乱码问题解决
- 用迭代计算Map里有几个子Map
- wifi学习记录
- SDK是7.1,ios development target 选择 6.0,苹果拒绝,有经验的明示下!
- 简易实现Redis监控自动短信告警
- iOS-分段控制器大全ZFJSegmentedControl
- Shell 输入/输出重定向
- 时间管理的七句话
- VS C\C++ 运行时库 编译MT\MTD MD\MDd
- 关于Python中输出文件选择格式问题
- tomcat部署web应用的4种方法以及部署多个应用