版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
开发示例——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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重症康复患者营养管理
- 画室经营教学设施更新改造协议
- JJF(苏) 318-2026 平行光管校准规范
- 《诊断学》教学大纲(打印)
- 青岛大学高等数学期末考试试卷(含答案)
- 第23讲 DNA的结构和复制
- 声带术后康复宣教
- 老年便秘护理查房
- 重大事故隐患判定考题及答案
- 新生儿窒息护理查房
- 农作物植保员职业技能竞赛题库及答案
- 汽车使用性能与检测(第三版)全套课件
- 雷雨-剧本原文-高中语文雷雨剧本原文
- 《社区康复》课件-第二章 社区康复的内容
- JCT 929-2023 叶蜡石 (正式版)
- 部编人教版五年级上册语文全册教学课件
- 呼吸机操作考核标准评分表
- 光伏电站常见事故案例课件
- 动力管道设计手册-第2版
- 四年级小数加减法口算练习600题
- 金属自由电子气模型课件
评论
0/150
提交评论