国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

OpenHarmony 設(shè)備開發(fā)一WIFI連接

系統(tǒng) OpenHarmony
本篇文章將詳細介紹hi3861的Wifi開發(fā)步驟及介紹,以及如何令hi3861開機自動連接Wifi。

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

WIFI

wifi在我們的日常開發(fā)中必不可少,想要開發(fā)鴻蒙小車聯(lián)網(wǎng)操作,想要使開發(fā)板不再局限于終端串口操作,更離不開wifi,本篇文章將詳細介紹hi3861的wifi開發(fā)步驟及介紹。

本文主要介紹如何令hi3861開機自動連接wifi。

代碼介紹

第一步先在applications\sample\wifi-iot\下路徑創(chuàng)建WIFI_demo業(yè)務(wù)代碼文件夾,在文件夾內(nèi)創(chuàng)建業(yè)務(wù)代碼和BUILD.gn編譯腳本。

【FFH】OpenHarmony 設(shè)備開發(fā)(一)-WIFI連接-開源基礎(chǔ)軟件社區(qū)

業(yè)務(wù)代碼中的頭文件引用

hi_wifi_api.h和netifapi.h保存了一些wifi的API接口,ip_addr.h則是存放了wifi需使用到的一些宏定義。

ohos_init.h和cmsis_os2.h是應(yīng)用初始化和線程創(chuàng)建必不可少的頭文件,當(dāng)我們使用到線程和SYS_RUN()都要包括這兩個頭文件。

#include <unistd.h>
#include "hi_wifi_api.h"
#include "lwip/ip_addr.h"
#include "lwip/netifapi.h"
#include "ohos_init.h"
#include "cmsis_os2.h"

編譯腳本代碼

編譯腳本將目標名為Xu_WIFI.c打包成名為Xu_WIFI_demo的靜態(tài)庫,隨后在app路徑下的BUILD.gn調(diào)用該庫,調(diào)用格式為"業(yè)務(wù)代碼文件夾名:靜態(tài)庫名"。

include_dirs為頭文件的存放地址,我們在使用ubuntu開發(fā)時,遇到不知道存放路徑的頭文件或者宏定義時,可以使用指令grep 頭文件名 -* nR find . -name 頭文件名進行搜索。

業(yè)務(wù)代碼文件夾內(nèi)的BUILD.gn代碼:

static_library("Xu_WIFI_demo") {
sources = [
"Xu_WIFI.c"
]
include_dirs = [
"http://utils/native/lite/include",
"http://kernel/liteos_m/components/cmsis/2.0",
"http://base/iot_hardware/peripheral/interfaces/kits",
"http://ohos_bundles/@ohos/device_soc_hisilicon/hi3861v100/sdk_liteos/include",
"http://ohos_bundles/@ohos/device_soc_hisilicon/hi3861v100/sdk_liteos/third_party/lwip_sack/include",
]
}

app路徑下的BUILD.gn代碼:

【FFH】OpenHarmony 設(shè)備開發(fā)(一)-WIFI連接-開源基礎(chǔ)軟件社區(qū)

【FFH】OpenHarmony 設(shè)備開發(fā)(一)-WIFI連接-開源基礎(chǔ)軟件社區(qū)

業(yè)務(wù)代碼

在業(yè)務(wù)代碼中主要由主函數(shù)、連接函數(shù)、線程函數(shù)三大函數(shù)構(gòu)成,在主函數(shù)中編寫WIFI初始化、WIFI掃描等操作,連接函數(shù)中可以確認需要連接的WIFI的賬號密鑰以及加密方式。

主函數(shù)代碼:

WIFI開啟的流程:

  1. WIFI初始化。
  2. 使能注冊回調(diào)函數(shù)。
  3. 獲取網(wǎng)絡(luò)接口進行IP的操作。
  4. 掃描WIFI。
  5. 獲取WIFI掃描結(jié)果。
  6. 連接WiFi。
#define APP_INIT_VAP_NUM 2
#define APP_INIT_USR_NUM 2
static struct netif *g_lwip_netif = NULL;
int hi_wifi_start_sta(void)
{
int ret;
char ifname[WIFI_IFNAME_MAX_SIZE + 1] = {0};
int len = sizeof(ifname);
const unsigned char wifi_vap_res_num = APP_INIT_VAP_NUM;
const unsigned char wifi_user_res_num = APP_INIT_USR_NUM;
unsigned int num = WIFI_SCAN_AP_LIMIT;
// ret = hi_wifi_init(wifi_vap_res_num, wifi_user_res_num); // WiFi初始化
// if (ret != HISI_OK)
// {
// return -1;
// }
ret = hi_wifi_sta_start(ifname, &len); // sta初始化
if (ret != HISI_OK)
{
return -1;
}
/* 注冊回調(diào)函數(shù)接口*/
ret = hi_wifi_register_event_callback(wifi_wpa_event_cb);
if (ret != HISI_OK)
{
printf("register wifi event callback failed\n");
}
/* 獲取網(wǎng)絡(luò)接口進行IP的操作 */
g_lwip_netif = netifapi_netif_find(ifname);
if (g_lwip_netif == NULL)
{
printf("%s: get netif failed\n", __FUNCTION__);
return -1;
}
/* 掃描WIFI */
ret = hi_wifi_sta_scan();
if (ret != HISI_OK)
{
return -1;
}
sleep(5); /* sleep 5s, waiting for scan result. */
//創(chuàng)建pst_results存放WiFi掃描結(jié)果
hi_wifi_ap_info *pst_results = malloc(sizeof(hi_wifi_ap_info) * WIFI_SCAN_AP_LIMIT);
if (pst_results == NULL)
{
return -1;
}
//獲取station掃描結(jié)果
ret = hi_wifi_sta_scan_results(pst_results, &num);
if (ret != HISI_OK)
{
free(pst_results);
return -1;
}
//打印WIFI掃描結(jié)果
for (unsigned int loop = 0; (loop < num) && (loop < WIFI_SCAN_AP_LIMIT); loop++)
{
printf("SSID: %s\n", pst_results[loop].ssid);
}
free(pst_results);
/* 進行WIFI連接 */
ret = hi_wifi_start_connect();
if (ret != 0)
{
return -1;
}
return 0;
}

注冊回調(diào)函數(shù):

/* 清理IP,網(wǎng)關(guān)和子網(wǎng)掩碼 */
void hi_sta_reset_addr(struct netif *pst_lwip_netif)
{
ip4_addr_t st_gw;
ip4_addr_t st_ipaddr;
ip4_addr_t st_netmask;
if (pst_lwip_netif == NULL)
{
printf("hisi_reset_addr::Null param of netdev\r\n");
return;
}
IP4_ADDR(&st_gw, 0, 0, 0, 0);
IP4_ADDR(&st_ipaddr, 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);
}
//注冊回調(diào)函數(shù)
void wifi_wpa_event_cb(const hi_wifi_event *hisi_event)
{
if (hisi_event == NULL)
return;
switch (hisi_event->event)
{
case HI_WIFI_EVT_SCAN_DONE: //STA掃描完成
printf("WiFi: Scan results available\n");
break;
case HI_WIFI_EVT_CONNECTED:
printf("WiFi: Connected\n"); //wifi已連接
netifapi_dhcp_start(g_lwip_netif); //接口功能啟動網(wǎng)絡(luò)接口的DHCP協(xié)商
break;
case HI_WIFI_EVT_DISCONNECTED:
printf("WiFi: Disconnected\n");
netifapi_dhcp_stop(g_lwip_netif); //關(guān)閉wifi
hi_sta_reset_addr(g_lwip_netif); //清理IP,網(wǎng)關(guān)和子網(wǎng)掩碼
break;
case HI_WIFI_EVT_WPS_TIMEOUT:
printf("WiFi: wps is timeout\n"); //WPS事件超時
break;
default:
break;
}
}

連接函數(shù):

連接的步驟:

  1. 創(chuàng)建hi_wifi_assoc_request結(jié)構(gòu)體變量。
  2. hi_wifi_assoc_request結(jié)構(gòu)體成員初始化:ssid,加密方式,密鑰。
  3. 使用hi_wifi_sta_connect連接WiFi,其中的實參為hi_wifi_assoc_request變量的地址。
int hi_wifi_start_connect(void)
{
int ret;
errno_t rc;
hi_wifi_assoc_request assoc_req = {0};
/* copy SSID to assoc_req */
//第三參數(shù)為ssid,第四參數(shù)為ssid數(shù)據(jù)長度
rc = memcpy_s(assoc_req.ssid, HI_WIFI_MAX_SSID_LEN + 1, "M20P", 4);
if (rc != EOK)
{
return -1;
}
//開放WIFI
// assoc_req.auth = HI_WIFI_SECURITY_OPEN;
// WIFI加密方式
assoc_req.auth = HI_WIFI_SECURITY_WPA2PSK;
/* WIFI密鑰 */
memcpy(assoc_req.key, "12345678", 8);
// WIFI連接
ret = hi_wifi_sta_connect(&assoc_req);
if (ret != HISI_OK)
{
return -1;
}
return 0;
}

線程任務(wù)創(chuàng)建:

我們需要創(chuàng)建線程時,首先需要創(chuàng)建osThreadAttr_t結(jié)構(gòu)體變量,下一步便是初始化該結(jié)構(gòu)體變量,在此步初始化中的關(guān)鍵是線程名稱、任務(wù)棧大小和線程優(yōu)先級,再下一步便使用osThreadNew()將該結(jié)構(gòu)體變量注冊,最后SYS_RUN()運行該線程。

//線程代碼段
void *hi_wifi_text(const char *arg)
{
printf("******************************\n");
hi_wifi_start_sta();

printf("******************************\n");
}
//創(chuàng)建線程
void wifi_demo(void)
{
osThreadAttr_t attr;
attr.name = "WIFITask"; //線程名稱
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 4096; //任務(wù)棧大小
attr.priority = 25; //線程優(yōu)先級
//第一參數(shù)為線程代碼段函數(shù)的名稱
if (osThreadNew((osThreadFunc_t)hi_wifi_text, NULL, &attr) == NULL)
{
printf("[LedExample] Falied to create LedTask!\n");
}
}
//運行wifi_demo線程
SYS_RUN(wifi_demo);

效果圖:

【FFH】OpenHarmony 設(shè)備開發(fā)(一)-WIFI連接-開源基礎(chǔ)軟件社區(qū)

【FFH】OpenHarmony 設(shè)備開發(fā)(一)-WIFI連接-開源基礎(chǔ)軟件社區(qū)

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??。

責(zé)任編輯:jianghua 來源: ??51CTO開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2022-09-22 15:23:40

設(shè)備開發(fā)鴻蒙

2022-02-15 14:06:36

OpenHarmon操作系統(tǒng)鴻蒙

2022-10-24 14:54:29

LWIP協(xié)議鴻蒙

2022-02-09 19:25:49

Hi3861WiFi操作鴻蒙

2022-10-25 14:51:11

設(shè)備開發(fā)鴻蒙

2021-04-19 09:25:39

鴻蒙HarmonyOS應(yīng)用

2022-08-12 19:13:07

etswifi連接操作

2023-04-25 16:30:58

設(shè)備開發(fā)鴻蒙

2022-09-07 15:35:49

設(shè)備開發(fā)鴻蒙

2022-02-21 15:38:57

Openharmon操作系統(tǒng)鴻蒙

2022-02-15 14:45:14

OpenHarmo系統(tǒng)鴻蒙

2022-09-30 13:50:07

設(shè)備開發(fā)鴻蒙

2022-07-29 14:29:24

設(shè)備開發(fā)鴻蒙

2022-09-28 13:48:13

設(shè)備開發(fā)鴻蒙

2023-04-17 16:10:14

鴻蒙藍牙

2022-02-17 18:08:04

OpenHarmon應(yīng)用開發(fā)鴻蒙

2021-03-16 09:49:16

鴻蒙HarmonyOS應(yīng)用

2021-10-11 14:14:42

鴻蒙HarmonyOS應(yīng)用

2022-09-20 14:27:23

設(shè)備開發(fā)鴻蒙

2022-11-22 15:15:46

Wi-Fi鴻蒙
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲一区二区三区自拍| 亚洲最大的免费| 动漫3d精品一区二区三区| 日本成人中文| 国产精品入口夜色视频大尺度 | 欧洲国内综合视频| 国产精品一区二区三区成人| 欧美伊人影院| 久久精品国产精品青草色艺| 国产乱码一区二区三区| 66av99| 欧美日韩一区二区在线| av影视在线| 久久久中文字幕| 在线综合亚洲| 十八禁视频网站在线观看| 懂色aⅴ精品一区二区三区蜜月| 7777kkk亚洲综合欧美网站| 欧美激情在线有限公司| 国产一区二区三区的电影 | 高清不卡亚洲| 日韩女优人人人人射在线视频| 午夜一区不卡| 亚洲成人福利在线| 51精品秘密在线观看| 日韩精品三级| 久久另类ts人妖一区二区| 国产精品拍天天在线| 日本久久久久久久久久久| 欧美sm极限捆绑bd| 奇米精品一区二区三区四区| 国产精品美女午夜av| 奇米777欧美一区二区| 男女午夜网站| 日韩区在线观看| 免费av一区二区三区四区| 一区精品在线| 欧美日韩中文在线| 成人在线视频免费看| a级国产乱理论片在线观看99| 91小视频在线观看| 午夜av在线播放| 国产成人亚洲综合| 国产精品一区二区三区四区| 在线免费黄色毛片| 欧美日韩爱爱视频| 捆绑调教美女网站视频一区| 在线播放av片| 久久久人成影片一区二区三区| 日本欧美韩国一区三区| 97久久精品人人做人人爽| 精品五月天堂| www.四虎成人| 国产精品亚洲天堂| 污片在线观看一区二区| 久久天天久久| 97久久久精品综合88久久| 91不卡在线观看| 成人网18免费网站| www一区二区www免费| 日韩欧美成人午夜| 国内精品伊人久久久| 男女日批视频在线观看| 欧美一区午夜视频在线观看| 久久国产电影| 黄色av观看| 欧美高清在线播放| 国产精品99久久久久久久女警| 黄色一级片在线观看| 国产欧美日韩中文字幕在线| 国产精品美女久久久久高潮| 亚洲精品伊人| 成人区一区二区| 亚洲精品一区二区三区四区高清| 女人香蕉久久**毛片精品| 高清色视频在线观看| 欧美亚洲国产另类| 欧美激情综合五月色丁香小说| 国产精品麻豆成人av电影艾秋| 国产精品一区在线免费观看| 精品91自产拍在线观看一区| 亚洲日韩视频| 日本成a人片在线观看| 91亚洲精品久久久| 黑人精品xxx一区| 日韩成人精品一区| 91精品久久久久久久久不口人| 丝袜亚洲另类欧美重口| 日韩欧美精品免费在线| 蜜桃视频一区二区三区在线观看| 一区二区三区四区精品视频| 午夜激情电影在线播放| 独立日3在线观看完整版| 日韩在线电影一区| 欧洲视频一区二区| 久久99视频精品| 五月婷婷丁香色| 欧美美最猛性xxxxxx| 色综合天天爱| 久久婷婷国产精品| 国产**成人网毛片九色| 91精品产国品一二三产区| 翔田千里亚洲一二三区| 精品视频在线播放色网色视频| 久久成人免费网| 成人国产精选| 性生交免费视频| 国产精品18久久久久久首页狼 | 91精品国产91久久综合桃花| 日韩精品免费视频人成| 亚洲十八**毛片| 男人添女人下面高潮视频| 久久久久久久久久久网站| 一片黄亚洲嫩模| 欧美人成在线| 国产二区三区在线| 综合操久久久| 久久久久久91| 姬川优奈aav一区二区| 在线视频精品| 丁香婷婷久久| 在线观看老湿视频福利| 欧美精品欧美精品系列c| 一本大道久久加勒比香蕉| 国产精品久久久久久久久免费桃花| 日韩欧美一区二区三区免费看| 成人免费视频| 热这里只有精品| 欧美亚洲国产视频| 在线播放中文一区| 91视频www| 一区二区三区在线观看免费| 涩涩视频在线播放| 国模无码视频一区二区三区| 国产精品伦子伦免费视频| 精品久久五月天| 国产精品美女久久久久高潮| 亚洲欧洲日本一区二区三区| 久久亚洲精品人成综合网| 日本1区2区3区中文字幕| 欧美日韩精品中文字幕一区二区| www日韩中文字幕在线看| 狠狠躁天天躁日日躁欧美| 激情欧美日韩一区二区| 精品国产乱码久久久久久果冻传媒 | 日韩欧美综合| 四虎免费av| 国产精品久久久久久福利| 久久av最新网址| 色综合一区二区日本韩国亚洲| 最新日本视频| 操bbb操bbb| 国产免费一区二区三区在线能观看 | 性欧美激情精品| 777亚洲妇女| 久久精品亚洲精品国产欧美 | 欧美日产国产成人免费图片| 欧美日韩另类字幕中文| 激情综合一区二区三区| 国产videos久久| 亚洲www免费| 九色国产在线观看| jizzjizzxxxx| 欧美裸体网站| 日韩av大片在线| 亚洲色图美腿丝袜| 亚洲精选一区| 狠狠爱免费视频| 国产精品99蜜臀久久不卡二区| 国产精品视频500部| 亚洲色图图片网| 日韩中文字幕无砖| 国产高清久久久| 91成人免费在线视频| 日本在线精品视频| 国产精品一区二区羞羞答答| 国产网站在线| 26uuu精品一区二区三区四区在线| 2019av中文字幕| 奇米777日韩| 久久久久久久久99精品| www插插插无码视频网站| 国产精华一区| 热久久免费视频精品| 永久免费看mv网站入口亚洲| 欧美精品精品一区| 一区二区三区欧美激情| 成人高清在线视频| 青青草国产精品亚洲专区无| 亚洲成人久久久久| 欧美成年黄网站色视频| 国产精品久久久毛片| 日韩精品综合在线| 欧洲精品久久| 国产一区二区免费电影| 国产日韩欧美在线视频观看| 欧美在线国产精品| 欧美精品精品精品精品免费| 日韩在线观看免费全集电视剧网站| 精品久久久久久无|