当前位置: 代码迷 >> 驱动开发 >> 请问:C代码基于wpa_supplicant怎么编写无线连接程序
  详细解决方案

请问:C代码基于wpa_supplicant怎么编写无线连接程序

热度:21   发布时间:2016-04-28 10:27:05.0
请教:C代码基于wpa_supplicant如何编写无线连接程序
各位大侠好,我是一个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)