SSD_WIFI P2P使用指南


1. 概述

本文主要介绍Linux 系统下SSTAR WIFI P2P的使用,P2P使用GC 和 GO 均使用 wpa_supplicant进行连接通信,以下wpa_supplicant使用的是Version2.6。

注意:

如果开发板和手机,window 10电脑通过wifi display 方式连接,没有传图很快就会掉线。根据测试,windows 10 电脑连接后在1分钟左右掉线,需重新执行P2P_LISTEN


2. 编译需要打开的宏

NL80211和WEXT 二选一即可,建议使用NL80211

需要打开WPS相关的宏,P2P最终连接还是通过WPS进行连接的。

需要打开80211N, GO模式支持11n。


3. 配置文件

必备文件:

ctrl_interface=/tmp/p2p_supplicant //创建和wpa_supplicant 交互的netlink 接口

update_config=1 //连接的设备信息会在此刷新配置文件

device_name=IPC_DEVICES2 //被广播的设备名称

device_type=10-0050F204-5 //有很多类型,目前测试直接配置此文件即可

config_methods=virtual_push_button physical_display keypad //按照此文件配置

p2p_ssid_postfix=-IPC_DEVICES2

persistent_reconnect=1 //重连

可选文件:

p2p_listen_reg_class=81

p2p_listen_channel=1

p2p_oper_reg_class=115

p2p_oper_channel=36

p2p_go_intent=15 //go和gc协商的等级15最高,所以会成为go(配置后,模块会一直做go,也就是ap

country=CN

4. 设备执行步骤


4.1. 设备作为GO

  1. 运行wpa_supplicant

    SSTAR WIFI 使用P2P功能只能用p2p0.

    p2p_supplicant.conf 内容:

    wpa_supplicant –ip2p0 –Dnl80211 –c p2p_supplicant.conf –B
    

    因为要作为GO,所以需要配置dhcp服务器。

    ifconfig p2p0 192.168.100.1
    
    dnsmasq interface=wlan0 --no-daemon --no-resolv --leasefile-ro --no-poll --dhcp-range=192.168.100.2,192.168.100.254,12h &
    
  2. 进入与wpa_supplicant命令交互界面

    wpa_cli –p /tmp/p2p_supplicant
    

  3. 设置P2P相关参数

    SET wifi_display 1 
    WFD_SUBELEM_SET 0 000600111c440032 
    P2P_FLUSH 
    P2P_SET listen_channel 6 
    P2P_LISTEN
    

    执行完成后可在其他设备(手机或者windows 10)对应的界面搜索到IPC_DEVICES2 设备。

    Windows 10 P2P界面:

    手机P2P界面:

  4. 板子以GO模式主动去连接手机

    1. P2p_find 10

      搜索10秒,可通过 p2p_stop_find 停止搜索

    2. p2p_peers

      查看搜索到的P2P设备,只显示mac地址,有的才能够连接

    3. p2p_connect 02:08:22:da:fc:fb pbc go_intent=15

      作为GO去连接手机。 板子输入该命令以后,等待手机确认:

      手机端显示:

      手机点击接受以后:

      注意: 手机端需尽快确认,否则会出现超时错误

  5. 手机主动连接板子,设备强制GO模式去连接

    1. P2P_SET listen_channel 6

      P2P_LISTEN,设置监听信道,以及进入监听模式,手机会显示该设备

    2. 手机发起连接

      板子有如下打印:

    3. 板子强制作为GO,应答手机发起的连接

    4. 连接状态

  6. 设备处于GO模式,手机主动去连接板子

    手机发起连接

    板端确认连接

    注意:

    1. 手机请求连接后需尽快回应,否则会出现超时错误

    2. 如果有手机主动发起连接,连接上以后手机如果发图失败会在1分钟左右掉线。

  7. 查看状态以及连接上的设备

  8. 手机点击断开连接,板子还是处于GO模式

  9. 板子断开连接,会退出GO模式

    命令交互界面输入 disconnect 断开连接。


4.2. 设备作为GC

  1. 运行wpa_supplicant

    SSTAR WIFI 使用P2P功能只能用p2p0.

    p2p_supplicant.conf 内容:

    wpa_supplicant –ip2p0 –Dnl80211 –c p2p_supplicant.conf –B
    
  2. 进入与wpa_supplicant命令交互界面

    wpa_cli –p /tmp/p2p_supplicant
    

  3. 设置P2P相关参数

    SET wifi_display 1 
    WFD_SUBELEM_SET 0 000600111c440032 
    P2P_FLUSH 
    P2P_SET listen_channel 6 
    P2P_LISTEN
    

    执行完成以后会在其他设备(手机或者windows 10)对应的界面搜索到IPC_DEVICES2 设备。

    Windows 10 P2P界面:

    手机P2P界面:

  4. 板子以GC模式,主动发起连接

    1. P2p_find 10 , 搜索10秒

    2. p2p_peers

      查看搜索到的P2P设备,只显示mac地址,有的才能够连接

    3. p2p_connect 02:08:22:da:fc:fb pbc go_intent=0, 作为GC去连接手机。

      板子输入该命令以后,等待手机确认:

      手机界面:

      手机确认以后,板子端的打印:

    4. 连接上后退出获取IP地址

    5. 查看状态

  5. 手机主动发起连接,板子以GC模式应答连接

    1. P2P_SET listen_channel

      6 P2P_LISTEN

      设置监听信道,以及进入监听模式,手机会显示该设备

    2. 手机发起连接 板子有如下打印

    3. 板子强制作为GC,应答手机发起的连接

    4. 连接成功获取IP地址

  6. 断开连接 在手机界面操作或者在板子端输入 disconnect


4.3. 设备作为GO(AP)

  1. p2p_supplicant.conf 配置

    ctrl_interface=/tmp/p2p_supplicant 
    update_config=1 
    device_name=IPC_DEVICES2 
    device_type=10-0050F204-5 
    config_methods=virtual_push_button physical_display keypad 
    p2p_listen_reg_class=81 
    p2p_listen_channel=1 
    p2p_oper_reg_class=115 
    p2p_oper_channel=36 
    p2p_go_intent=15 p2p_ssid_postfix=-IPC_DEVICES2 
    #新增加如下部分 
    p2p_passphrase_len=8 #密码限制了只有8位 
    p2p_no_group_iface=1 max_num_sta=8 #最大连接个数为8个  
    network={  
        ssid="DIRECT-IPC_DEVICES2"#需要注意ssid一定要以DIRECT-开头  
        psk="12345678"  
        proto=RSN  
        key_mgmt=WPA-PSK  
        pairwise=CCMP  
        auth_alg=OPEN 
        mode=3  
        disabled=2 
    }
    
  2. 运行wpa_supplicant

    先执行rm -f /dev/random;ln -s /dev/urandom /dev/random; 再 执 行wpa_supplicant -Dnl80211 -ip2p0 -c p2p_supplicant.conf -B

  3. 进入与wpa_supplicant命令的交互界面

    让P2P广播携带ssid,手机能够搜索到:

    wpa_cli –p /tmp/p2p_supplicant SET wifi_display 1 wpa_cli –p /tmp/p2p_supplicant WFD_SUBELEM_SET 0 000600111c440032
    

  4. 强制进入GO模式

    wpa_cli –p /tmp/p2p_supplicant P2P_GROUP_ADD persistent=0
    

    参数说明:

    P2P_GROUP_ADD 强制进入GO模式。

    persistent=0

    persistent配置为1,就会在p2p_supplicant.conf文件里生成一个network配置项,ssid会在上图的ssid前面加上Direct-xx信息,pwd也会相应的变动,导致输入12345678密码无法正常连接。

    persistent配置为0后就不会生成新的network配置项,beacon中的ssid就是p2p_supplicant.conf里面配置的network中的ssid。

  5. 手机p2p 搜索到的GO名字

  6. 手机发起连接

    手机wifi界面搜到的ap

  7. 手机作为sta连接上ap

    GO(AP)端的打印信息如下:

    注意:不需要发送命令,sta和连接ap一样。