各位大侠好,我是一个c代码新手
目前需要制作一个无线连接程序,驱动什么的已经搞好了
目前我基于wpa_supplicant和wireless tools做了一个,感觉好像很别扭
首先,对于wpa_supplicant需要的配置文件,我使用fopen创建文件,把配置在一个字符串数组里组装好,然后fwrite到配置文件里,然后使用system执行 wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext 这样的命令来进行无线连接。
搜索过程,我就是使用system执行 iwlist ra0 scan >tmp_file,把结果写到文件里,fopen后,用ftell一句一句的分析,把需要的essid,加密方式这些参数提取出来
对于连接的情况,也是通过执行相关命令把命令结果存在文件中,然后fopen后,读出来检查。
因为没有参加太多的软件开发,所以,目前我只想了这么一个办法。
这个办法很别扭,如果完全都是正确的话,那直接就连接了,没什么问题。
但是如果wpa_supplicant命令执行错了,比如密码有问题等,没法反馈出来
特别是wep方式,密码错了,完全没有打印反馈回来的,我也没法准确的提示出连接正确还是错误。
特地来请教各位大侠,有没有更好的办法?我感觉我这个办法,那是相当的费时费力啊。。。
万分感谢了!!
------解决方案--------------------
顶。是android环境还是linux环境呀?android下应该有参考源码呀。linux环境命令行模式下不懂怎么搞。
------解决方案--------------------
可以把密码保存到一个文件,再和获取的密码比较啊,比较字符串还不会吗?
------解决方案--------------------
基本就是LZ的做法了,可以根据需求慢慢改善。
------解决方案--------------------
system执行 iwlis
------解决方案--------------------
1. 使能 WIFI
2. 查找 AP
3. 配置 AP 参数
4. 连接
5. 配置 IP 地址
基本流程就这样吧。
------解决方案--------------------
一、WIFI的基本架构
1、wifi用户空间的程序和库:
external/wpa_supplicant/
生成库libwpaclient.so和守护进程wpa_supplicant。
2、hardware/libhardware_legary/wifi/是wifi管理库。
3、JNI部分:
frameworks/base/core/jni/android_net_wifi_Wifi.cpp
4、JAVA部分:
frameworks/base/services/java/com/android/server/
frameworks/base/wifi/java/android/net/wifi/
5、WIFI Settings应用程序位于:
packages/apps/Settings/src/com/android/settings/wifi/
二、WIFI在Android中如何工作
Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,代码位于
external/wpa_supplicant。wpa_supplicant是通过socket与
hardware/libhardware_legacy/wifi/wifi.c通信。UI通过android.net.wifi package
(frameworks/base/wifi/java/android/net/wifi/)发送命令给wifi.c。
相应的JNI实现位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp。
更高一级的网络管理位于frameworks/base/core/java/android/net。
三、配置Android支持WIFI
在BoardConfig.mk中添加:
BOARD_HAVE_WIFI := true
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
这将在external/wpa_supplicant/Android.mk设置WPA_BUILD_SUPPLICANT为true,
默认使用驱动driver_wext.c。
如果使用定制的wpa_supplicant驱动(例如 madwifi),可以设置:
BOARD_WPA_SUPPLICANT_DRIVER := MADWIFI
四、使能wpa_supplicant调试信息
默认wpa_supplicant设置为MSG_INFO,为了输出更多信息,可修改:
1、在common.c中设置wpa_debug_level = MSG_DEBUG;
2、在common.c中把#define wpa_printf宏中的
if ((level) >= MSG_INFO)
改为
if ((level) >= MSG_DEBUG)