基于wpa_supplicant库的WIFI连接功能实现--wifi扫描功能实现

上一篇介绍了如何改写WPAS库原C函数,让我们直接拿到每个命令的执行结果。这一篇就正式开始实现各个功能,首先是最基本的扫描功能。

在wpa_cli命令解析一节我们知道,要想得到附近AP,需要使用scanscan_results命令,scan是让硬件执行扫描操作,它会扫描附近所有的AP并把扫描结果存入内存。如果我们要查看扫描结果,需要用scan_results。

wifi整个连接过程中可分为下面几种状态:

    enum STATUS
    {
        INACTIVE, //所有配置项未激活
        SCANNING, //扫描
        COMPLETED, //连接完成
        ASSOCIATING, //尝试连接中
        DISCONNECTED, //断开
        WAY_HANDSHAKE,  //认证状态
        UNKNOW  //未知状态
    };

分清状态是很有必要的,因为笔者在调试过程中发现,除了INACTIVECOMPLETED,其它状态下wpas库会自动执行扫描,不断更新状态。而如果程序中和wpas库后台同时执行scan命令,会导致驱动程序bug。而后边我们很多地方也需要获知wifi当前的状态,所以首先我们先来完成状态获取的函数。

WifiService::STATUS WifiService::getWpsStatus()
{
//    qDebug()<<"getWpsStatus";
    int ret;
    char buf[2048];
    memset(buf, 0, 2048);
    //1. 运行status得到状态返回串
    ret = handleCmd->hanleCmd(ctrl_conn, buf,  "status");
    if(ret)
    {
        qDebug()<<"getStatus err!";
        return UNKNOW;
    }
    //2. 从buf中查找是否含有"COMPLETED"int pos = QString(buf).indexOf(QString("COMPLETED"));
    if(pos != -1){  //未连接
        return COMPLETED;
    }
    pos = QString(buf).indexOf(QString("SCANNING"));
    if(pos != -1){  //未连接
        return SCANNING;
    }
    pos = QString(buf).indexOf(QString("INACTIVE"));
    if(pos != -1){  //未连接
        return INACTIVE;
    }
    pos = QString(buf).indexOf(QString("ASSOCIATING"));
    if(pos != -1){  //未连接
        return ASSOCIATING;
    }
    pos = QString(buf).indexOf(QString("DISCONNECTED"));
    if(pos != -1){  //未连接
        return DISCONNECTED;
    }

    return UNKNOW;
}
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
wpa_supplicant是一个用于连接wifi网络的软件,它支持多种加密方式,如WPAWPA2等。要连接wifi并打开Wifi Direct,我们可以按照以下步骤进行操作: 1. 首先,我们需要确保系统中已安装了wpa_supplicant软件。可以通过在终端中输入命令"sudo apt-get install wpasupplicant"来进行安装。 2. 安装完成后,可以使用命令"sudo nano /etc/wpa_supplicant.conf"来编辑wpa_supplicant的配置文件。在其中添加以下内容来连接wifi网络: network={ ssid="你的Wifi网络名称" psk="你的Wifi密码" } 注意,将"你的Wifi网络名称"和"你的Wifi密码"替换为你自己的网络名称和密码。 3. 保存并退出配置文件。 4. 使用命令"sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf"来启动wpa_supplicant并连接wifi网络。其中,wlan0是你的无线网卡接口名,可以根据实际情况进行调整。 5. 连接成功后,可以使用命令"sudo wpa_cli"来进入wpa_supplicant的交互模式。在交互模式中,我们可以使用"scan"命令来扫描附近的Wifi Direct设备,然后使用"p2p_connect"命令来连接指定的设备。 6. 如果连接成功,可以使用"interface p2p0 p2p_listen"命令来打开Wifi Direct功能。 通过以上步骤,我们可以使用wpa_supplicant连接wifi网络,并在连接成功后打开Wifi Direct功能。请注意,具体的配置和命令可能因系统版本或网络环境而有所不同,请根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浓咖啡jy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值