鸿蒙开发板Hi3861_Wifi的AP模式wifi连接_基于code-2.0-CANARY
2.0支持windows编译与上传,不需要ubuntu编译 环境搭建需要有耐心:
https://www.cnblogs.com/txwtech/p/15041927.html
首先学会点亮LED的实验
https://www.cnblogs.com/txwtech/p/15139405.html ———————————————— 版权声明:本文为CSDN博主「txwtech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/txwtech/article/details/120050588 ————————————————
开启热点供连接
wifihotspot/build.gn
# Copyright (c) 2020, HiHope Community.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
static_library("wifi_demo") {
sources = [
# "wifi_connecter.c",
# "wifi_starter.c",
"wifi_hotspot_demo.c",
]
include_dirs = [
"//utils/native/lite/include",
"//kernel/liteos_m/components/cmsis/2.0",
"//base/iot_hardware/interfaces/kits/wifiiot_lite",
"//foundation/communication/interfaces/kits/wifi_lite/wifiservice",
"//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include/",
"//foundation/communication/wifi_lite/interfaces/wifiservice",
]
}
wifihotspot/wifi_hotspot_demo.c
/*
* Copyright (c) 2020, HiHope Community.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include
#include
#include
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifi_hotspot.h"
#include "lwip/netifapi.h"
static volatile int g_hotspotStarted = 0;
static void OnHotspotStateChanged(int state)
{
printf("OnHotspotStateChanged: %d.\r\n", state);
if (state == WIFI_HOTSPOT_ACTIVE) {
g_hotspotStarted = 1;
} else {
g_hotspotStarted = 0;
}
}
static volatile int g_joinedStations = 0;
static void PrintStationInfo(StationInfo* info)
{
if (!info) return;
static char macAddress[32] = {0};
unsigned char* mac = info->macAddress;
snprintf(macAddress, sizeof(macAddress), "%02X:%02X:%02X:%02X:%02X:%02X",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
printf(" PrintStationInfo: mac=%s, reason=%d.\r\n", macAddress, info->disconnectedReason);
}
static void OnHotspotStaJoin(StationInfo* info)
{
g_joinedStations++;
PrintStationInfo(info);
printf("+OnHotspotStaJoin: active stations = %d.\r\n", g_joinedStations);
}
static void OnHotspotStaLeave(StationInfo* info)
{
g_joinedStations--;
PrintStationInfo(info);
printf("-OnHotspotStaLeave: active stations = %d.\r\n", g_joinedStations);
}
WifiEvent g_defaultWifiEventListener = {
.OnHotspotStaJoin = OnHotspotStaJoin,
.OnHotspotStaLeave = OnHotspotStaLeave,
.OnHotspotStateChanged = OnHotspotStateChanged,
};
static struct netif* g_iface = NULL;
int StartHotspot(const HotspotConfig* config)
{
WifiErrorCode errCode = WIFI_SUCCESS;
errCode = RegisterWifiEvent(&g_defaultWifiEventListener);
printf("RegisterWifiEvent: %d\r\n", errCode);
errCode = SetHotspotConfig(config);
printf("SetHotspotConfig: %d\r\n", errCode);
g_hotspotStarted = 0;
errCode = EnableHotspot();
printf("EnableHotspot: %d\r\n", errCode);
while (!g_hotspotStarted) {
osDelay(10);
}
printf("g_hotspotStarted = %d.\r\n", g_hotspotStarted);
g_iface = netifapi_netif_find("ap0");
if (g_iface) {
ip4_addr_t ipaddr;
ip4_addr_t gateway;
ip4_addr_t netmask;
IP4_ADDR(&ipaddr, 192, 168, 1, 1); /* input your IP for example: 192.168.1.1 */
IP4_ADDR(&gateway, 192, 168, 1, 1); /* input your gateway for example: 192.168.1.1 */
IP4_ADDR(&netmask, 255, 255, 255, 0); /* input your netmask for example: 255.255.255.0 */
err_t ret = netifapi_netif_set_addr(g_iface, &ipaddr, &netmask, &gateway);
printf("netifapi_netif_set_addr: %d\r\n", ret);
ret = netifapi_dhcps_start(g_iface, 0, 0); // 海思扩展的HDCP服务接口
printf("netifapi_dhcp_start: %d\r\n", ret);
}
return errCode;
}
void StopHotspot(void)
{
if (g_iface) {
err_t ret = netifapi_dhcps_stop(g_iface); // 海思扩展的HDCP服务接口
printf("netifapi_dhcps_stop: %d\r\n", ret);
}
WifiErrorCode errCode = UnRegisterWifiEvent(&g_defaultWifiEventListener);
printf("UnRegisterWifiEvent: %d\r\n", errCode);
errCode = DisableHotspot();
printf("EnableHotspot: %d\r\n", errCode);
}
void abcdefg(void)
{
printf("abce---ok");
}
static void WifiHotspotTask(void *arg)
{
(void)arg;
WifiErrorCode errCode;
HotspotConfig config = {0};
abcdefg();
// 准备AP的配置参数
strcpy(config.ssid, "鸿蒙hi3861-AP");
strcpy(config.preSharedKey, "12345678");
config.securityType = WIFI_SEC_TYPE_PSK;
config.band = HOTSPOT_BAND_TYPE_2G;
config.channelNum = 7;
osDelay(10);
printf("starting AP ...\r\n");
errCode = StartHotspot(&config);
printf("StartHotspot: %d\r\n", errCode);
int timeout = 360;
while (timeout--) {
printf("After %d seconds Ap will turn off!\r\n", timeout);
osDelay(100);
}
printf("stop AP ...\r\n");
StopHotspot();
printf("stop AP ...\r\n");
}
static void WifiHotspotDemo(void)
{
osThreadAttr_t attr;
attr.name = "WifiHotspotTask";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 10240;
attr.priority = osPriorityNormal;
if (osThreadNew(WifiHotspotTask, NULL, &attr) == NULL) {
printf("[WifiHotspotDemo] Falied to create WifiHotspotTask!\n");
}
}
//APP_FEATURE_INIT(WifiHotspotTask);
SYS_RUN(WifiHotspotTask);
app/build.gn
# Copyright (c) 2020, HiHope Community.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//build/lite/config/component/lite_component.gni")
lite_component("app") {
features = [
"wifihotspot:wifi_demo",
]
}