开发示例-WiFi连接示例_第1页
开发示例-WiFi连接示例_第2页
开发示例-WiFi连接示例_第3页
开发示例-WiFi连接示例_第4页
开发示例-WiFi连接示例_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

开发示例——WiFi连接示例新建名为wifiexpe文件夹,在文件夹下新建名为wifiexpe.c文件和BUILD.gn的文件。1.编写wifiexpe.c代码如下:#include<stdio.h>

#include<string.h>

#include<unistd.h>

#include"ohos_init.h"

#include"cmsis_os2.h"

#include<unistd.h>

#include"hi_wifi_api.h"

#include"lwip/ip_addr.h"

#include"lwip/netifapi.h"

#include"tcp.h"#include"lwip/sockets.h"

staticstructnetif*g_lwip_netif=NULL;

/*重置网络信息*/

voidhi_sta_reset_addr(structnetif*pst_lwip_netif)

{

ip4_addr_tst_gw;

ip4_addr_tst_ipaddr;

ip4_addr_tst_netmask;

if(pst_lwip_netif==NULL){

printf("hisi_reset_addr::Nullparamofnetdev\r\n");

return;

}

/*网关地址置0*/

IP4_ADDR(&st_gw,0,0,0,0);

/*IP地址置0*/

IP4_ADDR(&st_ipaddr,0,0,0,0);

/*子网掩码置0*/

IP4_ADDR(&st_netmask,0,0,0,0);

/*设置网络信息*/

netifapi_netif_set_addr(pst_lwip_netif,&st_ipaddr,&st_netmask,&st_gw);

}

/*设置网络信息*/

voidhi_sta_set_addr(structnetif*pst_lwip_netif)

{

ip4_addr_tst_gw;

ip4_addr_tst_ipaddr;

ip4_addr_tst_netmask;

if(pst_lwip_netif==NULL){

printf("hisi_reset_addr::Nullparamofnetdev\r\n");

return;

}

/*设置网关地址*/

IP4_ADDR(&st_gw,192,168,1,1);

/*设置IP地址*/

IP4_ADDR(&st_ipaddr,192,168,1,100);

/*设置子网掩码*/

IP4_ADDR(&st_netmask,255,255,255,0);

/*设置网络信息*/

netifapi_netif_set_addr(pst_lwip_netif,&st_ipaddr,&st_netmask,&st_gw);

}

/*选择wifi事件*/

voidwifi_wpa_event_cb(consthi_wifi_event*hisi_event)

{

if(hisi_event==NULL)

return;

switch(hisi_event->event){

caseHI_WIFI_EVT_SCAN_DONE:

printf("WiFi:Scanresultsavailable\n");

break;

caseHI_WIFI_EVT_CONNECTED:

printf("WiFi:Connected\n");

netifapi_dhcp_start(g_lwip_netif);

//启动DHCP客户端,从服务器获取IP

break;

caseHI_WIFI_EVT_DISCONNECTED:

printf("WiFi:Disconnected\n");

netifapi_dhcp_stop(g_lwip_netif);

hi_sta_reset_addr(g_lwip_netif);

break;

caseHI_WIFI_EVT_WPS_TIMEOUT:

printf("WiFi:wpsistimeout\n");

break;

default:

break;

}

}

/*扫描、连接指定AP*/

inthi_wifi_start_connect(void)

{

intret;

errno_trc;

hi_wifi_assoc_requestassoc_req={0};

uint8_t*wifi_ssid="wifi_123";

/*设置要连接的WiFi的名字*/

rc=memcpy_s(assoc_req.ssid,HI_WIFI_MAX_SSID_LEN+1,wifi_ssid,strlen(wifi_ssid));

if(rc!=HISI_OK){

return-1;

}

/*热点加密方式*/

assoc_req.auth=HI_WIFI_SECURITY_WPA2PSK;

/*热点密码*/

memcpy(assoc_req.key,"12345678",8);

/*连接至热点*/

ret=hi_wifi_sta_connect(&assoc_req);

if(ret!=HISI_OK){

return-1;

}

return0;

}

/*设置为STA模式*/

voidwifi_sta_demo(void)

{

hi_wifi_status*sta_status;

intret;

charifname[WIFI_IFNAME_MAX_SIZE+1]={0};

//初始化为空字符串

intlen=sizeof(ifname);

unsignedint

num=WIFI_SCAN_AP_LIMIT;

/*开启STA模式*/

ret=hi_wifi_sta_start(ifname,&len);

//ifname为空字符串时,自动分配接口名(如:wlan0)并注册到lwIP协议栈(创建netif结构体)

if(ret!=HISI_OK){

return;

}

/*注册回调函数*/

ret=hi_wifi_register_event_callback(wifi_wpa_event_cb);

if(ret!=HISI_OK){

printf("registerwifieventcallbackfailed\n");

}

/*为IP操作获取网络*/

g_lwip_netif=netifapi_netif_find(ifname);

//通过接口名称查找netif结构体

if(g_lwip_netif==NULL){

printf("%s:getnetiffailed\n",__FUNCTION__);

return;

}

/*扫描附近的热点*/

ret=hi_wifi_sta_scan();

if(ret!=HISI_OK){

return;

}

sleep(5);

hi_wifi_ap_info*pst_results=malloc(sizeof(hi_wifi_ap_info)*WIFI_SCAN_AP_LIMIT);

if(pst_results==NULL){

return;

}

/*获取扫描到的WiFi信息*/

ret=hi_wifi_sta_scan_results(pst_results,&num);

if(ret!=HISI_OK){

free(pst_results);

return;

}

for(unsignedintloop=0;(loop<num)&&(loop<WIFI_SCAN_AP_LIMIT);loop++){

printf("SSID:%s\n",pst_results[loop].ssid);

}

/*释放内存*/

free(pst_results);

/*设置网络信息*/

//hi_sta_set_addr(g_lwip_netif);

/*连接到指定的热点*/

ret=hi_wifi_start_connect();

if(ret!=0){

return;

}

return;

}

/*设置为AP模式*/

voidwifi_ap_demo(void)

{

charifname[WIFI_IFNAME_MAX_SIZE+1]={};

intlen=sizeof(ifname);

ip4_addr_tst_ipaddr;

hi_wifi_softap_configap_config=

{

.ssid="wifi_ap",

.key="12345678",

.ssid_hidden=0,

.channel_num=10,

.authmode=HI_WIFI_SECURITY_WPA2PSK,

.pairwise=0

};

/*设置热点的SHORT-GI(短保护间隔)功能*/

hi_wifi_softap_set_shortgi(1);

/*开启AP功能*/

hi_wifi_softap_start(&ap_config,ifname,&len);

//启动WiFiAP模式,创建无线热点,同时通过ifname返回自动分配的AP接口名称(如:“ap0”)并注册到lwIP协议栈(创建netif结构体)

/*开启网络完全接口*/

g_lwip_netif=netifapi_netif_find(ifname);

//通过接口名查找lwIP网络接口

/*设置网络信息*/

hi_sta_set_addr(g_lwip_netif);

/*设置IP地址*/

//IP4_ADDR(&st_ipaddr,192,168,1,100);

/*AP开启DHCP服务*/

netifapi_dhcps_start(g_lwip_netif,0,0);

return;

}

/**让系统运行指定的函数**/

SYS_RUN(wifi_sta_demo);

//为AP时改为SYS_RUN(wifi_ap_demo)2.编写BUILD.gn代码如下:static_library("wifiexpe"){sources=["wifiexpe.c",]include_dirs=["//utils/native/lite/include","//kernel/liteos_m/kal/cmsis","//device/hisilicon/hispark_pegasus/sdk_liteos/include","//third_party/lwip/src/include

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论