esp32s3/wifi: add support to softAP (softAP and softAP + STA mode)
This commit is contained in:
parent
9a28cd2000
commit
d4b11a960f
@ -829,6 +829,12 @@ choice
|
||||
config ESP32S3_WIFI_STATION
|
||||
bool "Station mode"
|
||||
|
||||
config ESP32S3_WIFI_SOFTAP
|
||||
bool "SoftAP mode"
|
||||
|
||||
config ESP32S3_WIFI_STATION_SOFTAP
|
||||
bool "Station + SoftAP"
|
||||
|
||||
endchoice # ESP32S3 Wi-Fi mode
|
||||
|
||||
config ESP32S3_WIFI_STATIC_RXBUF_NUM
|
||||
|
@ -371,8 +371,29 @@ static bool g_sta_connected;
|
||||
/* Wi-Fi station TX done callback function */
|
||||
|
||||
static wifi_txdone_cb_t g_sta_txdone_cb;
|
||||
|
||||
/* Wi-Fi interface configuration */
|
||||
|
||||
static wifi_config_t g_sta_wifi_cfg;
|
||||
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
|
||||
/* If Wi-Fi SoftAP starts */
|
||||
|
||||
static bool g_softap_started;
|
||||
|
||||
/* Wi-Fi SoftAP TX done callback function */
|
||||
|
||||
static wifi_txdone_cb_t g_softap_txdone_cb;
|
||||
|
||||
/* Wi-Fi interface configuration */
|
||||
|
||||
static wifi_config_t g_softap_wifi_cfg;
|
||||
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
/* Device specific lock */
|
||||
|
||||
static spinlock_t g_lock;
|
||||
@ -2012,6 +2033,24 @@ static int esp_event_id_map(int event_id)
|
||||
break;
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
case WIFI_EVENT_AP_START:
|
||||
id = WIFI_ADPT_EVT_AP_START;
|
||||
break;
|
||||
|
||||
case WIFI_EVENT_AP_STOP:
|
||||
id = WIFI_ADPT_EVT_AP_STOP;
|
||||
break;
|
||||
|
||||
case WIFI_EVENT_AP_STACONNECTED:
|
||||
id = WIFI_ADPT_EVT_AP_STACONNECTED;
|
||||
break;
|
||||
|
||||
case WIFI_EVENT_AP_STADISCONNECTED:
|
||||
id = WIFI_ADPT_EVT_AP_STADISCONNECTED;
|
||||
break;
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
@ -2105,6 +2144,23 @@ static void esp_evt_work_cb(void *arg)
|
||||
break;
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_STA
|
||||
case WIFI_ADPT_EVT_AP_START:
|
||||
wlinfo("INFO: Wi-Fi softap start\n");
|
||||
break;
|
||||
|
||||
case WIFI_ADPT_EVT_AP_STOP:
|
||||
wlinfo("INFO: Wi-Fi softap stop\n");
|
||||
break;
|
||||
|
||||
case WIFI_ADPT_EVT_AP_STACONNECTED:
|
||||
wlinfo("INFO: Wi-Fi station join\n");
|
||||
break;
|
||||
|
||||
case WIFI_ADPT_EVT_AP_STADISCONNECTED:
|
||||
wlinfo("INFO: Wi-Fi station leave\n");
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -4642,14 +4698,23 @@ int esp_wifi_sta_start(void)
|
||||
wlinfo("Failed to stop Wi-Fi ret=%d\n", ret);
|
||||
}
|
||||
|
||||
mode = WIFI_MODE_STA;
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
if (g_softap_started)
|
||||
{
|
||||
mode = WIFI_MODE_APSTA;
|
||||
}
|
||||
else
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
{
|
||||
mode = WIFI_MODE_STA;
|
||||
}
|
||||
|
||||
ret = esp_wifi_set_mode(mode);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to set Wi-Fi mode=%d ret=%d\n", mode, ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout_set_mode;
|
||||
goto errout;
|
||||
}
|
||||
|
||||
ret = esp_wifi_start();
|
||||
@ -4657,17 +4722,14 @@ int esp_wifi_sta_start(void)
|
||||
{
|
||||
wlerr("Failed to start Wi-Fi with mode=%d ret=%d\n", mode, ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout_set_mode;
|
||||
goto errout;
|
||||
}
|
||||
|
||||
g_sta_started = true;
|
||||
|
||||
wlinfo("OK to start Wi-Fi station\n");
|
||||
|
||||
esp_wifi_lock(false);
|
||||
return OK;
|
||||
|
||||
errout_set_mode:
|
||||
errout:
|
||||
esp_wifi_lock(false);
|
||||
return ret;
|
||||
}
|
||||
@ -4701,10 +4763,35 @@ int esp_wifi_sta_stop(void)
|
||||
|
||||
g_sta_started = false;
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
if (g_softap_started)
|
||||
{
|
||||
ret = esp_wifi_set_mode(WIFI_MODE_AP);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to set Wi-Fi AP mode ret=%d\n", ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
ret = esp_wifi_start();
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to start Wi-Fi AP ret=%d\n", ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout;
|
||||
}
|
||||
}
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
wlinfo("OK to stop Wi-Fi station\n");
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
errout:
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
esp_wifi_lock(false);
|
||||
return OK;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -5101,7 +5188,7 @@ int esp_wifi_sta_connect(void)
|
||||
{
|
||||
wlerr("Failed to connect ret=%d\n", ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout_wifi_connect;
|
||||
goto errout;
|
||||
}
|
||||
|
||||
esp_wifi_lock(false);
|
||||
@ -5127,7 +5214,7 @@ int esp_wifi_sta_connect(void)
|
||||
|
||||
return OK;
|
||||
|
||||
errout_wifi_connect:
|
||||
errout:
|
||||
g_sta_reconnect = false;
|
||||
esp_wifi_lock(false);
|
||||
return ret;
|
||||
@ -5645,6 +5732,785 @@ int esp_wifi_sta_rssi(struct iwreq *iwr, bool set)
|
||||
}
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
/****************************************************************************
|
||||
* SoftAP functions
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_start
|
||||
*
|
||||
* Description:
|
||||
* Start Wi-Fi SoftAP.
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_start(void)
|
||||
{
|
||||
int ret;
|
||||
wifi_mode_t mode;
|
||||
|
||||
esp_wifi_lock(true);
|
||||
|
||||
ret = esp_wifi_stop();
|
||||
if (ret)
|
||||
{
|
||||
wlinfo("Failed to stop Wi-Fi ret=%d\n", ret);
|
||||
}
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_STA
|
||||
if (g_sta_started)
|
||||
{
|
||||
mode = WIFI_MODE_APSTA;
|
||||
}
|
||||
else
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
{
|
||||
mode = WIFI_MODE_AP;
|
||||
}
|
||||
|
||||
ret = esp_wifi_set_mode(mode);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to set Wi-Fi mode=%d ret=%d\n", mode, ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
ret = esp_wifi_start();
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to start Wi-Fi with mode=%d ret=%d\n", mode, ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
g_softap_started = true;
|
||||
|
||||
wlinfo("OK to start Wi-Fi SoftAP\n");
|
||||
|
||||
errout:
|
||||
esp_wifi_lock(false);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_stop
|
||||
*
|
||||
* Description:
|
||||
* Stop Wi-Fi SoftAP.
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_stop(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
esp_wifi_lock(true);
|
||||
|
||||
ret = esp_wifi_stop();
|
||||
if (ret)
|
||||
{
|
||||
wlinfo("Failed to stop Wi-Fi ret=%d\n", ret);
|
||||
}
|
||||
|
||||
g_softap_started = false;
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_STA
|
||||
if (g_sta_started)
|
||||
{
|
||||
ret = esp_wifi_set_mode(WIFI_MODE_STA);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to set Wi-Fi AP mode ret=%d\n", ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
ret = esp_wifi_start();
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to start Wi-Fi STA ret=%d\n", ret);
|
||||
ret = wifi_errno_trans(ret);
|
||||
goto errout;
|
||||
}
|
||||
}
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
wlinfo("OK to stop Wi-Fi SoftAP\n");
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_STA
|
||||
errout:
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
esp_wifi_lock(false);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_send_data
|
||||
*
|
||||
* Description:
|
||||
* Use Wi-Fi SoftAP interface to send 802.3 frame
|
||||
*
|
||||
* Input Parameters:
|
||||
* pbuf - Packet buffer pointer
|
||||
* len - Packet length
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_send_data(void *pbuf, size_t len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = esp_wifi_internal_tx(WIFI_IF_AP, pbuf, len);
|
||||
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_register_recv_cb
|
||||
*
|
||||
* Description:
|
||||
* Register Wi-Fi SoftAP receive packet callback function
|
||||
*
|
||||
* Input Parameters:
|
||||
* recv_cb - Receive callback function
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_register_recv_cb(int (*recv_cb)(void *buffer,
|
||||
uint16_t len,
|
||||
void *eb))
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_AP, (wifi_rxcb_t)recv_cb);
|
||||
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_register_txdone_cb
|
||||
*
|
||||
* Description:
|
||||
* Register the SoftAP TX done callback function.
|
||||
*
|
||||
* Input Parameters:
|
||||
* cb - The callback function
|
||||
*
|
||||
* Returned Value:
|
||||
* None
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void esp_wifi_softap_register_txdone_cb(wifi_txdone_cb_t cb)
|
||||
{
|
||||
g_softap_txdone_cb = cb;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_read_mac
|
||||
*
|
||||
* Description:
|
||||
* Read SoftAP interface MAC address from efuse
|
||||
*
|
||||
* Input Parameters:
|
||||
* mac - MAC address buffer pointer
|
||||
*
|
||||
* Returned Value:
|
||||
* 0 if success or -1 if fail
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_read_mac(uint8_t *mac)
|
||||
{
|
||||
return esp_read_mac(mac, ESP_MAC_WIFI_SOFTAP);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_password
|
||||
*
|
||||
* Description:
|
||||
* Set/Get Wi-Fi SoftAP password
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_password(struct iwreq *iwr, bool set)
|
||||
{
|
||||
int ret;
|
||||
int size;
|
||||
wifi_config_t wifi_cfg;
|
||||
struct iw_encode_ext *ext = iwr->u.encoding.pointer;
|
||||
uint8_t *pdata;
|
||||
uint8_t len;
|
||||
#ifdef CONFIG_DEBUG_WIRELESS_INFO
|
||||
char buf[PWD_MAX_LEN + 1];
|
||||
#endif
|
||||
|
||||
DEBUGASSERT(ext != NULL);
|
||||
|
||||
pdata = ext->key;
|
||||
len = ext->key_len;
|
||||
|
||||
if (set && len > PWD_MAX_LEN)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memset(&wifi_cfg, 0x0, sizeof(wifi_config_t));
|
||||
ret = esp_wifi_get_config(WIFI_IF_AP, &wifi_cfg);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to get Wi-Fi config data ret=%d\n", ret);
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
|
||||
pdata = ext->key;
|
||||
len = ext->key_len;
|
||||
if (set)
|
||||
{
|
||||
/* Clear the password field and copy the user password to it */
|
||||
|
||||
memset(wifi_cfg.ap.password, 0x0, PWD_MAX_LEN);
|
||||
if (len)
|
||||
{
|
||||
memcpy(wifi_cfg.ap.password, pdata, len);
|
||||
switch (ext->alg)
|
||||
{
|
||||
case IW_ENCODE_ALG_NONE:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_OPEN;
|
||||
break;
|
||||
|
||||
case IW_ENCODE_ALG_WEP:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WEP;
|
||||
break;
|
||||
|
||||
case IW_ENCODE_ALG_TKIP:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WPA_PSK;
|
||||
break;
|
||||
|
||||
case IW_ENCODE_ALG_CCMP:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WPA2_PSK;
|
||||
break;
|
||||
|
||||
case IW_ENCODE_ALG_PMK:
|
||||
case IW_ENCODE_ALG_AES_CMAC:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WPA_WPA2_PSK;
|
||||
break;
|
||||
|
||||
default:
|
||||
wlerr("Failed to transfer wireless authmode: %d",
|
||||
ext->alg);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
ret = esp_wifi_set_config(WIFI_IF_AP, &wifi_cfg);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to set Wi-Fi config data ret=%d\n", ret);
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
size = strnlen((char *)wifi_cfg.ap.password, PWD_MAX_LEN);
|
||||
if (len < size)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = size;
|
||||
memcpy(pdata, wifi_cfg.ap.password, len);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_WIRELESS_INFO
|
||||
memcpy(buf, pdata, len);
|
||||
buf[len] = 0;
|
||||
wlinfo("Wi-Fi SoftAP password=%s len=%d\n", buf, len);
|
||||
#endif
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_essid
|
||||
*
|
||||
* Description:
|
||||
* Set/Get Wi-Fi SoftAP ESSID
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_essid(struct iwreq *iwr, bool set)
|
||||
{
|
||||
int ret;
|
||||
int size;
|
||||
wifi_config_t wifi_cfg;
|
||||
struct iw_point *essid = &iwr->u.essid;
|
||||
uint8_t *pdata;
|
||||
uint8_t len;
|
||||
#ifdef CONFIG_DEBUG_WIRELESS_INFO
|
||||
char buf[SSID_MAX_LEN + 1];
|
||||
#endif
|
||||
|
||||
DEBUGASSERT(essid != NULL);
|
||||
|
||||
pdata = essid->pointer;
|
||||
len = essid->length;
|
||||
|
||||
if (set && len > SSID_MAX_LEN)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memset(&wifi_cfg, 0x0, sizeof(wifi_config_t));
|
||||
ret = esp_wifi_get_config(WIFI_IF_AP, &wifi_cfg);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to get Wi-Fi config data ret=%d\n", ret);
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
|
||||
if (set)
|
||||
{
|
||||
memset(wifi_cfg.ap.ssid, 0x0, SSID_MAX_LEN);
|
||||
memcpy(wifi_cfg.ap.ssid, pdata, len);
|
||||
wifi_cfg.ap.ssid_len = len;
|
||||
ret = esp_wifi_set_config(WIFI_IF_AP, &wifi_cfg);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to set Wi-Fi config data ret=%d\n", ret);
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
size = strnlen((char *)wifi_cfg.ap.ssid, SSID_MAX_LEN);
|
||||
if (len < size)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = size;
|
||||
memcpy(pdata, wifi_cfg.ap.ssid, len);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_WIRELESS_INFO
|
||||
memcpy(buf, pdata, len);
|
||||
buf[len] = 0;
|
||||
wlinfo("Wi-Fi SoftAP ssid=%s len=%d\n", buf, len);
|
||||
#endif
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_bssid
|
||||
*
|
||||
* Description:
|
||||
* Set/Get Wi-Fi softAP BSSID
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_bssid(struct iwreq *iwr, bool set)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_connect
|
||||
*
|
||||
* Description:
|
||||
* Trigger Wi-Fi SoftAP accept connection action
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_connect(void)
|
||||
{
|
||||
return OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_disconnect
|
||||
*
|
||||
* Description:
|
||||
* Trigger Wi-Fi SoftAP drop connection action
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_disconnect(void)
|
||||
{
|
||||
return OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_mode
|
||||
*
|
||||
* Description:
|
||||
* Set/Get Wi-Fi SoftAP mode code.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_mode(struct iwreq *iwr, bool set)
|
||||
{
|
||||
if (set == false)
|
||||
{
|
||||
iwr->u.mode = IW_MODE_MASTER;
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_auth
|
||||
*
|
||||
* Description:
|
||||
* Set/get authentication mode params.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_auth(struct iwreq *iwr, bool set)
|
||||
{
|
||||
int ret;
|
||||
int cmd;
|
||||
wifi_config_t wifi_cfg;
|
||||
|
||||
if (set)
|
||||
{
|
||||
memset(&wifi_cfg, 0x0, sizeof(wifi_config_t));
|
||||
ret = esp_wifi_get_config(WIFI_IF_AP, &wifi_cfg);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to get Wi-Fi config data ret=%d\n", ret);
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
|
||||
cmd = iwr->u.param.flags & IW_AUTH_INDEX;
|
||||
switch (cmd)
|
||||
{
|
||||
case IW_AUTH_WPA_VERSION:
|
||||
{
|
||||
switch (iwr->u.param.value)
|
||||
{
|
||||
case IW_AUTH_WPA_VERSION_DISABLED:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_OPEN;
|
||||
break;
|
||||
|
||||
case IW_AUTH_WPA_VERSION_WPA:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WPA_PSK;
|
||||
break;
|
||||
|
||||
case IW_AUTH_WPA_VERSION_WPA2:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WPA2_PSK;
|
||||
break;
|
||||
|
||||
default:
|
||||
wlerr("Invalid wpa version %" PRId32 "\n",
|
||||
iwr->u.param.value);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case IW_AUTH_CIPHER_PAIRWISE:
|
||||
case IW_AUTH_CIPHER_GROUP:
|
||||
{
|
||||
switch (iwr->u.param.value)
|
||||
{
|
||||
case IW_AUTH_CIPHER_NONE:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_OPEN;
|
||||
break;
|
||||
|
||||
case IW_AUTH_CIPHER_WEP40:
|
||||
case IW_AUTH_CIPHER_WEP104:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WEP;
|
||||
break;
|
||||
|
||||
case IW_AUTH_CIPHER_TKIP:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WPA_PSK;
|
||||
break;
|
||||
|
||||
case IW_AUTH_CIPHER_CCMP:
|
||||
case IW_AUTH_CIPHER_AES_CMAC:
|
||||
wifi_cfg.ap.authmode = WIFI_AUTH_WPA2_PSK;
|
||||
break;
|
||||
|
||||
default:
|
||||
wlerr("Invalid cipher mode %" PRId32 "\n",
|
||||
iwr->u.param.value);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case IW_AUTH_KEY_MGMT:
|
||||
case IW_AUTH_TKIP_COUNTERMEASURES:
|
||||
case IW_AUTH_DROP_UNENCRYPTED:
|
||||
case IW_AUTH_80211_AUTH_ALG:
|
||||
case IW_AUTH_WPA_ENABLED:
|
||||
case IW_AUTH_RX_UNENCRYPTED_EAPOL:
|
||||
case IW_AUTH_ROAMING_CONTROL:
|
||||
case IW_AUTH_PRIVACY_INVOKED:
|
||||
default:
|
||||
wlerr("Unknown cmd %d\n", cmd);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = esp_wifi_set_config(WIFI_IF_AP, &wifi_cfg);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to set Wi-Fi config data ret=%d\n", ret);
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_freq
|
||||
*
|
||||
* Description:
|
||||
* Set/Get SoftAP frequency.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_freq(struct iwreq *iwr, bool set)
|
||||
{
|
||||
int ret;
|
||||
wifi_config_t wifi_cfg;
|
||||
|
||||
memset(&wifi_cfg, 0x0, sizeof(wifi_config_t));
|
||||
ret = esp_wifi_get_config(WIFI_IF_AP, &wifi_cfg);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to get Wi-Fi config data ret=%d\n", ret);
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
|
||||
if (set)
|
||||
{
|
||||
int channel = esp_freq_to_channel(iwr->u.freq.m);
|
||||
|
||||
wifi_cfg.ap.channel = channel;
|
||||
|
||||
ret = esp_wifi_set_config(WIFI_IF_AP, &wifi_cfg);
|
||||
if (ret)
|
||||
{
|
||||
wlerr("Failed to set Wi-Fi config data ret=%d\n", ret);
|
||||
return wifi_errno_trans(ret);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
iwr->u.freq.flags = IW_FREQ_FIXED;
|
||||
iwr->u.freq.e = 0;
|
||||
iwr->u.freq.m = 2407 + 5 * wifi_cfg.ap.channel;
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_get_bitrate
|
||||
*
|
||||
* Description:
|
||||
* Get SoftAP default bit rate (Mbps).
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_bitrate(struct iwreq *iwr, bool set)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_txpower
|
||||
*
|
||||
* Description:
|
||||
* Get SoftAP transmit power (dBm).
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_txpower(struct iwreq *iwr, bool set)
|
||||
{
|
||||
return esp_wifi_sta_txpower(iwr, set);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_channel
|
||||
*
|
||||
* Description:
|
||||
* Get SoftAP range of channel parameters.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_channel(struct iwreq *iwr, bool set)
|
||||
{
|
||||
return esp_wifi_sta_channel(iwr, set);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_country
|
||||
*
|
||||
* Description:
|
||||
* Configure country info.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_country(struct iwreq *iwr, bool set)
|
||||
{
|
||||
return esp_wifi_sta_country(iwr, set);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_rssi
|
||||
*
|
||||
* Description:
|
||||
* Get Wi-Fi sensitivity (dBm).
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_rssi(struct iwreq *iwr, bool set)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_stop_callback
|
||||
*
|
||||
|
@ -49,6 +49,16 @@ extern "C"
|
||||
# define ESP32S3_WLAN_HAS_STA
|
||||
# define ESP32S3_WLAN_STA_DEVNO 0
|
||||
# define ESP32S3_WLAN_DEVS 1
|
||||
#elif defined(CONFIG_ESP32S3_WIFI_SOFTAP)
|
||||
# define ESP32S3_WLAN_HAS_SOFTAP
|
||||
# define ESP32S3_WLAN_SOFTAP_DEVNO 0
|
||||
# define ESP32S3_WLAN_DEVS 1
|
||||
#elif defined(CONFIG_ESP32S3_WIFI_STATION_SOFTAP)
|
||||
# define ESP32S3_WLAN_HAS_STA
|
||||
# define ESP32S3_WLAN_HAS_SOFTAP
|
||||
# define ESP32S3_WLAN_STA_DEVNO 0
|
||||
# define ESP32S3_WLAN_SOFTAP_DEVNO 1
|
||||
# define ESP32S3_WLAN_DEVS 2
|
||||
#endif
|
||||
|
||||
#define SSID_MAX_LEN (32)
|
||||
@ -476,6 +486,344 @@ int esp_wifi_sta_country(struct iwreq *iwr, bool set);
|
||||
int esp_wifi_sta_rssi(struct iwreq *iwr, bool set);
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_start
|
||||
*
|
||||
* Description:
|
||||
* Start Wi-Fi softAP.
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_start(void);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_stop
|
||||
*
|
||||
* Description:
|
||||
* Stop Wi-Fi softAP.
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_stop(void);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_send_data
|
||||
*
|
||||
* Description:
|
||||
* Use Wi-Fi softAP interface to send 802.3 frame
|
||||
*
|
||||
* Input Parameters:
|
||||
* pbuf - Packet buffer pointer
|
||||
* len - Packet length
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_send_data(void *pbuf, size_t len);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_register_recv_cb
|
||||
*
|
||||
* Description:
|
||||
* Regitser Wi-Fi softAP receive packet callback function
|
||||
*
|
||||
* Input Parameters:
|
||||
* recv_cb - Receive callback function
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_register_recv_cb(int (*recv_cb)(void *buffer,
|
||||
uint16_t len,
|
||||
void *eb));
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_register_txdone_cb
|
||||
*
|
||||
* Description:
|
||||
* Register the softAP TX done callback function.
|
||||
*
|
||||
* Input Parameters:
|
||||
* cb - The callback function
|
||||
*
|
||||
* Returned Value:
|
||||
* None
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void esp_wifi_softap_register_txdone_cb(wifi_txdone_cb_t cb);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_read_mac
|
||||
*
|
||||
* Description:
|
||||
* Read softAP interface MAC address from efuse
|
||||
*
|
||||
* Input Parameters:
|
||||
* mac - MAC address buffer pointer
|
||||
*
|
||||
* Returned Value:
|
||||
* 0 if success or -1 if fail
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_read_mac(uint8_t *mac);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_password
|
||||
*
|
||||
* Description:
|
||||
* Set/Get Wi-Fi SoftAP password
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_password(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_essid
|
||||
*
|
||||
* Description:
|
||||
* Set/Get Wi-Fi SoftAP ESSID
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_essid(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_bssid
|
||||
*
|
||||
* Description:
|
||||
* Set/Get Wi-Fi softAP BSSID
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_bssid(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_connect
|
||||
*
|
||||
* Description:
|
||||
* Trigger Wi-Fi softAP accept connection action
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_connect(void);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_disconnect
|
||||
*
|
||||
* Description:
|
||||
* Trigger Wi-Fi softAP drop connection action
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_disconnect(void);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_mode
|
||||
*
|
||||
* Description:
|
||||
* Set/Get Wi-Fi SoftAP mode code.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_mode(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_auth
|
||||
*
|
||||
* Description:
|
||||
* Set/Get authentication mode params.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_auth(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_freq
|
||||
*
|
||||
* Description:
|
||||
* Set/Get SoftAP frequency.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_freq(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_get_bitrate
|
||||
*
|
||||
* Description:
|
||||
* Get SoftAP default bit rate (Mbps).
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_bitrate(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_txpower
|
||||
*
|
||||
* Description:
|
||||
* Get SoftAP transmit power (dBm).
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_txpower(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_channel
|
||||
*
|
||||
* Description:
|
||||
* Get SoftAP range of channel parameters.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_channel(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_country
|
||||
*
|
||||
* Description:
|
||||
* Configure country info.
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_country(struct iwreq *iwr, bool set);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_softap_rssi
|
||||
*
|
||||
* Description:
|
||||
* Get Wi-Fi sensitivity (dBm).
|
||||
*
|
||||
* Input Parameters:
|
||||
* iwr - The argument of the ioctl cmd
|
||||
* set - true: set data; false: get data
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success (positive non-zero values are cmd-specific)
|
||||
* Negated errno returned on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int esp_wifi_softap_rssi(struct iwreq *iwr, bool set);
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_wifi_stop_callback
|
||||
*
|
||||
|
@ -175,6 +175,29 @@ static const struct wlan_ops g_sta_ops =
|
||||
};
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
static const struct wlan_ops g_softap_ops =
|
||||
{
|
||||
.start = esp_wifi_softap_start,
|
||||
.send = esp_wifi_softap_send_data,
|
||||
.essid = esp_wifi_softap_essid,
|
||||
.bssid = esp_wifi_softap_bssid,
|
||||
.passwd = esp_wifi_softap_password,
|
||||
.mode = esp_wifi_softap_mode,
|
||||
.auth = esp_wifi_softap_auth,
|
||||
.freq = esp_wifi_softap_freq,
|
||||
.bitrate = esp_wifi_softap_bitrate,
|
||||
.txpower = esp_wifi_softap_txpower,
|
||||
.channel = esp_wifi_softap_channel,
|
||||
.country = esp_wifi_softap_country,
|
||||
.rssi = esp_wifi_softap_rssi,
|
||||
.connect = esp_wifi_softap_connect,
|
||||
.disconnect = esp_wifi_softap_disconnect,
|
||||
.event = esp_wifi_notify_subscribe,
|
||||
.stop = esp_wifi_softap_stop
|
||||
};
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
/****************************************************************************
|
||||
* Private Function Prototypes
|
||||
****************************************************************************/
|
||||
@ -1347,7 +1370,6 @@ static int wlan_sta_rx_done(void *buffer, uint16_t len, void *eb)
|
||||
* station sending next packet.
|
||||
*
|
||||
* Input Parameters:
|
||||
* ifidx - The interface id that the tx callback has been triggered from.
|
||||
* data - Pointer to the data transmitted.
|
||||
* len - Length of the data transmitted.
|
||||
* status - True if data was transmitted successfully or false if failed.
|
||||
@ -1366,10 +1388,59 @@ static void wlan_sta_tx_done(uint8_t *data, uint16_t *len, bool status)
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
* Function: wlan_softap_rx_done
|
||||
*
|
||||
* Description:
|
||||
* Wi-Fi softAP RX done callback function. If this is called, it means
|
||||
* softAP receiveing packet.
|
||||
*
|
||||
* Input Parameters:
|
||||
* buffer - Wi-Fi received packet buffer
|
||||
* len - Length of received packet
|
||||
* eb - Wi-Fi receive callback input eb pointer
|
||||
*
|
||||
* Returned Value:
|
||||
* 0 on success or a negated errno on failure
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_STA
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
static int wlan_softap_rx_done(void *buffer, uint16_t len, void *eb)
|
||||
{
|
||||
struct wlan_priv_s *priv = &g_wlan_priv[ESP32S3_WLAN_SOFTAP_DEVNO];
|
||||
|
||||
return wlan_rx_done(priv, buffer, len, eb);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: wlan_softap_tx_done
|
||||
*
|
||||
* Description:
|
||||
* Wi-Fi softAP TX done callback function. If this is called, it means
|
||||
* softAP sending next packet.
|
||||
*
|
||||
* Input Parameters:
|
||||
* ifidx - The interface ID that the TX callback has been triggered from.
|
||||
* data - Pointer to the data transmitted.
|
||||
* len - Length of the data transmitted.
|
||||
* status - True if data was transmitted successfully or false if failed.
|
||||
*
|
||||
* Returned Value:
|
||||
* None
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void wlan_softap_tx_done(uint8_t *data, uint16_t *len, bool status)
|
||||
{
|
||||
struct wlan_priv_s *priv = &g_wlan_priv[ESP32S3_WLAN_SOFTAP_DEVNO];
|
||||
|
||||
wlan_tx_done(priv);
|
||||
}
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp32s3_wlan_sta_set_linkstatus
|
||||
@ -1387,6 +1458,7 @@ static void wlan_sta_tx_done(uint8_t *data, uint16_t *len, bool status)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_STA
|
||||
int esp32s3_wlan_sta_set_linkstatus(bool linkstatus)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
@ -1471,4 +1543,65 @@ int esp32s3_wlan_sta_initialize(void)
|
||||
}
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp32s3_wlan_softap_initialize
|
||||
*
|
||||
* Description:
|
||||
* Initialize the ESP32-S3 WLAN softAP netcard driver
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success; Negated errno on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
int esp32s3_wlan_softap_initialize(void)
|
||||
{
|
||||
int ret;
|
||||
uint8_t eth_mac[6];
|
||||
|
||||
ret = esp_wifi_adapter_init();
|
||||
if (ret < 0)
|
||||
{
|
||||
nerr("ERROR: Initialize Wi-Fi adapter error: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = esp_wifi_softap_read_mac(eth_mac);
|
||||
if (ret < 0)
|
||||
{
|
||||
nerr("ERROR: Failed to read MAC address\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ninfo("Wi-Fi softAP MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||
eth_mac[0], eth_mac[1], eth_mac[2],
|
||||
eth_mac[3], eth_mac[4], eth_mac[5]);
|
||||
|
||||
ret = esp32s3_net_initialize(ESP32S3_WLAN_SOFTAP_DEVNO, eth_mac,
|
||||
&g_softap_ops);
|
||||
if (ret < 0)
|
||||
{
|
||||
nerr("ERROR: Failed to initialize net\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = esp_wifi_softap_register_recv_cb(wlan_softap_rx_done);
|
||||
if (ret < 0)
|
||||
{
|
||||
nerr("ERROR: Failed to register RX callback\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
esp_wifi_softap_register_txdone_cb(wlan_softap_tx_done);
|
||||
|
||||
ninfo("INFO: Initialize Wi-Fi softAP net success\n");
|
||||
|
||||
return OK;
|
||||
}
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
#endif /* CONFIG_ESP32S3_WIFI */
|
||||
|
@ -83,6 +83,24 @@ int esp32s3_wlan_sta_set_linkstatus(bool linkstatus);
|
||||
int esp32s3_wlan_sta_initialize(void);
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp32s3_wlan_softap_initialize
|
||||
*
|
||||
* Description:
|
||||
* Initialize the ESP32-S3 WLAN softAP netcard driver
|
||||
*
|
||||
* Input Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success; Negated errno on failure.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
int esp32s3_wlan_softap_initialize(void);
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
#endif /* CONFIG_ESP32S3_WIFI */
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -68,6 +68,15 @@ int board_wlan_init(void)
|
||||
}
|
||||
#endif /* ESP32S3_WLAN_HAS_STA */
|
||||
|
||||
#ifdef ESP32S3_WLAN_HAS_SOFTAP
|
||||
ret = esp32s3_wlan_softap_initialize();
|
||||
if (ret)
|
||||
{
|
||||
wlerr("ERROR: Failed to initialize Wi-Fi softAP\n");
|
||||
return ret;
|
||||
}
|
||||
#endif /* ESP32S3_WLAN_HAS_SOFTAP */
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,86 @@
|
||||
#
|
||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
|
||||
#
|
||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
|
||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
|
||||
# modifications.
|
||||
#
|
||||
# CONFIG_ARCH_LEDS is not set
|
||||
# CONFIG_NDEBUG is not set
|
||||
# CONFIG_NSH_ARGCAT is not set
|
||||
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
|
||||
CONFIG_ALLOW_BSD_COMPONENTS=y
|
||||
CONFIG_ARCH="xtensa"
|
||||
CONFIG_ARCH_BOARD="esp32s3-devkit"
|
||||
CONFIG_ARCH_BOARD_COMMON=y
|
||||
CONFIG_ARCH_BOARD_ESP32S3_DEVKIT=y
|
||||
CONFIG_ARCH_CHIP="esp32s3"
|
||||
CONFIG_ARCH_CHIP_ESP32S3=y
|
||||
CONFIG_ARCH_CHIP_ESP32S3WROOM1=y
|
||||
CONFIG_ARCH_INTERRUPTSTACK=2048
|
||||
CONFIG_ARCH_STACKDUMP=y
|
||||
CONFIG_ARCH_XTENSA=y
|
||||
CONFIG_BOARD_LOOPSPERMSEC=16717
|
||||
CONFIG_BUILTIN=y
|
||||
CONFIG_DEFAULT_TASK_STACKSIZE=4096
|
||||
CONFIG_DRIVERS_IEEE80211=y
|
||||
CONFIG_DRIVERS_WIRELESS=y
|
||||
CONFIG_ESP32S3_RT_TIMER_TASK_STACK_SIZE=4096
|
||||
CONFIG_ESP32S3_SPIFLASH=y
|
||||
CONFIG_ESP32S3_SPIFLASH_SPIFFS=y
|
||||
CONFIG_ESP32S3_UART0=y
|
||||
CONFIG_ESP32S3_WIFI=y
|
||||
CONFIG_ESP32S3_WIFI_SAVE_PARAM=y
|
||||
CONFIG_ESP32S3_WIFI_STATION_SOFTAP=y
|
||||
CONFIG_EXAMPLES_DHCPD=y
|
||||
CONFIG_EXAMPLES_RANDOM=y
|
||||
CONFIG_FS_PROCFS=y
|
||||
CONFIG_IDLETHREAD_STACKSIZE=3072
|
||||
CONFIG_INIT_ENTRYPOINT="nsh_main"
|
||||
CONFIG_INIT_STACKSIZE=8192
|
||||
CONFIG_INTELHEX_BINARY=y
|
||||
CONFIG_IOB_NBUFFERS=124
|
||||
CONFIG_IOB_THROTTLE=24
|
||||
CONFIG_NAME_MAX=48
|
||||
CONFIG_NETDB_DNSCLIENT=y
|
||||
CONFIG_NETDEV_LATEINIT=y
|
||||
CONFIG_NETDEV_PHY_IOCTL=y
|
||||
CONFIG_NETDEV_WIRELESS_IOCTL=y
|
||||
CONFIG_NETUTILS_DHCPD=y
|
||||
CONFIG_NETUTILS_IPERF=y
|
||||
CONFIG_NET_BROADCAST=y
|
||||
CONFIG_NET_ETH_PKTSIZE=1514
|
||||
CONFIG_NET_ICMP=y
|
||||
CONFIG_NET_ICMP_SOCKET=y
|
||||
CONFIG_NET_TCP=y
|
||||
CONFIG_NET_TCP_DELAYED_ACK=y
|
||||
CONFIG_NET_TCP_WRITE_BUFFERS=y
|
||||
CONFIG_NET_UDP=y
|
||||
CONFIG_NET_UDP_WRITE_BUFFERS=y
|
||||
CONFIG_NSH_ARCHINIT=y
|
||||
CONFIG_NSH_BUILTIN_APPS=y
|
||||
CONFIG_NSH_FILEIOSIZE=512
|
||||
CONFIG_NSH_LINELEN=64
|
||||
CONFIG_NSH_READLINE=y
|
||||
CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048
|
||||
CONFIG_PREALLOC_TIMERS=4
|
||||
CONFIG_PTHREAD_MUTEX_TYPES=y
|
||||
CONFIG_RAM_SIZE=114688
|
||||
CONFIG_RAM_START=0x20000000
|
||||
CONFIG_RR_INTERVAL=200
|
||||
CONFIG_SCHED_LPWORK=y
|
||||
CONFIG_SCHED_WAITPID=y
|
||||
CONFIG_SIG_DEFAULT=y
|
||||
CONFIG_START_DAY=6
|
||||
CONFIG_START_MONTH=12
|
||||
CONFIG_START_YEAR=2011
|
||||
CONFIG_SYSTEM_DHCPC_RENEW=y
|
||||
CONFIG_SYSTEM_NSH=y
|
||||
CONFIG_SYSTEM_PING=y
|
||||
CONFIG_TIMER=y
|
||||
CONFIG_TLS_TASK_NELEM=4
|
||||
CONFIG_UART0_SERIAL_CONSOLE=y
|
||||
CONFIG_WIRELESS=y
|
||||
CONFIG_WIRELESS_WAPI=y
|
||||
CONFIG_WIRELESS_WAPI_CMDTOOL=y
|
||||
CONFIG_WIRELESS_WAPI_STACKSIZE=8192
|
Loading…
Reference in New Issue
Block a user