10a7ce71fSopenharmony_ci/* 20a7ce71fSopenharmony_ci * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED. 30a7ce71fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 40a7ce71fSopenharmony_ci * you may not use this file except in compliance with the License. 50a7ce71fSopenharmony_ci * You may obtain a copy of the License at 60a7ce71fSopenharmony_ci * 70a7ce71fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 80a7ce71fSopenharmony_ci * 90a7ce71fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 100a7ce71fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 110a7ce71fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120a7ce71fSopenharmony_ci * See the License for the specific language governing permissions and 130a7ce71fSopenharmony_ci * limitations under the License. 140a7ce71fSopenharmony_ci */ 150a7ce71fSopenharmony_ci 160a7ce71fSopenharmony_ci#include "wifi_softap.h" 170a7ce71fSopenharmony_ci#include "hi_wifi_api.h" 180a7ce71fSopenharmony_ci#include "lwip/ip_addr.h" 190a7ce71fSopenharmony_ci#include "lwip/netifapi.h" 200a7ce71fSopenharmony_ci 210a7ce71fSopenharmony_ci#define APP_INIT_VAP_NUM 2 220a7ce71fSopenharmony_ci#define APP_INIT_USR_NUM 2 230a7ce71fSopenharmony_ci 240a7ce71fSopenharmony_cistatic struct netif *g_lwipNetif = NULL; 250a7ce71fSopenharmony_ci 260a7ce71fSopenharmony_ci/* clear netif's ip, gateway and netmask */ 270a7ce71fSopenharmony_civoid HiSoftapResetAddr(const struct netif *pstLwipNetif) 280a7ce71fSopenharmony_ci{ 290a7ce71fSopenharmony_ci ip4_addr_t st_gw; 300a7ce71fSopenharmony_ci ip4_addr_t st_ipaddr; 310a7ce71fSopenharmony_ci ip4_addr_t st_netmask; 320a7ce71fSopenharmony_ci 330a7ce71fSopenharmony_ci if (pstLwipNetif == NULL) { 340a7ce71fSopenharmony_ci printf("hisi_reset_addr::Null param of netdev\r\n"); 350a7ce71fSopenharmony_ci return; 360a7ce71fSopenharmony_ci } 370a7ce71fSopenharmony_ci 380a7ce71fSopenharmony_ci IP4_ADDR(&st_ipaddr, 0, 0, 0, 0); 390a7ce71fSopenharmony_ci IP4_ADDR(&st_gw, 0, 0, 0, 0); 400a7ce71fSopenharmony_ci IP4_ADDR(&st_netmask, 0, 0, 0, 0); 410a7ce71fSopenharmony_ci 420a7ce71fSopenharmony_ci netifapi_netif_set_addr(pstLwipNetif, &st_ipaddr, &st_netmask, &st_gw); 430a7ce71fSopenharmony_ci} 440a7ce71fSopenharmony_ci 450a7ce71fSopenharmony_ciint HiWifiStartSoftap(void) 460a7ce71fSopenharmony_ci{ 470a7ce71fSopenharmony_ci int ret; 480a7ce71fSopenharmony_ci errno_t rc; 490a7ce71fSopenharmony_ci char ifname[WIFI_IFNAME_MAX_SIZE + 1] = {0}; 500a7ce71fSopenharmony_ci int len = sizeof(ifname); 510a7ce71fSopenharmony_ci hi_wifi_softap_config hapd_conf = {0}; 520a7ce71fSopenharmony_ci const unsigned char wifiVapResNum = APP_INIT_VAP_NUM; 530a7ce71fSopenharmony_ci const unsigned char wifiUserResNum = APP_INIT_USR_NUM; 540a7ce71fSopenharmony_ci ip4_addr_t st_gw; 550a7ce71fSopenharmony_ci ip4_addr_t st_ipaddr; 560a7ce71fSopenharmony_ci ip4_addr_t st_netmask; 570a7ce71fSopenharmony_ci ip4_addr_t st_port; 580a7ce71fSopenharmony_ci 590a7ce71fSopenharmony_ci rc = memcpy_s(hapd_conf.ssid, HI_WIFI_MAX_SSID_LEN + 1, "XXXXXXXX", 9); /* 9:ssid length */ 600a7ce71fSopenharmony_ci if (rc != EOK) { 610a7ce71fSopenharmony_ci return -1; 620a7ce71fSopenharmony_ci } 630a7ce71fSopenharmony_ci hapd_conf.authmode = HI_WIFI_SECURITY_OPEN; 640a7ce71fSopenharmony_ci hapd_conf.channel_num = 1; 650a7ce71fSopenharmony_ci 660a7ce71fSopenharmony_ci ret = hi_wifi_softap_start(&hapd_conf, ifname, &len); 670a7ce71fSopenharmony_ci if (ret != HISI_OK) { 680a7ce71fSopenharmony_ci printf("hi_wifi_softap_start\n"); 690a7ce71fSopenharmony_ci return -1; 700a7ce71fSopenharmony_ci } 710a7ce71fSopenharmony_ci 720a7ce71fSopenharmony_ci /* acquire netif for IP operation */ 730a7ce71fSopenharmony_ci g_lwipNetif = netifapi_netif_find(ifname); 740a7ce71fSopenharmony_ci if (g_lwipNetif == NULL) { 750a7ce71fSopenharmony_ci printf("%s: get netif failed\n", __FUNCTION__); 760a7ce71fSopenharmony_ci return -1; 770a7ce71fSopenharmony_ci } 780a7ce71fSopenharmony_ci 790a7ce71fSopenharmony_ci IP4_ADDR(&st_gw, 192, 168, 1, 1); /* input your IP for example: 192.168.1.1 */ 800a7ce71fSopenharmony_ci IP4_ADDR(&st_ipaddr, 192, 168, 1, 4); /* input your netmask for example: 192.168.4.1 */ 810a7ce71fSopenharmony_ci IP4_ADDR(&st_netmask, 255, 255, 255, 0); /* input your gateway for example: 255.255.255.0 */ 820a7ce71fSopenharmony_ci netifapi_netif_set_addr(g_lwipNetif, &st_ipaddr, &st_netmask, &st_gw); 830a7ce71fSopenharmony_ci 840a7ce71fSopenharmony_ci netifapi_dhcps_start(g_lwipNetif, 0, 0); 850a7ce71fSopenharmony_ci 860a7ce71fSopenharmony_ci return 0; 870a7ce71fSopenharmony_ci} 880a7ce71fSopenharmony_ci 890a7ce71fSopenharmony_civoid HiWifiStopSoftap(void) 900a7ce71fSopenharmony_ci{ 910a7ce71fSopenharmony_ci int ret; 920a7ce71fSopenharmony_ci 930a7ce71fSopenharmony_ci netifapi_dhcps_stop(g_lwipNetif); 940a7ce71fSopenharmony_ci HiSoftapResetAddr(g_lwipNetif); 950a7ce71fSopenharmony_ci 960a7ce71fSopenharmony_ci ret = hi_wifi_softap_stop(); 970a7ce71fSopenharmony_ci if (ret != HISI_OK) { 980a7ce71fSopenharmony_ci printf("failed to stop softap\n"); 990a7ce71fSopenharmony_ci } 1000a7ce71fSopenharmony_ci 1010a7ce71fSopenharmony_ci ret = hi_wifi_deinit(); 1020a7ce71fSopenharmony_ci if (ret != HISI_OK) { 1030a7ce71fSopenharmony_ci printf("failed to deinit wifi\n"); 1040a7ce71fSopenharmony_ci } 1050a7ce71fSopenharmony_ci 1060a7ce71fSopenharmony_ci g_lwipNetif = NULL; 1070a7ce71fSopenharmony_ci} 1080a7ce71fSopenharmony_ci 109