#include <stdio.h>
#include <string.h>
#include <assert.h>
+#include <pthread.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
extern void esp_dport_access_stall_other_cpu_start_wrap(void);
extern void esp_dport_access_stall_other_cpu_end_wrap(void);
+#define TAG "esp_adapter"
+
/*
If CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is enabled. Prefer to allocate a chunk of memory in SPIRAM firstly.
If failed, try to allocate it in internal memory then.
vSemaphoreDelete(semphr);
}
+static void wifi_thread_semphr_free(void* data)
+{
+ xSemaphoreHandle *sem = (xSemaphoreHandle*)(data);
+
+ if (sem) {
+ vSemaphoreDelete(sem);
+ }
+}
+
+static void * wifi_thread_semphr_get_wrapper(void)
+{
+ static bool s_wifi_thread_sem_key_init = false;
+ static pthread_key_t s_wifi_thread_sem_key;
+ xSemaphoreHandle sem = NULL;
+
+ if (s_wifi_thread_sem_key_init == false) {
+ if (0 != pthread_key_create(&s_wifi_thread_sem_key, wifi_thread_semphr_free)) {
+ return NULL;
+ }
+ s_wifi_thread_sem_key_init = true;
+ }
+
+ sem = pthread_getspecific(s_wifi_thread_sem_key);
+ if (!sem) {
+ sem = xSemaphoreCreateCounting(1, 0);
+ if (sem) {
+ pthread_setspecific(s_wifi_thread_sem_key, sem);
+ ESP_LOGV(TAG, "thread sem create: sem=%p", sem);
+ }
+ }
+
+ ESP_LOGV(TAG, "thread sem get: sem=%p", sem);
+ return (void*)sem;
+}
+
static int32_t IRAM_ATTR semphr_take_from_isr_wrapper(void *semphr, void *hptw)
{
return (int32_t)xSemaphoreTakeFromISR(semphr, hptw);
._semphr_delete = semphr_delete_wrapper,
._semphr_take = semphr_take_wrapper,
._semphr_give = semphr_give_wrapper,
+ ._wifi_thread_semphr_get = wifi_thread_semphr_get_wrapper,
._mutex_create = mutex_create_wrapper,
._recursive_mutex_create = recursive_mutex_create_wrapper,
._mutex_delete = mutex_delete_wrapper,
uint8_t mac[6]; /**< MAC address of the station which send probe request */
} wifi_event_ap_probe_req_rx_t;
+/**
+ * @brief WiFi ioctl command type
+ *
+ */
+typedef enum {
+ WIFI_IOCTL_SET_STA_HT2040_COEX = 1, /**< Set the configuration of STA's HT2040 coexist management */
+ WIFI_IOCTL_GET_STA_HT2040_COEX, /**< Get the configuration of STA's HT2040 coexist management */
+ WIFI_IOCTL_MAX,
+} wifi_ioctl_cmd_t;
+/**
+ * @brief Configuration for STA's HT2040 coexist management
+ *
+ */
+typedef struct {
+ int enable; /**< Indicate whether STA's HT2040 coexist management is enabled or not */
+} wifi_ht2040_coex_t;
+
+/**
+ * @brief Configuration for WiFi ioctl
+ *
+ */
+typedef struct {
+ union {
+ wifi_ht2040_coex_t ht2040_coex; /**< Configuration of STA's HT2040 coexist management */
+ } data; /**< Configuration of ioctl command */
+} wifi_ioctl_config_t;
#ifdef __cplusplus
}