mirror of
https://github.com/0xFEEDC0DE64/arduino-esp32.git
synced 2025-06-29 20:10:59 +02:00
Update IDF to aaf1239 (#1539)
* fix sdmmc config * Fix warnings in EEPROM from @Curclamas * remove leftover TAG in EEPROM * Initial add of @stickbreaker i2c * Add log_n * fix warnings when log is off * i2c code clean up and reorganization * add flags to interrupt allocator * fix sdmmc config * Fix warnings in EEPROM from @Curclamas * remove leftover TAG in EEPROM * fix errors with latest IDF * fix debug optimization (#1365) incorrect optimization for debugging tick markers. * Fix some missing BT header * Change BTSerial log calls * Update BLE lib * Arduino-ESP32 release management scripted (#1515) * Calculate an absolute path for a custom partitions table (#1452) * * Arduino-ESP32 release management scripted (ready-to-merge) * * secure env for espressif/arduino-esp32 * * build tests enabled * gitter webhook enabled * * gitter room link fixed * better comment * * filepaths fixed * BT Serial adjustments * * don't run sketch builds & tests for tagged builds * Return false from WiFi.hostByName() if hostname is not resolved * Free BT Memory when BT is not used * WIFI_MODE_NULL is not supported anymore * Select some key examples to build with PlatformIO to save some time * Update BLE lib * Fixed BLE lib * Major WiFi overhaul - auto reconnect on connection loss now works - moved to event groups - some code clean up and procedure optimizations - new methods to get a more elaborate system ststus * Add cmake tests to travis * Add initial AsyncUDP * Add NetBIOS lib and fix CMake includes * Add Initial WebServer * Fix WebServer and examples * travis not quiting on build fail * Try different travis build * Update IDF to aaf1239 * Fix WPS Example * fix script permission and add some fail tests to sketch builder * Add missing space in WiFiClient::write(Stream &stream)
This commit is contained in:
@ -47,4 +47,12 @@
|
||||
// Forces read-only data into RTC slow memory. See "docs/deep-sleep-stub.rst"
|
||||
#define RTC_RODATA_ATTR __attribute__((section(".rtc.rodata")))
|
||||
|
||||
// Forces data into noinit section to avoid initialization after restart.
|
||||
#define __NOINIT_ATTR __attribute__((section(".noinit")))
|
||||
|
||||
// Forces data into RTC slow memory of .noinit section.
|
||||
// Any variable marked with this attribute will keep its value
|
||||
// after restart or during a deep sleep / wake cycle.
|
||||
#define RTC_NOINIT_ATTR __attribute__((section(".rtc_noinit")))
|
||||
|
||||
#endif /* __ESP_ATTR_H__ */
|
||||
|
50
tools/sdk/include/esp32/esp_dbg_stubs.h
Normal file
50
tools/sdk/include/esp32/esp_dbg_stubs.h
Normal file
@ -0,0 +1,50 @@
|
||||
// Copyright 2017 Espressif Systems (Shanghai) PTE LTD
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#ifndef ESP_DBG_STUBS_H_
|
||||
#define ESP_DBG_STUBS_H_
|
||||
|
||||
#include "esp_err.h"
|
||||
|
||||
/**
|
||||
* Debug stubs entries IDs
|
||||
*/
|
||||
typedef enum {
|
||||
ESP_DBG_STUB_CONTROL_DATA, ///< stubs descriptor entry
|
||||
ESP_DBG_STUB_ENTRY_FIRST,
|
||||
ESP_DBG_STUB_ENTRY_GCOV ///< GCOV entry
|
||||
= ESP_DBG_STUB_ENTRY_FIRST,
|
||||
ESP_DBG_STUB_ENTRY_MAX
|
||||
} esp_dbg_stub_id_t;
|
||||
|
||||
/**
|
||||
* @brief Initializes debug stubs.
|
||||
*
|
||||
* @note Must be called after esp_apptrace_init() if app tracing is enabled.
|
||||
*/
|
||||
void esp_dbg_stubs_init(void);
|
||||
|
||||
/**
|
||||
* @brief Initializes application tracing module.
|
||||
*
|
||||
* @note Should be called before any esp_apptrace_xxx call.
|
||||
*
|
||||
* @param id Stub ID.
|
||||
* @param entry Stub entry. Usually it is stub entry function address,
|
||||
* but can be any value meaningfull for OpenOCD command/code.
|
||||
*
|
||||
* @return ESP_OK on success, otherwise see esp_err_t
|
||||
*/
|
||||
esp_err_t esp_dbg_stub_entry_set(esp_dbg_stub_id_t id, uint32_t entry);
|
||||
|
||||
#endif //ESP_DBG_STUBS_H_
|
@ -26,7 +26,9 @@ void esp_dport_access_stall_other_cpu_end(void);
|
||||
void esp_dport_access_int_init(void);
|
||||
void esp_dport_access_int_pause(void);
|
||||
void esp_dport_access_int_resume(void);
|
||||
|
||||
void esp_dport_access_read_buffer(uint32_t *buff_out, uint32_t address, uint32_t num_words);
|
||||
uint32_t esp_dport_access_reg_read(uint32_t reg);
|
||||
uint32_t esp_dport_access_sequence_reg_read(uint32_t reg);
|
||||
//This routine does not stop the dport routines in any way that is recoverable. Please
|
||||
//only call in case of panic().
|
||||
void esp_dport_access_int_abort(void);
|
||||
@ -34,9 +36,13 @@ void esp_dport_access_int_abort(void);
|
||||
#if defined(BOOTLOADER_BUILD) || defined(CONFIG_FREERTOS_UNICORE) || !defined(ESP_PLATFORM)
|
||||
#define DPORT_STALL_OTHER_CPU_START()
|
||||
#define DPORT_STALL_OTHER_CPU_END()
|
||||
#define DPORT_INTERRUPT_DISABLE()
|
||||
#define DPORT_INTERRUPT_RESTORE()
|
||||
#else
|
||||
#define DPORT_STALL_OTHER_CPU_START() esp_dport_access_stall_other_cpu_start()
|
||||
#define DPORT_STALL_OTHER_CPU_END() esp_dport_access_stall_other_cpu_end()
|
||||
#define DPORT_INTERRUPT_DISABLE() unsigned int intLvl = XTOS_SET_INTLEVEL(XCHAL_EXCM_LEVEL)
|
||||
#define DPORT_INTERRUPT_RESTORE() XTOS_RESTORE_JUST_INTLEVEL(intLvl)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -24,21 +24,20 @@ extern "C" {
|
||||
typedef int32_t esp_err_t;
|
||||
|
||||
/* Definitions for error constants. */
|
||||
#define ESP_OK 0 /*!< esp_err_t value indicating success (no error) */
|
||||
#define ESP_FAIL -1 /*!< Generic esp_err_t code indicating failure */
|
||||
|
||||
#define ESP_OK 0
|
||||
#define ESP_FAIL -1
|
||||
|
||||
#define ESP_ERR_NO_MEM 0x101
|
||||
#define ESP_ERR_INVALID_ARG 0x102
|
||||
#define ESP_ERR_INVALID_STATE 0x103
|
||||
#define ESP_ERR_INVALID_SIZE 0x104
|
||||
#define ESP_ERR_NOT_FOUND 0x105
|
||||
#define ESP_ERR_NOT_SUPPORTED 0x106
|
||||
#define ESP_ERR_TIMEOUT 0x107
|
||||
#define ESP_ERR_INVALID_RESPONSE 0x108
|
||||
#define ESP_ERR_INVALID_CRC 0x109
|
||||
#define ESP_ERR_INVALID_VERSION 0x10A
|
||||
#define ESP_ERR_INVALID_MAC 0x10B
|
||||
#define ESP_ERR_NO_MEM 0x101 /*!< Out of memory */
|
||||
#define ESP_ERR_INVALID_ARG 0x102 /*!< Invalid argument */
|
||||
#define ESP_ERR_INVALID_STATE 0x103 /*!< Invalid state */
|
||||
#define ESP_ERR_INVALID_SIZE 0x104 /*!< Invalid size */
|
||||
#define ESP_ERR_NOT_FOUND 0x105 /*!< Requested resource not found */
|
||||
#define ESP_ERR_NOT_SUPPORTED 0x106 /*!< Operation or feature not supported */
|
||||
#define ESP_ERR_TIMEOUT 0x107 /*!< Operation timed out */
|
||||
#define ESP_ERR_INVALID_RESPONSE 0x108 /*!< Received response was invalid */
|
||||
#define ESP_ERR_INVALID_CRC 0x109 /*!< CRC or checksum was invalid */
|
||||
#define ESP_ERR_INVALID_VERSION 0x10A /*!< Version was invalid */
|
||||
#define ESP_ERR_INVALID_MAC 0x10B /*!< MAC address was invalid */
|
||||
|
||||
#define ESP_ERR_WIFI_BASE 0x3000 /*!< Starting number of WiFi error codes */
|
||||
#define ESP_ERR_MESH_BASE 0x4000 /*!< Starting number of MESH error codes */
|
||||
@ -76,6 +75,7 @@ const char *esp_err_to_name(esp_err_t code);
|
||||
*/
|
||||
const char *esp_err_to_name_r(esp_err_t code, char *buf, size_t buflen);
|
||||
|
||||
/** @cond */
|
||||
void _esp_error_check_failed(esp_err_t rc, const char *file, int line, const char *function, const char *expression) __attribute__((noreturn));
|
||||
|
||||
#ifndef __ASSERT_FUNC
|
||||
@ -88,6 +88,7 @@ void _esp_error_check_failed(esp_err_t rc, const char *file, int line, const cha
|
||||
#define __ASSERT_FUNC "??"
|
||||
#endif
|
||||
#endif
|
||||
/** @endcond */
|
||||
|
||||
/**
|
||||
* Macro which can be used to check the error code,
|
||||
|
@ -44,6 +44,7 @@ typedef enum {
|
||||
SYSTEM_EVENT_AP_STOP, /**< ESP32 soft-AP stop */
|
||||
SYSTEM_EVENT_AP_STACONNECTED, /**< a station connected to ESP32 soft-AP */
|
||||
SYSTEM_EVENT_AP_STADISCONNECTED, /**< a station disconnected from ESP32 soft-AP */
|
||||
SYSTEM_EVENT_AP_STAIPASSIGNED, /**< ESP32 soft-AP assign an IP to a connected station */
|
||||
SYSTEM_EVENT_AP_PROBEREQRECVED, /**< Receive probe request packet in soft-AP interface */
|
||||
SYSTEM_EVENT_GOT_IP6, /**< ESP32 station or ap or ethernet interface v6IP addr is preferred */
|
||||
SYSTEM_EVENT_ETH_START, /**< ESP32 ethernet start */
|
||||
|
@ -21,7 +21,6 @@ extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#define ESP_PARTITION_TABLE_ADDR 0x8000
|
||||
#define ESP_PARTITION_MAGIC 0x50AA
|
||||
#define ESP_PARTITION_MAGIC_MD5 0xEBEB
|
||||
|
||||
|
@ -68,7 +68,7 @@
|
||||
*
|
||||
* In present implementation, applications are able to access mesh stack directly without having to go through LwIP stack.
|
||||
* Applications use esp_mesh_send() and esp_mesh_recv() to send and receive messages over the mesh network.
|
||||
* In mesh stack design, normal nodes don't require LwIP stack. But since IDF hasn't supported system without initializing LwIP stack yet,
|
||||
* In mesh stack design, normal devices don't require LwIP stack. But since IDF hasn't supported system without initializing LwIP stack yet,
|
||||
* applications still need to do LwIP initialization and two more things are required to be done
|
||||
* (1)stop DHCP server on softAP interface by default
|
||||
* (2)stop DHCP client on station interface by default.
|
||||
@ -78,7 +78,7 @@
|
||||
* tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA);
|
||||
*
|
||||
* Over the mesh network, only root is able to access external IP network.
|
||||
* In application mesh event handler, once a node becomes a root, start DHCP client immediately if DHCP is chosen.
|
||||
* In application mesh event handler, once a device becomes a root, start DHCP client immediately if DHCP is chosen.
|
||||
*/
|
||||
|
||||
#ifndef __ESP_MESH_H__
|
||||
@ -123,6 +123,7 @@ extern "C" {
|
||||
#define ESP_ERR_MESH_INTERFACE (ESP_ERR_MESH_BASE + 19) /**< low-level WiFi interface error */
|
||||
#define ESP_ERR_MESH_DISCARD_DUPLICATE (ESP_ERR_MESH_BASE + 20) /**< discard the packet due to the duplicate sequence number */
|
||||
#define ESP_ERR_MESH_DISCARD (ESP_ERR_MESH_BASE + 21) /**< discard the packet */
|
||||
#define ESP_ERR_MESH_VOTING (ESP_ERR_MESH_BASE + 22) /**< vote in progress */
|
||||
|
||||
/**
|
||||
* @brief flags used with esp_mesh_send() and esp_mesh_recv()
|
||||
@ -138,9 +139,17 @@ extern "C" {
|
||||
/**
|
||||
* @brief option definitions for esp_mesh_send() and esp_mesh_recv()
|
||||
*/
|
||||
#define MESH_OPT_SEND_GROUP (7) /**< data transmission by group; used with esp_mesh_send() and must have payload */
|
||||
#define MESH_OPT_SEND_GROUP (7) /**< data transmission by group; used with esp_mesh_send() and shall have payload */
|
||||
#define MESH_OPT_RECV_DS_ADDR (8) /**< return a remote IP address; used with esp_mesh_send() and esp_mesh_recv() */
|
||||
|
||||
/**
|
||||
* @brief flag of mesh networking IE
|
||||
*/
|
||||
#define MESH_ASSOC_FLAG_VOTE_IN_PROGRESS (0x02) /**< vote in progress */
|
||||
#define MESH_ASSOC_FLAG_NETWORK_FREE (0x08) /**< no root in current network */
|
||||
#define MESH_ASSOC_FLAG_ROOTS_FOUND (0x20) /**< root conflict is found */
|
||||
#define MESH_ASSOC_FLAG_ROOT_FIXED (0x40) /**< root is fixed */
|
||||
|
||||
/*******************************************************
|
||||
* Enumerations
|
||||
*******************************************************/
|
||||
@ -171,16 +180,21 @@ typedef enum {
|
||||
and this device is specified to be a root by users, users should set a new parent
|
||||
for this device. if self organized is enabled, this device will find a new parent
|
||||
by itself, users could ignore this event. */
|
||||
MESH_EVENT_ROOT_FIXED, /**< when devices join a network, if the setting of Fixed Root for one device is different
|
||||
from that of its parent, the device will update the setting the same as its parent's.
|
||||
Fixed Root setting of each device is variable as that setting changes of root. */
|
||||
MESH_EVENT_SCAN_DONE, /**< if self-organized networking is disabled, user can call esp_wifi_scan_start() to trigger
|
||||
this event, and add the corresponding scan done handler in this event. */
|
||||
MESH_EVENT_MAX,
|
||||
} mesh_event_id_t;
|
||||
|
||||
/**
|
||||
* @brief node type
|
||||
* @brief device type
|
||||
*/
|
||||
typedef enum {
|
||||
MESH_IDLE, /**< hasn't joined the mesh network yet */
|
||||
MESH_ROOT, /**< the only sink of the mesh network. Has the ability to access external IP network */
|
||||
MESH_NODE, /**< intermediate node. Has the ability to forward packets over the mesh network */
|
||||
MESH_NODE, /**< intermediate device. Has the ability to forward packets over the mesh network */
|
||||
MESH_LEAF, /**< has no forwarding ability */
|
||||
} mesh_type_t;
|
||||
|
||||
@ -217,7 +231,7 @@ typedef enum {
|
||||
typedef enum {
|
||||
MESH_REASON_CYCLIC = 100, /**< cyclic is detected */
|
||||
MESH_REASON_PARENT_IDLE, /**< parent is idle */
|
||||
MESH_REASON_LEAF, /**< the connected node is changed to a leaf */
|
||||
MESH_REASON_LEAF, /**< the connected device is changed to a leaf */
|
||||
MESH_REASON_DIFF_ID, /**< in different mesh ID */
|
||||
MESH_REASON_ROOTS, /**< root conflict is detected */
|
||||
MESH_REASON_PARENT_STOPPED, /**< parent has stopped the mesh */
|
||||
@ -327,7 +341,7 @@ typedef struct {
|
||||
*/
|
||||
typedef struct {
|
||||
int8_t rssi; /**< rssi with router */
|
||||
uint16_t capacity; /**< the number of nodes in its network */
|
||||
uint16_t capacity; /**< the number of devices in current network */
|
||||
uint8_t addr[6]; /**< other powerful root address */
|
||||
} mesh_event_root_conflict_t;
|
||||
|
||||
@ -339,6 +353,20 @@ typedef struct {
|
||||
uint16_t rt_size_change; /**< the changed value */
|
||||
} mesh_event_routing_table_change_t;
|
||||
|
||||
/**
|
||||
* @brief root fixed
|
||||
*/
|
||||
typedef struct {
|
||||
bool is_fixed; /**< status */
|
||||
} mesh_event_root_fixed_t;
|
||||
|
||||
/**
|
||||
* @brief scan done event information
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t number; /**< the number of scanned APs */
|
||||
} mesh_event_scan_done_t;
|
||||
|
||||
/**
|
||||
* @brief mesh event information
|
||||
*/
|
||||
@ -351,15 +379,17 @@ typedef union {
|
||||
mesh_event_disconnected_t disconnected; /**< parent disconnected */
|
||||
mesh_event_no_parent_found_t no_parent; /**< no parent found */
|
||||
mesh_event_layer_change_t layer_change; /**< layer change */
|
||||
mesh_event_toDS_state_t toDS_state; /**< toDS state, nodes should check this state firstly before trying to send packets to
|
||||
external IP network. This state indicates right now if root is capable
|
||||
of sending packets out. If not, nodes had better to wait until this state changes
|
||||
to be MESH_TODS_REACHABLE. */
|
||||
mesh_event_toDS_state_t toDS_state; /**< toDS state, devices shall check this state firstly before trying to send packets to
|
||||
external IP network. This state indicates right now if root is capable of sending
|
||||
packets out. If not, devices had better to wait until this state changes to be
|
||||
MESH_TODS_REACHABLE. */
|
||||
mesh_event_vote_started_t vote_started; /**< vote started */
|
||||
mesh_event_root_got_ip_t got_ip; /**< root obtains IP address */
|
||||
mesh_event_root_address_t root_addr; /**< root address */
|
||||
mesh_event_root_switch_req_t switch_req; /**< root switch request */
|
||||
mesh_event_root_conflict_t root_conflict; /**< other powerful root */
|
||||
mesh_event_root_fixed_t root_fixed; /**< root fixed */
|
||||
mesh_event_scan_done_t scan_done; /**< scan done */
|
||||
} mesh_event_info_t;
|
||||
|
||||
/**
|
||||
@ -427,11 +457,21 @@ typedef struct {
|
||||
} mesh_cfg_t;
|
||||
|
||||
/**
|
||||
* @brief vote
|
||||
* @brief vote address configuration
|
||||
*/
|
||||
typedef union {
|
||||
int attempts; /**< max vote attempts */
|
||||
mesh_addr_t rc_addr; /**< root address specified by users for API esp_mesh_waive_root() */
|
||||
int attempts; /**< max vote attempts before a new root is elected automatically by mesh network. (min:15, 15 by default) */
|
||||
mesh_addr_t rc_addr; /**< a new root address specified by users for API esp_mesh_waive_root() */
|
||||
} mesh_rc_config_t;
|
||||
|
||||
/**
|
||||
* @brief vote
|
||||
*/
|
||||
typedef struct {
|
||||
float percentage; /**< vote percentage threshold for approval of being a root */
|
||||
bool is_rc_specified; /**< if true, rc_addr shall be specified(Unimplemented).
|
||||
if false, attempts value shall be specified to make network start root election. */
|
||||
mesh_rc_config_t config; /**< vote address configuration */
|
||||
} mesh_vote_t;
|
||||
|
||||
/**
|
||||
@ -475,7 +515,7 @@ extern mesh_event_cb_t g_mesh_event_cb;
|
||||
* Check if WiFi is started.
|
||||
* Initialize mesh global variables with default values.
|
||||
*
|
||||
* @attention This API should be called after WiFi is started.
|
||||
* @attention This API shall be called after WiFi is started.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
@ -500,7 +540,7 @@ esp_err_t esp_mesh_deinit(void);
|
||||
* Create TX and RX queues according to the configuration
|
||||
* Register mesh packets receive callback
|
||||
*
|
||||
* @attention This API should be called after esp_mesh_init() and esp_mesh_set_config().
|
||||
* @attention This API shall be called after esp_mesh_init() and esp_mesh_set_config().
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
@ -530,7 +570,7 @@ esp_err_t esp_mesh_stop(void);
|
||||
|
||||
/**
|
||||
* @brief send a packet over the mesh network
|
||||
* Send a packet to any node in the mesh network.
|
||||
* Send a packet to any device in the mesh network.
|
||||
* Send a packet to external IP network.
|
||||
*
|
||||
* @attention This API is not reentrant.
|
||||
@ -544,9 +584,9 @@ esp_err_t esp_mesh_stop(void);
|
||||
* Should specify the transmission tos(type of service), P2P reliable by default.
|
||||
* @param flag
|
||||
* (1)used to speed up the route selection
|
||||
* if the packet is target to an internal node, MESH_DATA_P2P should be set.
|
||||
* if the packet is target to an internal device, MESH_DATA_P2P should be set.
|
||||
* if the packet is outgoing to root or to external IP network, MESH_DATA_TODS should be set.
|
||||
* if the packet is from root to an internal node, MESH_DATA_FROMDS should be set.
|
||||
* if the packet is from root to an internal device, MESH_DATA_FROMDS should be set.
|
||||
* (2)specify if this API is block or non-block, block by default
|
||||
* if needs non-block, MESH_DATA_NONBLOCK should be set.
|
||||
* (3)in the situation of root having been changed, MESH_DATA_DROP identifies this packet can be dropped by new root
|
||||
@ -559,7 +599,7 @@ esp_err_t esp_mesh_stop(void);
|
||||
* @param opt options
|
||||
* (1)in case of sending a packet to a specified group, MESH_OPT_SEND_GROUP is a good choice.
|
||||
* In this option, the value field should specify the target receiver addresses in this group.
|
||||
* (2)root sends a packet to an internal node, this packet is from external IP network in case the receiver node responds
|
||||
* (2)root sends a packet to an internal device, this packet is from external IP network in case the receiver device responds
|
||||
* this packet, MESH_OPT_RECV_DS_ADDR is required to attach the target DS address.
|
||||
* @param opt_count option count
|
||||
* Currently, this API only takes one option, so opt_count is only supported to be 1.
|
||||
@ -579,7 +619,7 @@ esp_err_t esp_mesh_stop(void);
|
||||
* - ESP_ERR_MESH_DISCARD
|
||||
*/
|
||||
esp_err_t esp_mesh_send(const mesh_addr_t *to, const mesh_data_t *data,
|
||||
const int flag, const mesh_opt_t opt[], const int opt_count);
|
||||
int flag, const mesh_opt_t opt[], int opt_count);
|
||||
|
||||
/**
|
||||
* @brief receive a packet targeted to self over the mesh network
|
||||
@ -657,10 +697,10 @@ esp_err_t esp_mesh_recv_toDS(mesh_addr_t *from, mesh_addr_t *to,
|
||||
* Root conflict function could eliminate redundant roots connected with the same BSSID, but couldn't handle roots
|
||||
* connected with different BSSID. Because users might have such requirements of setting up routers with same SSID
|
||||
* for the future replacement. But in that case, if the above situations happen, please make sure applications
|
||||
* implement forward functions on root to guarantee nodes in different mesh network could communicate with each other.
|
||||
* implement forward functions on root to guarantee devices in different mesh network can communicate with each other.
|
||||
* max_connection of mesh softAP is limited by the max number of WiFi softAP supported(max:10).
|
||||
*
|
||||
* @attention This API should be called between esp_mesh_init() and esp_mesh_start().
|
||||
* @attention This API shall be called between esp_mesh_init() and esp_mesh_start().
|
||||
*
|
||||
* @param config pointer to mesh stack configuration
|
||||
*
|
||||
@ -685,7 +725,7 @@ esp_err_t esp_mesh_get_config(mesh_cfg_t *config);
|
||||
/**
|
||||
* @brief set router configuration
|
||||
*
|
||||
* @attention This API should be called between esp_mesh_init() and esp_mesh_start().
|
||||
* @attention This API shall be called between esp_mesh_init() and esp_mesh_start().
|
||||
*
|
||||
* @param router pointer to router configuration
|
||||
*
|
||||
@ -709,7 +749,7 @@ esp_err_t esp_mesh_get_router(mesh_router_t *router);
|
||||
/**
|
||||
* @brief set mesh network ID
|
||||
*
|
||||
* @attention This API should be called between esp_mesh_init() and esp_mesh_start().
|
||||
* @attention This API could be called either before esp_mesh_start() or after esp_mesh_start().
|
||||
*
|
||||
* @param id pointer to mesh network ID
|
||||
*
|
||||
@ -731,20 +771,20 @@ esp_err_t esp_mesh_set_id(const mesh_addr_t *id);
|
||||
esp_err_t esp_mesh_get_id(mesh_addr_t *id);
|
||||
|
||||
/**
|
||||
* @brief set node type over the mesh network(Unimplemented)
|
||||
* @brief set device type over the mesh network(Unimplemented)
|
||||
*
|
||||
* @param type node type
|
||||
* @param type device type
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_MESH_NOT_ALLOWED
|
||||
*/
|
||||
esp_err_t esp_mesh_set_type(const mesh_type_t type);
|
||||
esp_err_t esp_mesh_set_type(mesh_type_t type);
|
||||
|
||||
/**
|
||||
* @brief get node type over mesh network
|
||||
* @brief get device type over mesh network
|
||||
*
|
||||
* @attention This API should be called after having received the event MESH_EVENT_PARENT_CONNECTED.
|
||||
* @attention This API shall be called after having received the event MESH_EVENT_PARENT_CONNECTED.
|
||||
*
|
||||
* @return mesh type
|
||||
*
|
||||
@ -754,7 +794,7 @@ mesh_type_t esp_mesh_get_type(void);
|
||||
/**
|
||||
* @brief set max layer configuration(max:15, default:15)
|
||||
*
|
||||
* @attention This API should be called before esp_mesh_start().
|
||||
* @attention This API shall be called before esp_mesh_start().
|
||||
*
|
||||
* @param max_layer max layer value
|
||||
*
|
||||
@ -763,7 +803,7 @@ mesh_type_t esp_mesh_get_type(void);
|
||||
* - ESP_ERR_MESH_ARGUMENT
|
||||
* - ESP_ERR_MESH_NOT_ALLOWED
|
||||
*/
|
||||
esp_err_t esp_mesh_set_max_layer(const int max_layer);
|
||||
esp_err_t esp_mesh_set_max_layer(int max_layer);
|
||||
|
||||
/**
|
||||
* @brief get max layer configuration
|
||||
@ -775,7 +815,7 @@ int esp_mesh_get_max_layer(void);
|
||||
/**
|
||||
* @brief set mesh softAP password
|
||||
*
|
||||
* @attention This API should be called before esp_mesh_start().
|
||||
* @attention This API shall be called before esp_mesh_start().
|
||||
*
|
||||
* @param pwd pointer to the password
|
||||
* @param len password length
|
||||
@ -785,12 +825,12 @@ int esp_mesh_get_max_layer(void);
|
||||
* - ESP_ERR_MESH_ARGUMENT
|
||||
* - ESP_ERR_MESH_NOT_ALLOWED
|
||||
*/
|
||||
esp_err_t esp_mesh_set_ap_password(const uint8_t *pwd, const int len);
|
||||
esp_err_t esp_mesh_set_ap_password(const uint8_t *pwd, int len);
|
||||
|
||||
/**
|
||||
* @brief set mesh softAP authentication mode value
|
||||
*
|
||||
* @attention This API should be called before esp_mesh_start().
|
||||
* @attention This API shall be called before esp_mesh_start().
|
||||
*
|
||||
* @param authmode authentication mode
|
||||
*
|
||||
@ -799,7 +839,7 @@ esp_err_t esp_mesh_set_ap_password(const uint8_t *pwd, const int len);
|
||||
* - ESP_ERR_MESH_ARGUMENT
|
||||
* - ESP_ERR_MESH_NOT_ALLOWED
|
||||
*/
|
||||
esp_err_t esp_mesh_set_ap_authmode(const wifi_auth_mode_t authmode);
|
||||
esp_err_t esp_mesh_set_ap_authmode(wifi_auth_mode_t authmode);
|
||||
|
||||
/**
|
||||
* @brief get mesh softAP authentication mode
|
||||
@ -812,7 +852,7 @@ wifi_auth_mode_t esp_mesh_get_ap_authmode(void);
|
||||
/**
|
||||
* @brief set mesh softAP max connection value
|
||||
*
|
||||
* @attention This API should be called before esp_mesh_start().
|
||||
* @attention This API shall be called before esp_mesh_start().
|
||||
*
|
||||
* @param connections the number of max connections
|
||||
*
|
||||
@ -820,7 +860,7 @@ wifi_auth_mode_t esp_mesh_get_ap_authmode(void);
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_MESH_ARGUMENT
|
||||
*/
|
||||
esp_err_t esp_mesh_set_ap_connections(const int connections);
|
||||
esp_err_t esp_mesh_set_ap_connections(int connections);
|
||||
|
||||
/**
|
||||
* @brief get mesh softAP max connection configuration
|
||||
@ -833,7 +873,7 @@ int esp_mesh_get_ap_connections(void);
|
||||
/**
|
||||
* @brief get current layer value over the mesh network
|
||||
*
|
||||
* @attention This API should be called after having received the event MESH_EVENT_PARENT_CONNECTED.
|
||||
* @attention This API shall be called after having received the event MESH_EVENT_PARENT_CONNECTED.
|
||||
*
|
||||
* @return layer value
|
||||
*
|
||||
@ -843,7 +883,7 @@ int esp_mesh_get_layer(void);
|
||||
/**
|
||||
* @brief get parent BSSID
|
||||
*
|
||||
* @attention This API should be called after having received the event MESH_EVENT_PARENT_CONNECTED.
|
||||
* @attention This API shall be called after having received the event MESH_EVENT_PARENT_CONNECTED.
|
||||
*
|
||||
* @param bssid pointer to parent BSSID
|
||||
*
|
||||
@ -854,7 +894,7 @@ int esp_mesh_get_layer(void);
|
||||
esp_err_t esp_mesh_get_parent_bssid(mesh_addr_t *bssid);
|
||||
|
||||
/**
|
||||
* @brief return if the node is root
|
||||
* @brief return if the device is root
|
||||
*
|
||||
* @return true/false
|
||||
*
|
||||
@ -863,16 +903,20 @@ bool esp_mesh_is_root(void);
|
||||
|
||||
/**
|
||||
* @brief enable/disable mesh networking self-organized, self-organized by default
|
||||
* if self-organized is disabled, users should set a parent for this node via
|
||||
* esp_mesh_set_parent()(Unimplemented);
|
||||
* if self-organized is disabled, users should set a parent for this device via
|
||||
* esp_mesh_set_parent();
|
||||
*
|
||||
* @param enable
|
||||
* @attention This API could be called either before esp_mesh_start() or after esp_mesh_start().
|
||||
*
|
||||
* @param enable enable or disable self-organized networking
|
||||
* @param select_parent if enable self-organized networking, let the device select a new parent or
|
||||
* keep connecting to the previous parent.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_FAIL
|
||||
*/
|
||||
esp_err_t esp_mesh_set_self_organized(const bool enable);
|
||||
esp_err_t esp_mesh_set_self_organized(bool enable, bool select_parent);
|
||||
|
||||
/**
|
||||
* @brief return if mesh networking is self-organized or not
|
||||
@ -884,7 +928,7 @@ bool esp_mesh_get_self_organized(void);
|
||||
|
||||
/**
|
||||
* @brief root waive itself
|
||||
* A node is elected to be a root during the networking mostly because it has a strong RSSI with router.
|
||||
* A device is elected to be a root during the networking mostly because it has a strong RSSI with router.
|
||||
* If such superior conditions change, users could call this API to perform a root switch.
|
||||
*
|
||||
* In this API, users could specify a desired root address to replace itself or specify an attempts value
|
||||
@ -892,7 +936,7 @@ bool esp_mesh_get_self_organized(void);
|
||||
* be expected to find to replace the current one.
|
||||
* If no desired root candidate, the vote will try a specified attempts(at least 10 times), if no better
|
||||
* root candidate is found, keep the current one. If a better candidate is found, the new better one will
|
||||
* send a root switch request to the current root, current root will respond with a root switch acknowledgement.
|
||||
* send a root switch request to the current root, current root will respond with a root switch acknowledgment.
|
||||
* After that, the new candidate will connect to the router to be a new root, the previous root will disconnect
|
||||
* with the router and choose another parent instead.
|
||||
* So far, root switch is completed with minimal disruption to the whole mesh network.
|
||||
@ -907,16 +951,18 @@ bool esp_mesh_get_self_organized(void);
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_MESH_QUEUE_FULL
|
||||
* - ESP_ERR_MESH_DISCARD
|
||||
* - ESP_FAIL
|
||||
*/
|
||||
esp_err_t esp_mesh_waive_root(const mesh_vote_t *vote, const int reason);
|
||||
esp_err_t esp_mesh_waive_root(const mesh_vote_t *vote, int reason);
|
||||
|
||||
/**
|
||||
* @brief set vote percentage threshold for approval of being a root
|
||||
* During the networking, only obtaining vote percentage reaches this threshold,
|
||||
* the node could be a root.
|
||||
* the device could be a root.
|
||||
*
|
||||
* @attention This API should be called before esp_mesh_start().
|
||||
* @attention This API shall be called before esp_mesh_start().
|
||||
*
|
||||
* @param percentage vote percentage threshold
|
||||
*
|
||||
@ -924,7 +970,7 @@ esp_err_t esp_mesh_waive_root(const mesh_vote_t *vote, const int reason);
|
||||
* - ESP_OK
|
||||
* - ESP_FAIL
|
||||
*/
|
||||
esp_err_t esp_mesh_set_vote_percentage(const float percentage);
|
||||
esp_err_t esp_mesh_set_vote_percentage(float percentage);
|
||||
|
||||
/**
|
||||
* @brief get vote percentage threshold for approval of being a root
|
||||
@ -944,7 +990,7 @@ float esp_mesh_get_vote_percentage(void);
|
||||
* - ESP_OK
|
||||
* - ESP_FAIL
|
||||
*/
|
||||
esp_err_t esp_mesh_set_ap_assoc_expire(const int seconds);
|
||||
esp_err_t esp_mesh_set_ap_assoc_expire(int seconds);
|
||||
|
||||
/**
|
||||
* @brief get mesh softAP associate expired time
|
||||
@ -954,27 +1000,27 @@ esp_err_t esp_mesh_set_ap_assoc_expire(const int seconds);
|
||||
int esp_mesh_get_ap_assoc_expire(void);
|
||||
|
||||
/**
|
||||
* @brief get total number of nodes over the mesh network(including root)
|
||||
* @brief get total number of devices in current network(including root)
|
||||
*
|
||||
* @attention The returned value might be incorrect when the network is changing.
|
||||
**
|
||||
* @return total number of nodes(including root)
|
||||
* @return total number of devices(including root)
|
||||
*/
|
||||
int esp_mesh_get_total_node_num(void);
|
||||
|
||||
/**
|
||||
* @brief get the number of nodes in routing table(including self)
|
||||
* @brief get the number of devices in this device's sub-network(including self)
|
||||
*
|
||||
* @return the number of nodes in routing table(including self)
|
||||
* @return the number of devices over this device's sub-network(including self)
|
||||
*/
|
||||
int esp_mesh_get_routing_table_size(void);
|
||||
|
||||
/**
|
||||
* @brief get routing table(including itself)
|
||||
* @brief get routing table of this device's sub-network(including itself)
|
||||
*
|
||||
* @param mac pointer to routing table
|
||||
* @param len routing table size(in bytes)
|
||||
* @param size pointer to the number of nodes in routing table(including itself)
|
||||
* @param size pointer to the number of devices in routing table(including itself)
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
@ -993,7 +1039,7 @@ esp_err_t esp_mesh_get_routing_table(mesh_addr_t *mac, int len, int *size);
|
||||
* - ESP_OK
|
||||
* - ESP_FAIL
|
||||
*/
|
||||
esp_err_t esp_mesh_post_toDS_state(const bool reachable);
|
||||
esp_err_t esp_mesh_post_toDS_state(bool reachable);
|
||||
|
||||
/**
|
||||
* @brief return the number of packets pending in the queue waiting to be sent by the mesh stack
|
||||
@ -1030,9 +1076,9 @@ int esp_mesh_available_txupQ_num(const mesh_addr_t *addr, uint32_t *xseqno_in);
|
||||
/**
|
||||
* @brief set queue size
|
||||
*
|
||||
* @attention This API should be called before esp_mesh_start().
|
||||
* @attention This API shall be called before esp_mesh_start().
|
||||
*
|
||||
* @param qsize default:72(min:36, max:105)
|
||||
* @param qsize default:32(min:16)
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
@ -1057,31 +1103,38 @@ int esp_mesh_get_xon_qsize(void);
|
||||
* - ESP_WIFI_ERR_NOT_INIT
|
||||
* - ESP_WIFI_ERR_NOT_START
|
||||
*/
|
||||
esp_err_t esp_mesh_allow_root_conflicts(const bool allowed);
|
||||
esp_err_t esp_mesh_allow_root_conflicts(bool allowed);
|
||||
|
||||
/**
|
||||
* @brief check if allow more than one root to exist in one network
|
||||
*
|
||||
* @return true/false
|
||||
*/
|
||||
bool esp_mesh_is_root_conflicts_allowed(void);
|
||||
|
||||
/**
|
||||
* @brief set group ID addresses
|
||||
*
|
||||
* @param addr pointer to new addresses
|
||||
* @param num number of addresses
|
||||
* @param addr pointer to new group ID addresses
|
||||
* @param num the number of group ID addresses
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_MESH_ERR_ARGUMENT
|
||||
*/
|
||||
esp_err_t esp_mesh_set_group_id(const mesh_addr_t *addr, const int num);
|
||||
esp_err_t esp_mesh_set_group_id(const mesh_addr_t *addr, int num);
|
||||
|
||||
/**
|
||||
* @brief delete group ID addresses
|
||||
*
|
||||
* @param addr pointer to deleted address
|
||||
* @param num number of addresses
|
||||
* @param addr pointer to deleted group ID address
|
||||
* @param num the number of group ID addresses
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_MESH_ERR_ARGUMENT
|
||||
*/
|
||||
esp_err_t esp_mesh_delete_group_id(const mesh_addr_t *addr, const int num);
|
||||
esp_err_t esp_mesh_delete_group_id(const mesh_addr_t *addr, int num);
|
||||
|
||||
/**
|
||||
* @brief get the number of group ID addresses
|
||||
@ -1093,14 +1146,14 @@ int esp_mesh_get_group_num(void);
|
||||
/**
|
||||
* @brief get group ID addresses
|
||||
*
|
||||
* @param addr pointer to group address
|
||||
* @param num number of addresses
|
||||
* @param addr pointer to group ID addresses
|
||||
* @param num the number of group ID addresses
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_MESH_ERR_ARGUMENT
|
||||
*/
|
||||
esp_err_t esp_mesh_get_group_list(mesh_addr_t *addr, const int num);
|
||||
esp_err_t esp_mesh_get_group_list(mesh_addr_t *addr, int num);
|
||||
|
||||
/**
|
||||
* @brief check if the specified group address is my group
|
||||
@ -1112,7 +1165,7 @@ bool esp_mesh_is_my_group(const mesh_addr_t *addr);
|
||||
/**
|
||||
* @brief set mesh network capacity
|
||||
*
|
||||
* @attention This API should be called before esp_mesh_start().
|
||||
* @attention This API shall be called before esp_mesh_start().
|
||||
*
|
||||
* @param num mesh network capacity
|
||||
*
|
||||
@ -1143,29 +1196,30 @@ esp_err_t esp_mesh_set_ie_crypto_funcs(const mesh_crypto_funcs_t *crypto_funcs);
|
||||
/**
|
||||
* @brief set mesh ie crypto key
|
||||
*
|
||||
* @attention This API should be called before esp_mesh_start().
|
||||
* @attention This API shall be called after esp_mesh_set_config() and before esp_mesh_start().
|
||||
*
|
||||
* @param key crypto key
|
||||
* @param len the present implementation only supports 32
|
||||
* @param key ASCII crypto key
|
||||
* @param len length in bytes, range:8~64
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_MESH_NOT_ALLOWED
|
||||
* - ESP_ERR_MESH_NOT_CONFIG
|
||||
* - ESP_MESH_ERR_ARGUMENT
|
||||
*/
|
||||
esp_err_t esp_mesh_set_ie_crypto_key(const uint8_t *key, int len);
|
||||
esp_err_t esp_mesh_set_ie_crypto_key(const char *key, int len);
|
||||
|
||||
/**
|
||||
* @brief get mesh ie crypto key
|
||||
*
|
||||
* @param key crypto key
|
||||
* @param len the present implementation only supports 32
|
||||
* @param key ASCII crypto key
|
||||
* @param len length in bytes, range:8~64
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_MESH_ERR_ARGUMENT
|
||||
*/
|
||||
esp_err_t esp_mesh_get_ie_crypto_key(uint8_t *key, int len);
|
||||
esp_err_t esp_mesh_get_ie_crypto_key(char *key, int len);
|
||||
|
||||
/**
|
||||
* @brief set delay time before starting root healing
|
||||
@ -1194,6 +1248,69 @@ int esp_mesh_get_root_healing_delay(void);
|
||||
*/
|
||||
esp_err_t esp_mesh_set_event_cb(const mesh_event_cb_t event_cb);
|
||||
|
||||
/**
|
||||
* @brief set Fixed Root setting for the device
|
||||
* If Fixed Root setting of the device is enabled, it won't compete to be a root.
|
||||
* If a scenario needs a fixed root, all devices in this network shall enable this setting.
|
||||
*
|
||||
* @param enable enable or not
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
*/
|
||||
esp_err_t esp_mesh_fix_root(bool enable);
|
||||
|
||||
/**
|
||||
* @brief check if Fixed Root setting is enabled
|
||||
* Fixed Root setting can be changed by API esp_mesh_fix_root().
|
||||
* Fixed Root setting can also be changed by event MESH_EVENT_ROOT_FIXED.
|
||||
*
|
||||
* @return true/false
|
||||
*/
|
||||
bool esp_mesh_is_root_fixed(void);
|
||||
|
||||
/**
|
||||
* @brief set a specified parent
|
||||
*
|
||||
* @param parent parent configuration, the ssid and the channel of the parent are mandatory.
|
||||
* @param parent_mesh_id parent mesh ID, if not set, use the device default one.
|
||||
* @param my_type my mesh type
|
||||
* @param my_layer my mesh layer
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ARGUMENT
|
||||
* - ESP_ERR_MESH_NOT_CONFIG
|
||||
*/
|
||||
esp_err_t esp_mesh_set_parent(const wifi_config_t *parent, const mesh_addr_t *parent_mesh_id, mesh_type_t my_type, int my_layer);
|
||||
|
||||
/**
|
||||
* @brief get mesh networking IE length of one AP
|
||||
*
|
||||
* @param len mesh networking IE length
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_WIFI_NOT_INIT
|
||||
* - ESP_ERR_WIFI_ARG
|
||||
* - ESP_ERR_WIFI_FAIL
|
||||
*/
|
||||
esp_err_t esp_mesh_scan_get_ap_ie_len(int *len);
|
||||
|
||||
/**
|
||||
* @brief get AP record
|
||||
* Different from esp_wifi_scan_get_ap_records(), this API only gets one of scanned APs each time.
|
||||
*
|
||||
* @param ap_record pointer to the AP record
|
||||
* @param buffer pointer to the mesh networking IE of this AP
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_WIFI_NOT_INIT
|
||||
* - ESP_ERR_WIFI_ARG
|
||||
* - ESP_ERR_WIFI_FAIL
|
||||
*/
|
||||
esp_err_t esp_mesh_scan_get_ap_record(wifi_ap_record_t *ap_record, void *buffer);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -49,6 +49,46 @@ typedef struct {
|
||||
int backoff_rssi; /* RSSI threshold for connecting to the root */
|
||||
} mesh_switch_parent_t;
|
||||
|
||||
/**
|
||||
* @brief mesh networking IE
|
||||
*/
|
||||
typedef struct {
|
||||
/**< mesh networking IE head */
|
||||
uint8_t eid; /**< element ID */
|
||||
uint8_t len; /**< element length */
|
||||
uint8_t oui[3]; /**< organization identifier */
|
||||
/**< mesh networking IE content */
|
||||
uint8_t type; /** mesh networking IE type */
|
||||
uint8_t encryped : 1; /**< if mesh networking IE is encrypted */
|
||||
uint8_t version : 7; /**< mesh networking IE version */
|
||||
/**< content */
|
||||
uint8_t mesh_type; /**< mesh device type */
|
||||
uint8_t mesh_id[6]; /**< mesh ID */
|
||||
uint8_t layer_cap; /**< max layer */
|
||||
uint8_t layer; /**< current layer */
|
||||
uint8_t assoc_cap; /**< max connections of mesh AP */
|
||||
uint8_t assoc; /**< current connections */
|
||||
uint8_t leaf_cap; /**< leaf capacity */
|
||||
uint8_t leaf_assoc; /**< the number of current connected leaf */
|
||||
uint16_t root_cap; /**< root capacity */
|
||||
uint16_t self_cap; /**< self capacity */
|
||||
uint16_t layer2_cap; /**< layer2 capacity */
|
||||
uint16_t scan_ap_num; /**< the number of scanned APs */
|
||||
int8_t rssi; /**< rssi of the parent */
|
||||
int8_t router_rssi; /**< rssi of the router */
|
||||
uint8_t flag; /**< flag of networking */
|
||||
uint8_t rc_addr[6]; /**< root address */
|
||||
int8_t rc_rssi; /**< root rssi */
|
||||
uint8_t vote_addr[6]; /**< voter address */
|
||||
int8_t vote_rssi; /**< vote rssi of the router */
|
||||
uint8_t vote_ttl; /**< vote ttl */
|
||||
uint16_t votes; /**< votes */
|
||||
uint16_t my_votes; /**< my votes */
|
||||
uint8_t reason; /**< reason */
|
||||
uint8_t child[6]; /**< child address */
|
||||
uint8_t toDS; /**< toDS state */
|
||||
} __attribute__((packed)) mesh_assoc_t;
|
||||
|
||||
/*******************************************************
|
||||
* Function Definitions
|
||||
*******************************************************/
|
||||
|
@ -37,7 +37,9 @@ typedef struct {
|
||||
* @brief Opaque PHY calibration data
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t opaque[1904]; /*!< calibration data */
|
||||
uint8_t version[4]; /*!< PHY version */
|
||||
uint8_t mac[6]; /*!< The MAC address of the station */
|
||||
uint8_t opaque[1894]; /*!< calibration data */
|
||||
} esp_phy_calibration_data_t;
|
||||
|
||||
typedef enum {
|
||||
@ -56,6 +58,7 @@ typedef enum{
|
||||
MODEM_WIFI_STATION_MODULE, //!< Wi-Fi Station used
|
||||
MODEM_WIFI_SOFTAP_MODULE, //!< Wi-Fi SoftAP used
|
||||
MODEM_WIFI_SNIFFER_MODULE, //!< Wi-Fi Sniffer used
|
||||
MODEM_WIFI_NULL_MODULE, //!< Wi-Fi Null mode used
|
||||
MODEM_USER_MODULE, //!< User used
|
||||
MODEM_MODULE_COUNT //!< Number of items
|
||||
}modem_sleep_module_t;
|
||||
@ -71,7 +74,8 @@ typedef enum{
|
||||
*/
|
||||
#define MODEM_WIFI_MASK ((1<<MODEM_WIFI_STATION_MODULE) | \
|
||||
(1<<MODEM_WIFI_SOFTAP_MODULE) | \
|
||||
(1<<MODEM_WIFI_SNIFFER_MODULE))
|
||||
(1<<MODEM_WIFI_SNIFFER_MODULE) | \
|
||||
(1<<MODEM_WIFI_NULL_MODULE))
|
||||
|
||||
/**
|
||||
* @brief Modules needing to call phy_rf_init
|
||||
|
@ -38,6 +38,7 @@ typedef enum {
|
||||
ESP_PD_DOMAIN_RTC_PERIPH, //!< RTC IO, sensors and ULP co-processor
|
||||
ESP_PD_DOMAIN_RTC_SLOW_MEM, //!< RTC slow memory
|
||||
ESP_PD_DOMAIN_RTC_FAST_MEM, //!< RTC fast memory
|
||||
ESP_PD_DOMAIN_XTAL, //!< XTAL oscillator
|
||||
ESP_PD_DOMAIN_MAX //!< Number of domains
|
||||
} esp_sleep_pd_domain_t;
|
||||
|
||||
@ -112,6 +113,9 @@ esp_err_t esp_sleep_enable_timer_wakeup(uint64_t time_in_us);
|
||||
* to be powered on (ESP_PD_OPTION_ON) or when ext0 wakeup
|
||||
* source is used.
|
||||
*
|
||||
* @note The FSM mode of the touch button should be configured
|
||||
* as the timer trigger mode.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
* - ESP_ERR_INVALID_STATE if wakeup triggers conflict
|
||||
|
@ -189,6 +189,13 @@ esp_err_t esp_timer_delete(esp_timer_handle_t timer);
|
||||
*/
|
||||
int64_t esp_timer_get_time();
|
||||
|
||||
/**
|
||||
* @brief Get the timestamp when the next timeout is expected to occur
|
||||
* @return Timestamp of the nearest timer event, in microseconds.
|
||||
* The timebase is the same as for the values returned by esp_timer_get_time.
|
||||
*/
|
||||
int64_t esp_timer_get_next_alarm();
|
||||
|
||||
/**
|
||||
* @brief Dump the list of timers to a stream
|
||||
*
|
||||
|
0
tools/sdk/include/esp32/esp_types.h
Executable file → Normal file
0
tools/sdk/include/esp32/esp_types.h
Executable file → Normal file
224
tools/sdk/include/esp32/esp_wifi.h
Executable file → Normal file
224
tools/sdk/include/esp32/esp_wifi.h
Executable file → Normal file
@ -67,6 +67,7 @@
|
||||
#include "esp_wifi_types.h"
|
||||
#include "esp_wifi_crypto_types.h"
|
||||
#include "esp_event.h"
|
||||
#include "esp_wifi_os_adapter.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -93,18 +94,21 @@ extern "C" {
|
||||
*/
|
||||
typedef struct {
|
||||
system_event_handler_t event_handler; /**< WiFi event handler */
|
||||
wifi_osi_funcs_t* osi_funcs; /**< WiFi OS functions */
|
||||
wpa_crypto_funcs_t wpa_crypto_funcs; /**< WiFi station crypto functions when connect */
|
||||
int static_rx_buf_num; /**< WiFi static RX buffer number */
|
||||
int dynamic_rx_buf_num; /**< WiFi dynamic RX buffer number */
|
||||
int tx_buf_type; /**< WiFi TX buffer type */
|
||||
int static_tx_buf_num; /**< WiFi static TX buffer number */
|
||||
int dynamic_tx_buf_num; /**< WiFi dynamic TX buffer number */
|
||||
int csi_enable; /**< WiFi channel state information enable flag */
|
||||
int ampdu_rx_enable; /**< WiFi AMPDU RX feature enable flag */
|
||||
int ampdu_tx_enable; /**< WiFi AMPDU TX feature enable flag */
|
||||
int nvs_enable; /**< WiFi NVS flash enable flag */
|
||||
int nano_enable; /**< Nano option for printf/scan family enable flag */
|
||||
int tx_ba_win; /**< WiFi Block Ack TX window size */
|
||||
int rx_ba_win; /**< WiFi Block Ack RX window size */
|
||||
int wifi_task_core_id; /**< WiFi Task Core ID */
|
||||
int magic; /**< WiFi init magic number, it should be the last field */
|
||||
} wifi_init_config_t;
|
||||
|
||||
@ -120,6 +124,12 @@ typedef struct {
|
||||
#define WIFI_DYNAMIC_TX_BUFFER_NUM 0
|
||||
#endif
|
||||
|
||||
#if CONFIG_ESP32_WIFI_CSI_ENABLED
|
||||
#define WIFI_CSI_ENABLED 1
|
||||
#else
|
||||
#define WIFI_CSI_ENABLED 0
|
||||
#endif
|
||||
|
||||
#if CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED
|
||||
#define WIFI_AMPDU_RX_ENABLED 1
|
||||
#else
|
||||
@ -160,20 +170,29 @@ extern const wpa_crypto_funcs_t g_wifi_default_wpa_crypto_funcs;
|
||||
#define WIFI_DEFAULT_RX_BA_WIN 0 /* unused if ampdu_rx_enable == false */
|
||||
#endif
|
||||
|
||||
#if CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1
|
||||
#define WIFI_TASK_CORE_ID 1
|
||||
#else
|
||||
#define WIFI_TASK_CORE_ID 0
|
||||
#endif
|
||||
|
||||
#define WIFI_INIT_CONFIG_DEFAULT() { \
|
||||
.event_handler = &esp_event_send, \
|
||||
.osi_funcs = &g_wifi_osi_funcs, \
|
||||
.wpa_crypto_funcs = g_wifi_default_wpa_crypto_funcs, \
|
||||
.static_rx_buf_num = CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM,\
|
||||
.dynamic_rx_buf_num = CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM,\
|
||||
.tx_buf_type = CONFIG_ESP32_WIFI_TX_BUFFER_TYPE,\
|
||||
.static_tx_buf_num = WIFI_STATIC_TX_BUFFER_NUM,\
|
||||
.dynamic_tx_buf_num = WIFI_DYNAMIC_TX_BUFFER_NUM,\
|
||||
.csi_enable = WIFI_CSI_ENABLED,\
|
||||
.ampdu_rx_enable = WIFI_AMPDU_RX_ENABLED,\
|
||||
.ampdu_tx_enable = WIFI_AMPDU_TX_ENABLED,\
|
||||
.nvs_enable = WIFI_NVS_ENABLED,\
|
||||
.nano_enable = WIFI_NANO_FORMAT_ENABLED,\
|
||||
.tx_ba_win = WIFI_DEFAULT_TX_BA_WIN,\
|
||||
.rx_ba_win = WIFI_DEFAULT_RX_BA_WIN,\
|
||||
.wifi_task_core_id = WIFI_TASK_CORE_ID,\
|
||||
.magic = WIFI_INIT_CONFIG_MAGIC\
|
||||
};
|
||||
|
||||
@ -397,6 +416,9 @@ esp_err_t esp_wifi_scan_get_ap_records(uint16_t *number, wifi_ap_record_t *ap_re
|
||||
* @brief Get information of AP which the ESP32 station is associated with
|
||||
*
|
||||
* @param ap_info the wifi_ap_record_t to hold AP information
|
||||
* sta can get the connected ap's phy mode info through the struct member
|
||||
* phy_11b,phy_11g,phy_11n,phy_lr in the wifi_ap_record_t struct.
|
||||
* For example, phy_11b = 1 imply that ap support 802.11b mode
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
@ -406,24 +428,24 @@ esp_err_t esp_wifi_scan_get_ap_records(uint16_t *number, wifi_ap_record_t *ap_re
|
||||
esp_err_t esp_wifi_sta_get_ap_info(wifi_ap_record_t *ap_info);
|
||||
|
||||
/**
|
||||
* @brief Set current power save type
|
||||
* @brief Set current WiFi power save type
|
||||
*
|
||||
* @attention Default power save type is WIFI_PS_NONE.
|
||||
* @attention Default power save type is WIFI_PS_MIN_MODEM.
|
||||
*
|
||||
* @param type power save type
|
||||
*
|
||||
* @return ESP_ERR_NOT_SUPPORTED: not supported yet
|
||||
* @return ESP_OK: succeed
|
||||
*/
|
||||
esp_err_t esp_wifi_set_ps(wifi_ps_type_t type);
|
||||
|
||||
/**
|
||||
* @brief Get current power save type
|
||||
* @brief Get current WiFi power save type
|
||||
*
|
||||
* @attention Default power save type is WIFI_PS_NONE.
|
||||
* @attention Default power save type is WIFI_PS_MIN_MODEM.
|
||||
*
|
||||
* @param[out] type: store current power save type
|
||||
*
|
||||
* @return ESP_ERR_NOT_SUPPORTED: not supported yet
|
||||
* @return ESP_OK: succeed
|
||||
*/
|
||||
esp_err_t esp_wifi_get_ps(wifi_ps_type_t *type);
|
||||
|
||||
@ -671,6 +693,31 @@ esp_err_t esp_wifi_set_promiscuous_filter(const wifi_promiscuous_filter_t *filte
|
||||
*/
|
||||
esp_err_t esp_wifi_get_promiscuous_filter(wifi_promiscuous_filter_t *filter);
|
||||
|
||||
/**
|
||||
* @brief Enable subtype filter of the control packet in promiscuous mode.
|
||||
*
|
||||
* @note The default filter is to filter none control packet.
|
||||
*
|
||||
* @param filter the subtype of the control packet filtered in promiscuous mode.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
*/
|
||||
esp_err_t esp_wifi_set_promiscuous_ctrl_filter(const wifi_promiscuous_filter_t *filter);
|
||||
|
||||
/**
|
||||
* @brief Get the subtype filter of the control packet in promiscuous mode.
|
||||
*
|
||||
* @param[out] filter store the current status of subtype filter of the control packet in promiscuous mode
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_WIFI_ARG: invalid argument
|
||||
*/
|
||||
esp_err_t esp_wifi_get_promiscuous_ctrl_filter(wifi_promiscuous_filter_t *filter);
|
||||
|
||||
/**
|
||||
* @brief Set the configuration of the ESP32 STA or AP
|
||||
*
|
||||
@ -714,6 +761,9 @@ esp_err_t esp_wifi_get_config(wifi_interface_t interface, wifi_config_t *conf);
|
||||
* @attention SSC only API
|
||||
*
|
||||
* @param[out] sta station list
|
||||
* ap can get the connected sta's phy mode info through the struct member
|
||||
* phy_11b,phy_11g,phy_11n,phy_lr in the wifi_sta_info_t struct.
|
||||
* For example, phy_11b = 1 imply that sta support 802.11b mode
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
@ -751,7 +801,7 @@ esp_err_t esp_wifi_set_storage(wifi_storage_t storage);
|
||||
* - ESP_ERR_WIFI_MODE: WiFi internal error, the station/soft-AP control block is invalid
|
||||
* - others: refer to error code in esp_err.h
|
||||
*/
|
||||
esp_err_t esp_wifi_set_auto_connect(bool en);
|
||||
esp_err_t esp_wifi_set_auto_connect(bool en) __attribute__ ((deprecated));
|
||||
|
||||
/**
|
||||
* @brief Get the auto connect flag
|
||||
@ -763,7 +813,7 @@ esp_err_t esp_wifi_set_auto_connect(bool en);
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_INVALID_ARG: invalid argument
|
||||
*/
|
||||
esp_err_t esp_wifi_get_auto_connect(bool *en);
|
||||
esp_err_t esp_wifi_get_auto_connect(bool *en) __attribute__ ((deprecated));
|
||||
|
||||
/**
|
||||
* @brief Set 802.11 Vendor-Specific Information Element
|
||||
@ -869,6 +919,164 @@ esp_err_t esp_wifi_set_max_tx_power(int8_t power);
|
||||
*/
|
||||
esp_err_t esp_wifi_get_max_tx_power(int8_t *power);
|
||||
|
||||
/**
|
||||
* @brief Set mask to enable or disable some WiFi events
|
||||
*
|
||||
* @attention 1. Mask can be created by logical OR of various WIFI_EVENT_MASK_ constants.
|
||||
* Events which have corresponding bit set in the mask will not be delivered to the system event handler.
|
||||
* @attention 2. Default WiFi event mask is WIFI_EVENT_MASK_AP_PROBEREQRECVED.
|
||||
* @attention 3. There may be lots of stations sending probe request data around.
|
||||
* Don't unmask this event unless you need to receive probe request data.
|
||||
*
|
||||
* @param mask WiFi event mask.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
*/
|
||||
esp_err_t esp_wifi_set_event_mask(uint32_t mask);
|
||||
|
||||
/**
|
||||
* @brief Get mask of WiFi events
|
||||
*
|
||||
* @param mask WiFi event mask.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_WIFI_ARG: invalid argument
|
||||
*/
|
||||
esp_err_t esp_wifi_get_event_mask(uint32_t *mask);
|
||||
|
||||
/**
|
||||
* @brief Send raw ieee80211 data
|
||||
*
|
||||
* @attention Currently only support for sending beacon/probe request/probe response/action and non-QoS
|
||||
* data frame
|
||||
*
|
||||
* @param ifx interface if the Wi-Fi mode is Station, the ifx should be WIFI_IF_STA. If the Wi-Fi
|
||||
* mode is SoftAP, the ifx should be WIFI_IF_AP. If the Wi-Fi mode is Station+SoftAP, the
|
||||
* ifx should be WIFI_IF_STA or WIFI_IF_AP. If the ifx is wrong, the API returns ESP_ERR_WIFI_IF.
|
||||
* @param buffer raw ieee80211 buffer
|
||||
* @param len the length of raw buffer, the len must be <= 1500 Bytes and >= 24 Bytes
|
||||
* @param en_sys_seq indicate whether use the internal sequence number. If en_sys_seq is false, the
|
||||
* sequence in raw buffer is unchanged, otherwise it will be overwritten by WiFi driver with
|
||||
* the system sequence number.
|
||||
* Generally, if esp_wifi_80211_tx is called before the Wi-Fi connection has been set up, both
|
||||
* en_sys_seq==true and en_sys_seq==false are fine. However, if the API is called after the Wi-Fi
|
||||
* connection has been set up, en_sys_seq must be true, otherwise ESP_ERR_WIFI_ARG is returned.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: success
|
||||
* - ESP_ERR_WIFI_IF: Invalid interface
|
||||
* - ESP_ERR_INVALID_ARG: Invalid parameter
|
||||
* - ESP_ERR_WIFI_NO_MEM: out of memory
|
||||
*/
|
||||
|
||||
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);
|
||||
|
||||
/**
|
||||
* @brief The RX callback function of Channel State Information(CSI) data.
|
||||
*
|
||||
* Each time a CSI data is received, the callback function will be called.
|
||||
*
|
||||
* @param ctx context argument, passed to esp_wifi_set_csi_rx_cb() when registering callback function.
|
||||
* @param data CSI data received. The memory that it points to will be deallocated after callback function returns.
|
||||
*
|
||||
*/
|
||||
typedef void (* wifi_csi_cb_t)(void *ctx, wifi_csi_info_t *data);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Register the RX callback function of CSI data.
|
||||
*
|
||||
* Each time a CSI data is received, the callback function will be called.
|
||||
*
|
||||
* @param cb callback
|
||||
* @param ctx context argument, passed to callback function
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
*/
|
||||
|
||||
esp_err_t esp_wifi_set_csi_rx_cb(wifi_csi_cb_t cb, void *ctx);
|
||||
|
||||
/**
|
||||
* @brief Set CSI data configuration
|
||||
*
|
||||
* @param config configuration
|
||||
*
|
||||
* return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_WIFI_NOT_START: WiFi is not started by esp_wifi_start or promiscuous mode is not enabled
|
||||
* - ESP_ERR_INVALID_ARG: invalid argument
|
||||
*/
|
||||
esp_err_t esp_wifi_set_csi_config(const wifi_csi_config_t *config);
|
||||
|
||||
/**
|
||||
* @brief Enable or disable CSI
|
||||
*
|
||||
* @param en true - enable, false - disable
|
||||
*
|
||||
* return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_WIFI_NOT_START: WiFi is not started by esp_wifi_start or promiscuous mode is not enabled
|
||||
* - ESP_ERR_INVALID_ARG: invalid argument
|
||||
*/
|
||||
esp_err_t esp_wifi_set_csi(bool en);
|
||||
|
||||
/**
|
||||
* @brief Set antenna GPIO configuration
|
||||
*
|
||||
* @param config Antenna GPIO configuration.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_WIFI_ARG: Invalid argument, e.g. parameter is NULL, invalid GPIO number etc
|
||||
*/
|
||||
esp_err_t esp_wifi_set_ant_gpio(const wifi_ant_gpio_config_t *config);
|
||||
|
||||
/**
|
||||
* @brief Get current antenna GPIO configuration
|
||||
*
|
||||
* @param config Antenna GPIO configuration.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_WIFI_ARG: invalid argument, e.g. parameter is NULL
|
||||
*/
|
||||
esp_err_t esp_wifi_get_ant_gpio(wifi_ant_gpio_config_t *config);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Set antenna configuration
|
||||
*
|
||||
* @param config Antenna configuration.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_WIFI_ARG: Invalid argument, e.g. parameter is NULL, invalid antenna mode or invalid GPIO number
|
||||
*/
|
||||
esp_err_t esp_wifi_set_ant(const wifi_ant_config_t *config);
|
||||
|
||||
/**
|
||||
* @brief Get current antenna configuration
|
||||
*
|
||||
* @param config Antenna configuration.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
|
||||
* - ESP_ERR_WIFI_ARG: invalid argument, e.g. parameter is NULL
|
||||
*/
|
||||
esp_err_t esp_wifi_get_ant(wifi_ant_config_t *config);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -27,6 +27,8 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ESP_WIFI_CRYPTO_VERSION 0x00000001
|
||||
|
||||
/*
|
||||
* Enumeration for hash operations.
|
||||
* When WPA2 is connecting, this enum is used to
|
||||
@ -80,7 +82,7 @@ typedef esp_crypto_hash_t * (*esp_crypto_hash_init_t)(esp_crypto_hash_alg_t alg,
|
||||
* @param len Length of the buffer.
|
||||
*
|
||||
*/
|
||||
typedef void * (*esp_crypto_hash_update_t)(esp_crypto_hash_t *ctx, const unsigned char *data, int len);
|
||||
typedef void (*esp_crypto_hash_update_t)(esp_crypto_hash_t *ctx, const unsigned char *data, int len);
|
||||
|
||||
/**
|
||||
* @brief The crypto callback function used in wpa enterprise hash operation when connect.
|
||||
@ -95,7 +97,7 @@ typedef void * (*esp_crypto_hash_update_t)(esp_crypto_hash_t *ctx, const unsigne
|
||||
* or -2 on other failures (including failed crypto_hash_update() operations)
|
||||
*
|
||||
*/
|
||||
typedef int * (*esp_crypto_hash_finish_t)(esp_crypto_hash_t *ctx, unsigned char *hash, int *len);
|
||||
typedef int (*esp_crypto_hash_finish_t)(esp_crypto_hash_t *ctx, unsigned char *hash, int *len);
|
||||
|
||||
/**
|
||||
* @brief The AES callback function when do WPS connect.
|
||||
@ -105,7 +107,7 @@ typedef int * (*esp_crypto_hash_finish_t)(esp_crypto_hash_t *ctx, unsigned char
|
||||
* @param data Data to encrypt in-place.
|
||||
* @param data_len Length of data in bytes (must be divisible by 16)
|
||||
*/
|
||||
typedef int * (*esp_aes_128_encrypt_t)(const unsigned char *key, const unsigned char *iv, unsigned char *data, int data_len);
|
||||
typedef int (*esp_aes_128_encrypt_t)(const unsigned char *key, const unsigned char *iv, unsigned char *data, int data_len);
|
||||
|
||||
/**
|
||||
* @brief The AES callback function when do WPS connect.
|
||||
@ -116,7 +118,7 @@ typedef int * (*esp_aes_128_encrypt_t)(const unsigned char *key, const unsigned
|
||||
* @param data_len Length of data in bytes (must be divisible by 16)
|
||||
*
|
||||
*/
|
||||
typedef int * (*esp_aes_128_decrypt_t)(const unsigned char *key, const unsigned char *iv, unsigned char *data, int data_len);
|
||||
typedef int (*esp_aes_128_decrypt_t)(const unsigned char *key, const unsigned char *iv, unsigned char *data, int data_len);
|
||||
|
||||
/**
|
||||
* @brief The AES callback function when do STA connect.
|
||||
@ -127,7 +129,7 @@ typedef int * (*esp_aes_128_decrypt_t)(const unsigned char *key, const unsigned
|
||||
* @param cipher Wrapped key, (n + 1) * 64 bits
|
||||
*
|
||||
*/
|
||||
typedef int * (*esp_aes_wrap_t)(const unsigned char *kek, int n, const unsigned char *plain, unsigned char *cipher);
|
||||
typedef int (*esp_aes_wrap_t)(const unsigned char *kek, int n, const unsigned char *plain, unsigned char *cipher);
|
||||
|
||||
/**
|
||||
* @brief The AES callback function when do STA connect.
|
||||
@ -138,7 +140,7 @@ typedef int * (*esp_aes_wrap_t)(const unsigned char *kek, int n, const unsigned
|
||||
* @param plain Plaintext key, n * 64 bits
|
||||
*
|
||||
*/
|
||||
typedef int * (*esp_aes_unwrap_t)(const unsigned char *kek, int n, const unsigned char *cipher, unsigned char *plain);
|
||||
typedef int (*esp_aes_unwrap_t)(const unsigned char *kek, int n, const unsigned char *cipher, unsigned char *plain);
|
||||
|
||||
/**
|
||||
* @brief The crypto callback function used in wpa enterprise cipher operation when connect.
|
||||
@ -162,7 +164,7 @@ typedef esp_crypto_cipher_t * (*esp_crypto_cipher_init_t)(esp_crypto_cipher_alg_
|
||||
* @param len Length of the plaintext.
|
||||
*
|
||||
*/
|
||||
typedef int * (*esp_crypto_cipher_encrypt_t)(esp_crypto_cipher_t *ctx,
|
||||
typedef int (*esp_crypto_cipher_encrypt_t)(esp_crypto_cipher_t *ctx,
|
||||
const unsigned char *plain, unsigned char *crypt, int len);
|
||||
/**
|
||||
* @brief The crypto callback function used in wpa enterprise cipher operation when connect.
|
||||
@ -174,7 +176,7 @@ typedef int * (*esp_crypto_cipher_encrypt_t)(esp_crypto_cipher_t *ctx,
|
||||
* @param len Length of the cipher text.
|
||||
*
|
||||
*/
|
||||
typedef int * (*esp_crypto_cipher_decrypt_t)(esp_crypto_cipher_t *ctx,
|
||||
typedef int (*esp_crypto_cipher_decrypt_t)(esp_crypto_cipher_t *ctx,
|
||||
const unsigned char *crypt, unsigned char *plain, int len);
|
||||
/**
|
||||
* @brief The crypto callback function used in wpa enterprise cipher operation when connect.
|
||||
@ -183,7 +185,7 @@ typedef int * (*esp_crypto_cipher_decrypt_t)(esp_crypto_cipher_t *ctx,
|
||||
* @param ctx Context pointer from esp_crypto_cipher_init_t callback function.
|
||||
*
|
||||
*/
|
||||
typedef void * (*esp_crypto_cipher_deinit_t)(esp_crypto_cipher_t *ctx);
|
||||
typedef void (*esp_crypto_cipher_deinit_t)(esp_crypto_cipher_t *ctx);
|
||||
|
||||
/**
|
||||
* @brief The SHA256 callback function when do WPS connect.
|
||||
@ -195,7 +197,7 @@ typedef void * (*esp_crypto_cipher_deinit_t)(esp_crypto_cipher_t *ctx);
|
||||
* @param mac Buffer for the hash (20 bytes).
|
||||
*
|
||||
*/
|
||||
typedef void * (*esp_hmac_sha256_t)(const unsigned char *key, int key_len, const unsigned char *data,
|
||||
typedef void (*esp_hmac_sha256_t)(const unsigned char *key, int key_len, const unsigned char *data,
|
||||
int data_len, unsigned char *mac);
|
||||
|
||||
/**
|
||||
@ -209,7 +211,7 @@ typedef void * (*esp_hmac_sha256_t)(const unsigned char *key, int key_len, const
|
||||
* @param mac Buffer for the hash (32 bytes).
|
||||
*
|
||||
*/
|
||||
typedef void * (*esp_hmac_sha256_vector_t)(const unsigned char *key, int key_len, int num_elem,
|
||||
typedef void (*esp_hmac_sha256_vector_t)(const unsigned char *key, int key_len, int num_elem,
|
||||
const unsigned char *addr[], const int *len, unsigned char *mac);
|
||||
|
||||
/**
|
||||
@ -224,7 +226,7 @@ typedef void * (*esp_hmac_sha256_vector_t)(const unsigned char *key, int key_len
|
||||
* @param buf_len Number of bytes of key to generate.
|
||||
*
|
||||
*/
|
||||
typedef void * (*esp_sha256_prf_t)(const unsigned char *key, int key_len, const char *label,
|
||||
typedef void (*esp_sha256_prf_t)(const unsigned char *key, int key_len, const char *label,
|
||||
const unsigned char *data, int data_len, unsigned char *buf, int buf_len);
|
||||
|
||||
/**
|
||||
@ -233,10 +235,10 @@ typedef void * (*esp_sha256_prf_t)(const unsigned char *key, int key_len, const
|
||||
* @param num_elem Number of elements in the data vector.
|
||||
* @param addr Pointers to the data areas.
|
||||
* @param len Lengths of the data blocks.
|
||||
* @param mac Buffer for the hash.
|
||||
* @paramac Buffer for the hash.
|
||||
*
|
||||
*/
|
||||
typedef int * (*esp_sha256_vector_t)(int num_elem, const unsigned char *addr[], const int *len,
|
||||
typedef int (*esp_sha256_vector_t)(int num_elem, const unsigned char *addr[], const int *len,
|
||||
unsigned char *mac);
|
||||
|
||||
/**
|
||||
@ -253,20 +255,471 @@ typedef int * (*esp_sha256_vector_t)(int num_elem, const unsigned char *addr[],
|
||||
* @param result_len Result length (max buffer size on input, real len on output).
|
||||
*
|
||||
*/
|
||||
typedef int * (*esp_crypto_mod_exp_t)(const unsigned char *base, int base_len,
|
||||
typedef int (*esp_crypto_mod_exp_t)(const unsigned char *base, int base_len,
|
||||
const unsigned char *power, int power_len,
|
||||
const unsigned char *modulus, int modulus_len,
|
||||
unsigned char *result, unsigned int *result_len);
|
||||
|
||||
/**
|
||||
* @brief HMAC-MD5 over data buffer (RFC 2104)'
|
||||
*
|
||||
* @key: Key for HMAC operations
|
||||
* @key_len: Length of the key in bytes
|
||||
* @data: Pointers to the data area
|
||||
* @data_len: Length of the data area
|
||||
* @mac: Buffer for the hash (16 bytes)
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*/
|
||||
typedef int (*esp_hmac_md5_t)(const unsigned char *key, unsigned int key_len, const unsigned char *data,
|
||||
unsigned int data_len, unsigned char *mac);
|
||||
|
||||
/**
|
||||
* @brief HMAC-MD5 over data vector (RFC 2104)
|
||||
*
|
||||
* @key: Key for HMAC operations
|
||||
* @key_len: Length of the key in bytes
|
||||
* @num_elem: Number of elements in the data vector
|
||||
* @addr: Pointers to the data areas
|
||||
* @len: Lengths of the data blocks
|
||||
* @mac: Buffer for the hash (16 bytes)
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*/
|
||||
typedef int (*esp_hmac_md5_vector_t)(const unsigned char *key, unsigned int key_len, unsigned int num_elem,
|
||||
const unsigned char *addr[], const unsigned int *len, unsigned char *mac);
|
||||
|
||||
/**
|
||||
* @brief HMAC-SHA1 over data buffer (RFC 2104)
|
||||
*
|
||||
* @key: Key for HMAC operations
|
||||
* @key_len: Length of the key in bytes
|
||||
* @data: Pointers to the data area
|
||||
* @data_len: Length of the data area
|
||||
* @mac: Buffer for the hash (20 bytes)
|
||||
* Returns: 0 on success, -1 of failure
|
||||
*/
|
||||
typedef int (*esp_hmac_sha1_t)(const unsigned char *key, unsigned int key_len, const unsigned char *data,
|
||||
unsigned int data_len, unsigned char *mac);
|
||||
|
||||
/**
|
||||
* @brief HMAC-SHA1 over data vector (RFC 2104)
|
||||
*
|
||||
* @key: Key for HMAC operations
|
||||
* @key_len: Length of the key in bytes
|
||||
* @num_elem: Number of elements in the data vector
|
||||
* @addr: Pointers to the data areas
|
||||
* @len: Lengths of the data blocks
|
||||
* @mac: Buffer for the hash (20 bytes)
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*/
|
||||
typedef int (*esp_hmac_sha1_vector_t)(const unsigned char *key, unsigned int key_len, unsigned int num_elem,
|
||||
const unsigned char *addr[], const unsigned int *len, unsigned char *mac);
|
||||
|
||||
/**
|
||||
* @brief SHA1-based Pseudo-Random Function (PRF) (IEEE 802.11i, 8.5.1.1)
|
||||
*
|
||||
* @key: Key for PRF
|
||||
* @key_len: Length of the key in bytes
|
||||
* @label: A unique label for each purpose of the PRF
|
||||
* @data: Extra data to bind into the key
|
||||
* @data_len: Length of the data
|
||||
* @buf: Buffer for the generated pseudo-random key
|
||||
* @buf_len: Number of bytes of key to generate
|
||||
* Returns: 0 on success, -1 of failure
|
||||
*
|
||||
* This function is used to derive new, cryptographically separate keys from a
|
||||
* given key (e.g., PMK in IEEE 802.11i).
|
||||
*/
|
||||
typedef int (*esp_sha1_prf_t)(const unsigned char *key, unsigned int key_len, const char *label,
|
||||
const unsigned char *data, unsigned int data_len, unsigned char *buf, unsigned int buf_len);
|
||||
|
||||
/**
|
||||
* @brief SHA-1 hash for data vector
|
||||
*
|
||||
* @num_elem: Number of elements in the data vector
|
||||
* @addr: Pointers to the data areas
|
||||
* @len: Lengths of the data blocks
|
||||
* @mac: Buffer for the hash
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*/
|
||||
typedef int (*esp_sha1_vector_t)(unsigned int num_elem, const unsigned char *addr[], const unsigned int *len,
|
||||
unsigned char *mac);
|
||||
|
||||
/**
|
||||
* @brief SHA1-based key derivation function (PBKDF2) for IEEE 802.11i
|
||||
*
|
||||
* @passphrase: ASCII passphrase
|
||||
* @ssid: SSID
|
||||
* @ssid_len: SSID length in bytes
|
||||
* @iterations: Number of iterations to run
|
||||
* @buf: Buffer for the generated key
|
||||
* @buflen: Length of the buffer in bytes
|
||||
* Returns: 0 on success, -1 of failure
|
||||
*
|
||||
* This function is used to derive PSK for WPA-PSK. For this protocol,
|
||||
* iterations is set to 4096 and buflen to 32. This function is described in
|
||||
* IEEE Std 802.11-2004, Clause H.4. The main construction is from PKCS#5 v2.0.
|
||||
*/
|
||||
typedef int (*esp_pbkdf2_sha1_t)(const char *passphrase, const char *ssid, unsigned int ssid_len,
|
||||
int iterations, unsigned char *buf, unsigned int buflen);
|
||||
|
||||
/**
|
||||
* @brief XOR RC4 stream to given data with skip-stream-start
|
||||
*
|
||||
* @key: RC4 key
|
||||
* @keylen: RC4 key length
|
||||
* @skip: number of bytes to skip from the beginning of the RC4 stream
|
||||
* @data: data to be XOR'ed with RC4 stream
|
||||
* @data_len: buf length
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*
|
||||
* Generate RC4 pseudo random stream for the given key, skip beginning of the
|
||||
* stream, and XOR the end result with the data buffer to perform RC4
|
||||
* encryption/decryption.
|
||||
*/
|
||||
typedef int (*esp_rc4_skip_t)(const unsigned char *key, unsigned int keylen, unsigned int skip,
|
||||
unsigned char *data, unsigned int data_len);
|
||||
|
||||
/**
|
||||
* @brief MD5 hash for data vector
|
||||
*
|
||||
* @num_elem: Number of elements in the data vector
|
||||
* @addr: Pointers to the data areas
|
||||
* @len: Lengths of the data blocks
|
||||
* @mac: Buffer for the hash
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*/
|
||||
typedef int (*esp_md5_vector_t)(unsigned int num_elem, const unsigned char *addr[], const unsigned int *len,
|
||||
unsigned char *mac);
|
||||
|
||||
/**
|
||||
* @brief Encrypt one AES block
|
||||
*
|
||||
* @ctx: Context pointer from aes_encrypt_init()
|
||||
* @plain: Plaintext data to be encrypted (16 bytes)
|
||||
* @crypt: Buffer for the encrypted data (16 bytes)
|
||||
*/
|
||||
typedef void (*esp_aes_encrypt_t)(void *ctx, const unsigned char *plain, unsigned char *crypt);
|
||||
|
||||
/**
|
||||
* @brief Initialize AES for encryption
|
||||
*
|
||||
* @key: Encryption key
|
||||
* @len: Key length in bytes (usually 16, i.e., 128 bits)
|
||||
* Returns: Pointer to context data or %NULL on failure
|
||||
*/
|
||||
typedef void * (*esp_aes_encrypt_init_t)(const unsigned char *key, unsigned int len);
|
||||
|
||||
/**
|
||||
* @brief Deinitialize AES encryption
|
||||
*
|
||||
* @ctx: Context pointer from aes_encrypt_init()
|
||||
*/
|
||||
typedef void (*esp_aes_encrypt_deinit_t)(void *ctx);
|
||||
|
||||
/**
|
||||
* @brief Decrypt one AES block
|
||||
*
|
||||
* @ctx: Context pointer from aes_encrypt_init()
|
||||
* @crypt: Encrypted data (16 bytes)
|
||||
* @plain: Buffer for the decrypted data (16 bytes)
|
||||
*/
|
||||
typedef void (*esp_aes_decrypt_t)(void *ctx, const unsigned char *crypt, unsigned char *plain);
|
||||
|
||||
/**
|
||||
* @brief Initialize AES for decryption
|
||||
*
|
||||
* @key: Decryption key
|
||||
* @len: Key length in bytes (usually 16, i.e., 128 bits)
|
||||
* Returns: Pointer to context data or %NULL on failure
|
||||
*/
|
||||
typedef void * (*esp_aes_decrypt_init_t)(const unsigned char *key, unsigned int len);
|
||||
|
||||
/**
|
||||
* @brief Deinitialize AES decryption
|
||||
*
|
||||
* @ctx: Context pointer from aes_encrypt_init()
|
||||
*/
|
||||
typedef void (*esp_aes_decrypt_deinit_t)(void *ctx);
|
||||
|
||||
/**
|
||||
* @brief Initialize TLS library
|
||||
*
|
||||
* @conf: Configuration data for TLS library
|
||||
* Returns: Context data to be used as tls_ctx in calls to other functions,
|
||||
* or %NULL on failure.
|
||||
*
|
||||
* Called once during program startup and once for each RSN pre-authentication
|
||||
* session. In other words, there can be two concurrent TLS contexts. If global
|
||||
* library initialization is needed (i.e., one that is shared between both
|
||||
* authentication types), the TLS library wrapper should maintain a reference
|
||||
* counter and do global initialization only when moving from 0 to 1 reference.
|
||||
*/
|
||||
typedef void * (*esp_tls_init_t)(void);
|
||||
|
||||
/**
|
||||
* @brief Deinitialize TLS library
|
||||
*
|
||||
* @tls_ctx: TLS context data from tls_init()
|
||||
*
|
||||
* Called once during program shutdown and once for each RSN pre-authentication
|
||||
* session. If global library deinitialization is needed (i.e., one that is
|
||||
* shared between both authentication types), the TLS library wrapper should
|
||||
* maintain a reference counter and do global deinitialization only when moving
|
||||
* from 1 to 0 references.
|
||||
*/
|
||||
typedef void (*esp_tls_deinit_t)(void *tls_ctx);
|
||||
|
||||
/**
|
||||
* @brief Add certificate and private key for connect
|
||||
|
||||
* @sm: eap state machine
|
||||
*
|
||||
* Returns: 0 for success, -1 state machine didn't exist, -2 short of certificate or key
|
||||
*/
|
||||
typedef int (*esp_eap_peer_blob_init_t)(void *sm);
|
||||
|
||||
/**
|
||||
* @brief delete the certificate and private
|
||||
*
|
||||
* @sm: eap state machine
|
||||
*
|
||||
*/
|
||||
typedef void (*esp_eap_peer_blob_deinit_t)(void *sm);
|
||||
|
||||
/**
|
||||
* @brief Initialize the eap state machine
|
||||
*
|
||||
* @sm: eap state machine
|
||||
* @private_key_passwd: the start address of private_key_passwd
|
||||
* @private_key_passwd_len: length of private_key_password
|
||||
*
|
||||
* Returns: 0 is success, -1 state machine didn't exist, -2 short of parameters
|
||||
*
|
||||
*/
|
||||
typedef int (*esp_eap_peer_config_init_t)(void *sm, unsigned char *private_key_passwd,int private_key_passwd_len);
|
||||
|
||||
/**
|
||||
* @brief Deinit the eap state machine
|
||||
*
|
||||
* @sm: eap state machine
|
||||
*
|
||||
*/
|
||||
typedef void (*esp_eap_peer_config_deinit_t)(void *sm);
|
||||
|
||||
/**
|
||||
* @brief Register the eap method
|
||||
*
|
||||
* Note: ESP32 only support PEAP/TTLS/TLS three eap methods now.
|
||||
*
|
||||
*/
|
||||
typedef int (*esp_eap_peer_register_methods_t)(void);
|
||||
|
||||
/**
|
||||
* @brief remove the eap method
|
||||
*
|
||||
* Note: ESP32 only support PEAP/TTLS/TLS three eap methods now.
|
||||
*
|
||||
*/
|
||||
typedef void (*esp_eap_peer_unregister_methods_t)(void);
|
||||
|
||||
/**
|
||||
* @brief remove the eap method before build new connect
|
||||
*
|
||||
* @sm: eap state machine
|
||||
* @txt: not used now
|
||||
*/
|
||||
typedef void (*esp_eap_deinit_prev_method_t)(void *sm, const char *txt);
|
||||
|
||||
/**
|
||||
* @brief Get EAP method based on type number
|
||||
*
|
||||
* @vendor: EAP Vendor-Id (0 = IETF)
|
||||
* @method: EAP type number
|
||||
* Returns: Pointer to EAP method or %NULL if not found
|
||||
*/
|
||||
typedef const void * (*esp_eap_peer_get_eap_method_t)(int vendor, int method);
|
||||
|
||||
/**
|
||||
* @brief Abort EAP authentication
|
||||
*
|
||||
* @sm: Pointer to EAP state machine allocated with eap_peer_sm_init()
|
||||
*
|
||||
* Release system resources that have been allocated for the authentication
|
||||
* session without fully deinitializing the EAP state machine.
|
||||
*/
|
||||
typedef void (*esp_eap_sm_abort_t)(void *sm);
|
||||
|
||||
/**
|
||||
* @brief Build EAP-NAK for the current network
|
||||
*
|
||||
* @sm: Pointer to EAP state machine allocated with eap_peer_sm_init()
|
||||
* @type: EAP type of the fail reason
|
||||
* @id: EAP identifier for the packet
|
||||
*
|
||||
* This function allocates and builds a nak packet for the
|
||||
* current network. The caller is responsible for freeing the returned data.
|
||||
*/
|
||||
typedef void * (*esp_eap_sm_build_nak_t)(void *sm, int type, unsigned char id);
|
||||
|
||||
/**
|
||||
* @brief Build EAP-Identity/Response for the current network
|
||||
*
|
||||
* @sm: Pointer to EAP state machine allocated with eap_peer_sm_init()
|
||||
* @id: EAP identifier for the packet
|
||||
* @encrypted: Whether the packet is for encrypted tunnel (EAP phase 2)
|
||||
* Returns: Pointer to the allocated EAP-Identity/Response packet or %NULL on
|
||||
* failure
|
||||
*
|
||||
* This function allocates and builds an EAP-Identity/Response packet for the
|
||||
* current network. The caller is responsible for freeing the returned data.
|
||||
*/
|
||||
typedef void * (*esp_eap_sm_build_identity_resp_t)(void *sm, unsigned char id, int encrypted);
|
||||
|
||||
/**
|
||||
* @brief Allocate a buffer for an EAP message
|
||||
*
|
||||
* @vendor: Vendor-Id (0 = IETF)
|
||||
* @type: EAP type
|
||||
* @payload_len: Payload length in bytes (data after Type)
|
||||
* @code: Message Code (EAP_CODE_*)
|
||||
* @identifier: Identifier
|
||||
* Returns: Pointer to the allocated message buffer or %NULL on error
|
||||
*
|
||||
* This function can be used to allocate a buffer for an EAP message and fill
|
||||
* in the EAP header. This function is automatically using expanded EAP header
|
||||
* if the selected Vendor-Id is not IETF. In other words, most EAP methods do
|
||||
* not need to separately select which header type to use when using this
|
||||
* function to allocate the message buffers. The returned buffer has room for
|
||||
* payload_len bytes and has the EAP header and Type field already filled in.
|
||||
*/
|
||||
typedef void * (*esp_eap_msg_alloc_t)(int vendor, int type, unsigned int payload_len,
|
||||
unsigned char code, unsigned char identifier);
|
||||
|
||||
/**
|
||||
* @brief get the enrollee mac address
|
||||
* @mac_addr: instore the mac address of enrollee
|
||||
* @uuid: Universally Unique Identifer of the enrollee
|
||||
*
|
||||
*/
|
||||
typedef void (*esp_uuid_gen_mac_addr_t)(const unsigned char *mac_addr, unsigned char *uuid);
|
||||
|
||||
/**
|
||||
* @brief free the message after finish DH
|
||||
*
|
||||
*/
|
||||
typedef void * (*esp_dh5_free_t)(void *ctx);
|
||||
|
||||
/**
|
||||
* @brief Build WPS IE for (Re)Association Request
|
||||
*
|
||||
* @req_type: Value for Request Type attribute
|
||||
* Returns: WPS IE or %NULL on failure
|
||||
*
|
||||
* The caller is responsible for freeing the buffer.
|
||||
*/
|
||||
typedef void * (*esp_wps_build_assoc_req_ie_t)(int req_type);
|
||||
|
||||
/**
|
||||
* @brief Build WPS IE for (Re)Association Response
|
||||
*
|
||||
* Returns: WPS IE or %NULL on failure
|
||||
*
|
||||
* The caller is responsible for freeing the buffer.
|
||||
*/
|
||||
typedef void * (*esp_wps_build_assoc_resp_ie_t)(void);
|
||||
|
||||
/**
|
||||
* @brief Build WPS IE for Probe Request
|
||||
*
|
||||
* @pw_id: Password ID (DEV_PW_PUSHBUTTON for active PBC and DEV_PW_DEFAULT for
|
||||
* most other use cases)
|
||||
* @dev: Device attributes
|
||||
* @uuid: Own UUID
|
||||
* @req_type: Value for Request Type attribute
|
||||
* @num_req_dev_types: Number of requested device types
|
||||
* @req_dev_types: Requested device types (8 * num_req_dev_types octets) or
|
||||
* %NULL if none
|
||||
* Returns: WPS IE or %NULL on failure
|
||||
*
|
||||
* The caller is responsible for freeing the buffer.
|
||||
*/
|
||||
typedef void * (*esp_wps_build_probe_req_ie_t)(uint16_t pw_id, void *dev, const unsigned char *uuid,
|
||||
int req_type, unsigned int num_req_dev_types, const unsigned char *req_dev_types);
|
||||
|
||||
/**
|
||||
* @brief build public key for exchange in M1
|
||||
*
|
||||
*
|
||||
*/
|
||||
typedef int (*esp_wps_build_public_key_t)(void *wps, void *msg, int mode);
|
||||
|
||||
|
||||
/**
|
||||
* @brief get the wps information in exchange password
|
||||
*
|
||||
*
|
||||
*/
|
||||
typedef void * (*esp_wps_enrollee_get_msg_t)(void *wps, void *op_code);
|
||||
|
||||
/**
|
||||
* @brief deal with the wps information in exchange password
|
||||
*
|
||||
*
|
||||
*/
|
||||
typedef int (*esp_wps_enrollee_process_msg_t)(void *wps, int op_code, const void *msg);
|
||||
|
||||
/**
|
||||
* @brief Generate a random PIN
|
||||
*
|
||||
* Returns: Eight digit PIN (i.e., including the checksum digit)
|
||||
*/
|
||||
typedef unsigned int (*esp_wps_generate_pin_t)(void);
|
||||
|
||||
/**
|
||||
* @brief Check whether WPS IE indicates active PIN
|
||||
*
|
||||
* @msg: WPS IE contents from Beacon or Probe Response frame
|
||||
* Returns: 1 if PIN Registrar is active, 0 if not
|
||||
*/
|
||||
typedef int (*esp_wps_is_selected_pin_registrar_t)(const void *msg, unsigned char *bssid);
|
||||
|
||||
/**
|
||||
* @brief Check whether WPS IE indicates active PBC
|
||||
*
|
||||
* @msg: WPS IE contents from Beacon or Probe Response frame
|
||||
* Returns: 1 if PBC Registrar is active, 0 if not
|
||||
*/
|
||||
typedef int (*esp_wps_is_selected_pbc_registrar_t)(const void *msg, unsigned char *bssid);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief The crypto callback function structure used when do station security connect.
|
||||
* The structure can be set as software crypto or the crypto optimized by ESP32
|
||||
* hardware.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t size;
|
||||
uint32_t version;
|
||||
esp_aes_wrap_t aes_wrap; /**< station connect function used when send EAPOL frame */
|
||||
esp_aes_unwrap_t aes_unwrap; /**< station connect function used when decrypt key data */
|
||||
esp_hmac_sha256_vector_t hmac_sha256_vector; /**< station connect function used when check MIC */
|
||||
esp_sha256_prf_t sha256_prf; /**< station connect function used when check MIC */
|
||||
esp_hmac_md5_t hmac_md5;
|
||||
esp_hmac_md5_vector_t hamc_md5_vector;
|
||||
esp_hmac_sha1_t hmac_sha1;
|
||||
esp_hmac_sha1_vector_t hmac_sha1_vector;
|
||||
esp_sha1_prf_t sha1_prf;
|
||||
esp_sha1_vector_t sha1_vector;
|
||||
esp_pbkdf2_sha1_t pbkdf2_sha1;
|
||||
esp_rc4_skip_t rc4_skip;
|
||||
esp_md5_vector_t md5_vector;
|
||||
esp_aes_encrypt_t aes_encrypt;
|
||||
esp_aes_encrypt_init_t aes_encrypt_init;
|
||||
esp_aes_encrypt_deinit_t aes_encrypt_deinit;
|
||||
esp_aes_decrypt_t aes_decrypt;
|
||||
esp_aes_decrypt_init_t aes_decrypt_init;
|
||||
esp_aes_decrypt_deinit_t aes_decrypt_deinit;
|
||||
}wpa_crypto_funcs_t;
|
||||
|
||||
/**
|
||||
@ -275,12 +728,26 @@ typedef struct {
|
||||
* hardware.
|
||||
*/
|
||||
typedef struct{
|
||||
uint32_t size;
|
||||
uint32_t version;
|
||||
esp_aes_128_encrypt_t aes_128_encrypt; /**< function used to process message when do WPS */
|
||||
esp_aes_128_decrypt_t aes_128_decrypt; /**< function used to process message when do WPS */
|
||||
esp_crypto_mod_exp_t crypto_mod_exp; /**< function used to calculate public key and private key */
|
||||
esp_hmac_sha256_t hmac_sha256; /**< function used to get attribute */
|
||||
esp_hmac_sha256_vector_t hmac_sha256_vector; /**< function used to process message when do WPS */
|
||||
esp_sha256_vector_t sha256_vector; /**< function used to process message when do WPS */
|
||||
esp_uuid_gen_mac_addr_t uuid_gen_mac_addr;
|
||||
esp_dh5_free_t dh5_free;
|
||||
esp_wps_build_assoc_req_ie_t wps_build_assoc_req_ie;
|
||||
esp_wps_build_assoc_resp_ie_t wps_build_assoc_resp_ie;
|
||||
esp_wps_build_probe_req_ie_t wps_build_probe_req_ie;
|
||||
esp_wps_build_public_key_t wps_build_public_key;
|
||||
esp_wps_enrollee_get_msg_t wps_enrollee_get_msg;
|
||||
esp_wps_enrollee_process_msg_t wps_enrollee_process_msg;
|
||||
esp_wps_generate_pin_t wps_generate_pin;
|
||||
esp_wps_is_selected_pin_registrar_t wps_is_selected_pin_registrar;
|
||||
esp_wps_is_selected_pbc_registrar_t wps_is_selected_pbc_registrar;
|
||||
esp_eap_msg_alloc_t eap_msg_alloc;
|
||||
}wps_crypto_funcs_t;
|
||||
|
||||
/**
|
||||
@ -289,6 +756,8 @@ typedef struct{
|
||||
* hardware.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t size;
|
||||
uint32_t version;
|
||||
esp_crypto_hash_init_t crypto_hash_init; /**< function used to initialize a crypto_hash structure when use TLSV1 */
|
||||
esp_crypto_hash_update_t crypto_hash_update; /**< function used to calculate hash data when use TLSV1 */
|
||||
esp_crypto_hash_finish_t crypto_hash_finish; /**< function used to finish the hash calculate when use TLSV1 */
|
||||
@ -298,6 +767,20 @@ typedef struct {
|
||||
esp_crypto_cipher_deinit_t crypto_cipher_deinit; /**< function used to free context when use TLSV1 */
|
||||
esp_crypto_mod_exp_t crypto_mod_exp; /**< function used to do key exchange when use TLSV1 */
|
||||
esp_sha256_vector_t sha256_vector; /**< function used to do X.509v3 certificate parsing and processing */
|
||||
esp_tls_init_t tls_init;
|
||||
esp_tls_deinit_t tls_deinit;
|
||||
esp_eap_peer_blob_init_t eap_peer_blob_init;
|
||||
esp_eap_peer_blob_deinit_t eap_peer_blob_deinit;
|
||||
esp_eap_peer_config_init_t eap_peer_config_init;
|
||||
esp_eap_peer_config_deinit_t eap_peer_config_deinit;
|
||||
esp_eap_peer_register_methods_t eap_peer_register_methods;
|
||||
esp_eap_peer_unregister_methods_t eap_peer_unregister_methods;
|
||||
esp_eap_deinit_prev_method_t eap_deinit_prev_method;
|
||||
esp_eap_peer_get_eap_method_t eap_peer_get_eap_method;
|
||||
esp_eap_sm_abort_t eap_sm_abort;
|
||||
esp_eap_sm_build_nak_t eap_sm_build_nak;
|
||||
esp_eap_sm_build_identity_resp_t eap_sm_build_identity_resp;
|
||||
esp_eap_msg_alloc_t eap_msg_alloc;
|
||||
} wpa2_crypto_funcs_t;
|
||||
|
||||
/**
|
||||
|
@ -35,11 +35,17 @@
|
||||
#include "esp_err.h"
|
||||
#include "esp_wifi_types.h"
|
||||
#include "esp_event.h"
|
||||
#include "esp_wifi.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
QueueHandle_t handle; /**< FreeRTOS queue handler */
|
||||
void *storage; /**< storage for FreeRTOS queue */
|
||||
} wifi_static_queue_t;
|
||||
|
||||
/**
|
||||
* @brief Initialize Wi-Fi Driver
|
||||
* Alloc resource for WiFi driver, such as WiFi control structure, RX/TX buffer,
|
||||
@ -81,7 +87,7 @@ void esp_wifi_internal_free_rx_buffer(void* buffer);
|
||||
*
|
||||
* @param wifi_interface_t wifi_if : wifi interface id
|
||||
* @param void *buffer : the buffer to be tansmit
|
||||
* @param u16_t len : the length of buffer
|
||||
* @param uint16_t len : the length of buffer
|
||||
*
|
||||
* @return
|
||||
* - ERR_OK : Successfully transmit the buffer to wifi driver
|
||||
@ -89,7 +95,7 @@ void esp_wifi_internal_free_rx_buffer(void* buffer);
|
||||
* - ERR_IF : WiFi driver error
|
||||
* - ERR_ARG : Invalid argument
|
||||
*/
|
||||
int esp_wifi_internal_tx(wifi_interface_t wifi_if, void *buffer, u16_t len);
|
||||
int esp_wifi_internal_tx(wifi_interface_t wifi_if, void *buffer, uint16_t len);
|
||||
|
||||
/**
|
||||
* @brief The WiFi RX callback function
|
||||
@ -121,6 +127,28 @@ esp_err_t esp_wifi_internal_reg_rxcb(wifi_interface_t ifx, wifi_rxcb_t fn);
|
||||
*/
|
||||
esp_err_t esp_wifi_internal_set_sta_ip(void);
|
||||
|
||||
/**
|
||||
* @brief Check the MD5 values of the OS adapter header files in IDF and WiFi library
|
||||
*
|
||||
* @attention 1. It is used for internal CI version check
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK : succeed
|
||||
* - ESP_WIFI_INVALID_ARG : MD5 check fail
|
||||
*/
|
||||
esp_err_t esp_wifi_internal_osi_funcs_md5_check(const char *md5);
|
||||
|
||||
/**
|
||||
* @brief Check the MD5 values of the crypto types header files in IDF and WiFi library
|
||||
*
|
||||
* @attention 1. It is used for internal CI version check
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK : succeed
|
||||
* - ESP_WIFI_INVALID_ARG : MD5 check fail
|
||||
*/
|
||||
esp_err_t esp_wifi_internal_crypto_funcs_md5_check(const char *md5);
|
||||
|
||||
/**
|
||||
* @brief Allocate a chunk of memory for WiFi driver
|
||||
*
|
||||
|
139
tools/sdk/include/esp32/esp_wifi_os_adapter.h
Normal file
139
tools/sdk/include/esp32/esp_wifi_os_adapter.h
Normal file
@ -0,0 +1,139 @@
|
||||
// Copyright 2018 Espressif Systems (Shanghai) PTE LTD
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef ESP_WIFI_OS_ADAPTER_H_
|
||||
#define ESP_WIFI_OS_ADAPTER_H_
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ESP_WIFI_OS_ADAPTER_VERSION 0x00000001
|
||||
#define ESP_WIFI_OS_ADAPTER_MAGIC 0xDEADBEAF
|
||||
|
||||
#define OSI_FUNCS_TIME_BLOCKING 0xffffffff
|
||||
|
||||
#define OSI_QUEUE_SEND_FRONT 0
|
||||
#define OSI_QUEUE_SEND_BACK 1
|
||||
#define OSI_QUEUE_SEND_OVERWRITE 2
|
||||
|
||||
typedef struct {
|
||||
int32_t _version;
|
||||
void (*_set_isr)(int32_t n, void *f, void *arg);
|
||||
void (*_ints_on)(uint32_t mask);
|
||||
void (*_ints_off)(uint32_t mask);
|
||||
void *(* _spin_lock_create)(void);
|
||||
void (* _spin_lock_delete)(void *lock);
|
||||
uint32_t (*_wifi_int_disable)(void *wifi_int_mux);
|
||||
void (*_wifi_int_restore)(void *wifi_int_mux, uint32_t tmp);
|
||||
void (*_task_yield)(void);
|
||||
void (*_task_yield_from_isr)(void);
|
||||
void *(*_semphr_create)(uint32_t max, uint32_t init);
|
||||
void (*_semphr_delete)(void *semphr);
|
||||
int32_t (*_semphr_take_from_isr)(void *semphr, void *hptw);
|
||||
int32_t (*_semphr_give_from_isr)(void *semphr, void *hptw);
|
||||
int32_t (*_semphr_take)(void *semphr, uint32_t block_time_tick);
|
||||
int32_t (*_semphr_give)(void *semphr);
|
||||
void *(*_mutex_create)(void);
|
||||
void *(*_recursive_mutex_create)(void);
|
||||
void (*_mutex_delete)(void *mutex);
|
||||
int32_t (*_mutex_lock)(void *mutex);
|
||||
int32_t (*_mutex_unlock)(void *mutex);
|
||||
void *(* _queue_create)(uint32_t queue_len, uint32_t item_size);
|
||||
void (* _queue_delete)(void *queue);
|
||||
int32_t (* _queue_send)(void *queue, void *item, uint32_t block_time_tick);
|
||||
int32_t (* _queue_send_from_isr)(void *queue, void *item, void *hptw);
|
||||
int32_t (* _queue_send_to_back)(void *queue, void *item, uint32_t block_time_tick);
|
||||
int32_t (* _queue_send_to_front)(void *queue, void *item, uint32_t block_time_tick);
|
||||
int32_t (* _queue_recv)(void *queue, void *item, uint32_t block_time_tick);
|
||||
int32_t (* _queue_recv_from_isr)(void *queue, void * const item, int32_t * const hptw);
|
||||
uint32_t (* _queue_msg_waiting)(void *queue);
|
||||
void *(* _event_group_create)(void);
|
||||
void (* _event_group_delete)(void *event);
|
||||
uint32_t (* _event_group_set_bits)(void *event, uint32_t bits);
|
||||
uint32_t (* _event_group_clear_bits)(void *event, uint32_t bits);
|
||||
uint32_t (* _event_group_wait_bits)(void *event, uint32_t bits_to_wait_for, int32_t clear_on_exit, int32_t wait_for_all_bits, uint32_t block_time_tick);
|
||||
int32_t (* _task_create_pinned_to_core)(void *task_func, const char *name, uint32_t stack_depth, void *param, uint32_t prio, void *task_handle, uint32_t core_id);
|
||||
int32_t (* _task_create)(void *task_func, const char *name, uint32_t stack_depth, void *param, uint32_t prio, void *task_handle);
|
||||
void (* _task_delete)(void *task_handle);
|
||||
void (* _task_delay)(uint32_t tick);
|
||||
int32_t (* _task_ms_to_tick)(uint32_t ms);
|
||||
void *(* _task_get_current_task)(void);
|
||||
int32_t (* _task_get_max_priority)(void);
|
||||
int32_t (* _is_in_isr)(void);
|
||||
void *(* _malloc)(uint32_t size);
|
||||
void (* _free)(void *p);
|
||||
uint32_t (* _get_free_heap_size)(void);
|
||||
uint32_t (* _rand)(void);
|
||||
void (* _dport_access_stall_other_cpu_start_wrap)(void);
|
||||
void (* _dport_access_stall_other_cpu_end_wrap)(void);
|
||||
int32_t (* _phy_rf_init)(const void * init_data, uint32_t mode, void * calibration_data, uint32_t module);
|
||||
int32_t (* _phy_rf_deinit)(uint32_t module);
|
||||
void (* _phy_load_cal_and_init)(uint32_t module);
|
||||
int32_t (* _read_mac)(uint8_t* mac, uint32_t type);
|
||||
void (* _timer_init)(void);
|
||||
void (* _timer_deinit)(void);
|
||||
void (* _timer_arm)(void *timer, uint32_t tmout, bool repeat);
|
||||
void (* _timer_disarm)(void *timer);
|
||||
void (* _timer_done)(void *ptimer);
|
||||
void (* _timer_setfn)(void *ptimer, void *pfunction, void *parg);
|
||||
void (* _timer_arm_us)(void *ptimer, uint32_t us, bool repeat);
|
||||
void (* _periph_module_enable)(uint32_t periph);
|
||||
void (* _periph_module_disable)(uint32_t periph);
|
||||
int64_t (* _esp_timer_get_time)(void);
|
||||
int32_t (* _nvs_set_i8)(uint32_t handle, const char* key, int8_t value);
|
||||
int32_t (* _nvs_get_i8)(uint32_t handle, const char* key, int8_t* out_value);
|
||||
int32_t (* _nvs_set_u8)(uint32_t handle, const char* key, uint8_t value);
|
||||
int32_t (* _nvs_get_u8)(uint32_t handle, const char* key, uint8_t* out_value);
|
||||
int32_t (* _nvs_set_u16)(uint32_t handle, const char* key, uint16_t value);
|
||||
int32_t (* _nvs_get_u16)(uint32_t handle, const char* key, uint16_t* out_value);
|
||||
int32_t (* _nvs_open)(const char* name, uint32_t open_mode, uint32_t *out_handle);
|
||||
void (* _nvs_close)(uint32_t handle);
|
||||
int32_t (* _nvs_commit)(uint32_t handle);
|
||||
int32_t (* _nvs_set_blob)(uint32_t handle, const char* key, const void* value, size_t length);
|
||||
int32_t (* _nvs_get_blob)(uint32_t handle, const char* key, void* out_value, size_t* length);
|
||||
int32_t (* _nvs_erase_key)(uint32_t handle, const char* key);
|
||||
int32_t (* _get_random)(uint8_t *buf, size_t len);
|
||||
int32_t (* _get_time)(void *t);
|
||||
unsigned long (* _random)(void);
|
||||
void (* _log_write)(uint32_t level, const char* tag, const char* format, ...);
|
||||
uint32_t (* _log_timestamp)(void);
|
||||
void * (* _malloc_internal)(size_t size);
|
||||
void * (* _realloc_internal)(void *ptr, size_t size);
|
||||
void * (* _calloc_internal)(size_t n, size_t size);
|
||||
void * (* _zalloc_internal)(size_t size);
|
||||
void * (* _wifi_malloc)(size_t size);
|
||||
void * (* _wifi_realloc)(void *ptr, size_t size);
|
||||
void * (* _wifi_calloc)(size_t n, size_t size);
|
||||
void * (* _wifi_zalloc)(size_t size);
|
||||
void * (* _wifi_create_queue)(int32_t queue_len, int32_t item_size);
|
||||
void (* _wifi_delete_queue)(void * queue);
|
||||
int32_t (* _modem_sleep_enter)(uint32_t module);
|
||||
int32_t (* _modem_sleep_exit)(uint32_t module);
|
||||
int32_t (* _modem_sleep_register)(uint32_t module);
|
||||
int32_t (* _modem_sleep_deregister)(uint32_t module);
|
||||
void (* _sc_ack_send)(void *param);
|
||||
void (* _sc_ack_send_stop)(void);
|
||||
int32_t _magic;
|
||||
} wifi_osi_funcs_t;
|
||||
|
||||
extern wifi_osi_funcs_t g_wifi_osi_funcs;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ESP_WIFI_OS_ADAPTER_H_ */
|
176
tools/sdk/include/esp32/esp_wifi_types.h
Executable file → Normal file
176
tools/sdk/include/esp32/esp_wifi_types.h
Executable file → Normal file
@ -49,6 +49,7 @@ typedef struct {
|
||||
char cc[3]; /**< country code string */
|
||||
uint8_t schan; /**< start channel */
|
||||
uint8_t nchan; /**< total channel number */
|
||||
int8_t max_tx_power; /**< maximum tx power */
|
||||
wifi_country_policy_t policy; /**< country policy */
|
||||
} wifi_country_t;
|
||||
|
||||
@ -96,8 +97,8 @@ typedef enum {
|
||||
|
||||
typedef enum {
|
||||
WIFI_SECOND_CHAN_NONE = 0, /**< the channel width is HT20 */
|
||||
WIFI_SECOND_CHAN_ABOVE, /**< the channel width is HT40 and the second channel is above the primary channel */
|
||||
WIFI_SECOND_CHAN_BELOW, /**< the channel width is HT40 and the second channel is below the primary channel */
|
||||
WIFI_SECOND_CHAN_ABOVE, /**< the channel width is HT40 and the secondary channel is above the primary channel */
|
||||
WIFI_SECOND_CHAN_BELOW, /**< the channel width is HT40 and the secondary channel is below the primary channel */
|
||||
} wifi_second_chan_t;
|
||||
|
||||
typedef enum {
|
||||
@ -139,22 +140,34 @@ typedef enum {
|
||||
WIFI_CIPHER_TYPE_UNKNOWN, /**< the cipher type is unknown */
|
||||
} wifi_cipher_type_t;
|
||||
|
||||
/** @brief Description of an WiFi AP */
|
||||
/**
|
||||
* @brief WiFi antenna
|
||||
*
|
||||
*/
|
||||
typedef enum {
|
||||
WIFI_ANT_ANT0, /**< WiFi antenna 0 */
|
||||
WIFI_ANT_ANT1, /**< WiFi antenna 1 */
|
||||
WIFI_ANT_MAX, /**< Invalid WiFi antenna */
|
||||
} wifi_ant_t;
|
||||
|
||||
/** @brief Description of a WiFi AP */
|
||||
typedef struct {
|
||||
uint8_t bssid[6]; /**< MAC address of AP */
|
||||
uint8_t ssid[33]; /**< SSID of AP */
|
||||
uint8_t primary; /**< channel of AP */
|
||||
wifi_second_chan_t second; /**< second channel of AP */
|
||||
wifi_second_chan_t second; /**< secondary channel of AP */
|
||||
int8_t rssi; /**< signal strength of AP */
|
||||
wifi_auth_mode_t authmode; /**< authmode of AP */
|
||||
wifi_cipher_type_t pairwise_cipher; /**< pairwise cipher of AP */
|
||||
wifi_cipher_type_t group_cipher; /**< group cipher of AP */
|
||||
wifi_ant_t ant; /**< antenna used to receive beacon from AP */
|
||||
uint32_t phy_11b:1; /**< bit: 0 flag to identify if 11b mode is enabled or not */
|
||||
uint32_t phy_11g:1; /**< bit: 1 flag to identify if 11g mode is enabled or not */
|
||||
uint32_t phy_11n:1; /**< bit: 2 flag to identify if 11n mode is enabled or not */
|
||||
uint32_t phy_lr:1; /**< bit: 3 flag to identify if low rate is enabled or not */
|
||||
uint32_t wps:1; /**< bit: 4 flag to identify if WPS is supported or not */
|
||||
uint32_t reserved:27; /**< bit: 5..31 reserved */
|
||||
wifi_country_t country; /**< country information of AP */
|
||||
} wifi_ap_record_t;
|
||||
|
||||
typedef enum {
|
||||
@ -175,10 +188,12 @@ typedef struct {
|
||||
|
||||
typedef enum {
|
||||
WIFI_PS_NONE, /**< No power save */
|
||||
WIFI_PS_MIN_MODEM, /**< Minimum modem power save. In this mode, station wakes up to receive beacon every DTIM period */
|
||||
WIFI_PS_MAX_MODEM, /**< Maximum modem power save. In this mode, station wakes up to receive beacon every listen interval */
|
||||
WIFI_PS_MIN_MODEM, /**< Minimum modem power saving. In this mode, station wakes up to receive beacon every DTIM period */
|
||||
WIFI_PS_MAX_MODEM, /**< Maximum modem power saving. In this mode, interval to receive beacons is determined by the listen_interval parameter in wifi_sta_config_t */
|
||||
} wifi_ps_type_t;
|
||||
|
||||
#define WIFI_PS_MODEM WIFI_PS_MIN_MODEM /**< @deprecated Use WIFI_PS_MIN_MODEM or WIFI_PS_MAX_MODEM instead */
|
||||
|
||||
#define WIFI_PROTOCOL_11B 1
|
||||
#define WIFI_PROTOCOL_11G 2
|
||||
#define WIFI_PROTOCOL_11N 4
|
||||
@ -209,7 +224,7 @@ typedef struct {
|
||||
bool bssid_set; /**< whether set MAC address of target AP or not. Generally, station_config.bssid_set needs to be 0; and it needs to be 1 only when users need to check the MAC address of the AP.*/
|
||||
uint8_t bssid[6]; /**< MAC address of target AP*/
|
||||
uint8_t channel; /**< channel of target AP. Set to 1~13 to scan starting from the specified channel before connecting to AP. If the channel of AP is unknown, set it to 0.*/
|
||||
uint16_t listen_interval; /**< Listen interval for ESP32 station to receive beacon in maximum power save mode, units: beacon interval */
|
||||
uint16_t listen_interval; /**< Listen interval for ESP32 station to receive beacon when WIFI_PS_MAX_MODEM is set. Units: AP beacon intervals. Defaults to 3 if set to 0. */
|
||||
wifi_sort_method_t sort_method; /**< sort the connect AP in the list by rssi or security mode */
|
||||
wifi_fast_scan_threshold_t threshold; /**< When scan_method is set to WIFI_FAST_SCAN, only APs which have an auth mode that is more secure than the selected auth mode and a signal stronger than the minimum RSSI will be used. */
|
||||
} wifi_sta_config_t;
|
||||
@ -228,6 +243,12 @@ typedef union {
|
||||
/** @brief Description of STA associated with AP */
|
||||
typedef struct {
|
||||
uint8_t mac[6]; /**< mac address */
|
||||
int8_t rssi; /**< current average rssi of sta connected */
|
||||
uint32_t phy_11b:1; /**< bit: 0 flag to identify if 11b mode is enabled or not */
|
||||
uint32_t phy_11g:1; /**< bit: 1 flag to identify if 11g mode is enabled or not */
|
||||
uint32_t phy_11n:1; /**< bit: 2 flag to identify if 11n mode is enabled or not */
|
||||
uint32_t phy_lr:1; /**< bit: 3 flag to identify if low rate is enabled or not */
|
||||
uint32_t reserved:28; /**< bit: 4..31 reserved */
|
||||
} wifi_sta_info_t;
|
||||
|
||||
#define ESP_WIFI_MAX_CONN_NUM (10) /**< max number of stations which can connect to ESP32 soft-AP */
|
||||
@ -283,31 +304,33 @@ typedef struct {
|
||||
|
||||
/** @brief Received packet radio metadata header, this is the common header at the beginning of all promiscuous mode RX callback buffers */
|
||||
typedef struct {
|
||||
signed rssi:8; /**< signal intensity of packet */
|
||||
unsigned rate:5; /**< data rate */
|
||||
unsigned :1; /**< reserve */
|
||||
unsigned sig_mode:2; /**< 0:is not 11n packet; 1:is 11n packet */
|
||||
unsigned :16; /**< reserve */
|
||||
unsigned mcs:7; /**< if is 11n packet, shows the modulation(range from 0 to 76) */
|
||||
unsigned cwb:1; /**< if is 11n packet, shows if is HT40 packet or not */
|
||||
unsigned :16; /**< reserve */
|
||||
unsigned smoothing:1; /**< reserve */
|
||||
unsigned not_sounding:1; /**< reserve */
|
||||
unsigned :1; /**< reserve */
|
||||
unsigned aggregation:1; /**< Aggregation */
|
||||
unsigned stbc:2; /**< STBC */
|
||||
unsigned fec_coding:1; /**< Flag is set for 11n packets which are LDPC */
|
||||
unsigned sgi:1; /**< SGI */
|
||||
unsigned noise_floor:8; /**< noise floor */
|
||||
unsigned ampdu_cnt:8; /**< ampdu cnt */
|
||||
unsigned channel:4; /**< which channel this packet in */
|
||||
unsigned :12; /**< reserve */
|
||||
unsigned timestamp:32; /**< timestamp */
|
||||
unsigned :32; /**< reserve */
|
||||
unsigned :32; /**< reserve */
|
||||
unsigned sig_len:12; /**< length of packet */
|
||||
unsigned :12; /**< reserve */
|
||||
unsigned rx_state:8; /**< rx state */
|
||||
signed rssi:8; /**< Received Signal Strength Indicator(RSSI) of packet. unit: dBm */
|
||||
unsigned rate:5; /**< PHY rate encoding of the packet. Only valid for non HT(11bg) packet */
|
||||
unsigned :1; /**< reserve */
|
||||
unsigned sig_mode:2; /**< 0: non HT(11bg) packet; 1: HT(11n) packet; 3: VHT(11ac) packet */
|
||||
unsigned :16; /**< reserve */
|
||||
unsigned mcs:7; /**< Modulation Coding Scheme. If is HT(11n) packet, shows the modulation, range from 0 to 76(MSC0 ~ MCS76) */
|
||||
unsigned cwb:1; /**< if is HT(11n) packet, shows if is HT40 packet or HT20 packet. 1: HT40 packet; 0: HT20 packet */
|
||||
unsigned :16; /**< reserve */
|
||||
unsigned smoothing:1; /**< reserve */
|
||||
unsigned not_sounding:1; /**< reserve */
|
||||
unsigned :1; /**< reserve */
|
||||
unsigned aggregation:1; /**< Aggregation. 0: MPDU packet; 1: AMPDU packet */
|
||||
unsigned stbc:2; /**< Space Time Block Code(STBC). 0: non STBC packet; 1: STBC packet */
|
||||
unsigned fec_coding:1; /**< Flag is set for 11n packets which are LDPC */
|
||||
unsigned sgi:1; /**< Short Guide Interval(SGI). 0: Long GI; 1: Short GI */
|
||||
signed noise_floor:8; /**< noise floor of Radio Frequency Module(RF). unit: 0.25dBm*/
|
||||
unsigned ampdu_cnt:8; /**< ampdu cnt */
|
||||
unsigned channel:4; /**< primary channel on which this packet is received */
|
||||
unsigned secondary_channel:4; /**< secondary channel on which this packet is received. 0: none; 1: above; 2: below */
|
||||
unsigned :8; /**< reserve */
|
||||
unsigned timestamp:32; /**< timestamp. The local time when this packet is received. It is precise only if modem sleep or light sleep is not enabled. unit: microsecond */
|
||||
unsigned :32; /**< reserve */
|
||||
unsigned :31; /**< reserve */
|
||||
unsigned ant:1; /**< antenna number from which this packet is received. 0: WiFi antenna 0; 1: WiFi antenna 1 */
|
||||
unsigned sig_len:12; /**< length of packet including Frame Check Sequence(FCS) */
|
||||
unsigned :12; /**< reserve */
|
||||
unsigned rx_state:8; /**< state of the packet. 0: no error; others: error numbers which are not public */
|
||||
} wifi_pkt_rx_ctrl_t;
|
||||
|
||||
/** @brief Payload passed to 'buf' parameter of promiscuous mode RX callback.
|
||||
@ -325,6 +348,7 @@ typedef struct {
|
||||
*/
|
||||
typedef enum {
|
||||
WIFI_PKT_MGMT, /**< Management frame, indicates 'buf' argument is wifi_promiscuous_pkt_t */
|
||||
WIFI_PKT_CTRL, /**< Control frame, indicates 'buf' argument is wifi_promiscuous_pkt_t */
|
||||
WIFI_PKT_DATA, /**< Data frame, indiciates 'buf' argument is wifi_promiscuous_pkt_t */
|
||||
WIFI_PKT_MISC, /**< Other type, such as MIMO etc. 'buf' argument is wifi_promiscuous_pkt_t but the payload is zero length. */
|
||||
} wifi_promiscuous_pkt_type_t;
|
||||
@ -332,16 +356,96 @@ typedef enum {
|
||||
|
||||
#define WIFI_PROMIS_FILTER_MASK_ALL (0xFFFFFFFF) /**< filter all packets */
|
||||
#define WIFI_PROMIS_FILTER_MASK_MGMT (1) /**< filter the packets with type of WIFI_PKT_MGMT */
|
||||
#define WIFI_PROMIS_FILTER_MASK_DATA (1<<1) /**< filter the packets with type of WIFI_PKT_DATA */
|
||||
#define WIFI_PROMIS_FILTER_MASK_MISC (1<<2) /**< filter the packets with type of WIFI_PKT_MISC */
|
||||
#define WIFI_PROMIS_FILTER_MASK_DATA_MPDU (1<<3) /**< filter the MPDU which is a kind of WIFI_PKT_DATA */
|
||||
#define WIFI_PROMIS_FILTER_MASK_DATA_AMPDU (1<<4) /**< filter the AMPDU which is a kind of WIFI_PKT_DATA */
|
||||
#define WIFI_PROMIS_FILTER_MASK_CTRL (1<<1) /**< filter the packets with type of WIFI_PKT_CTRL */
|
||||
#define WIFI_PROMIS_FILTER_MASK_DATA (1<<2) /**< filter the packets with type of WIFI_PKT_DATA */
|
||||
#define WIFI_PROMIS_FILTER_MASK_MISC (1<<3) /**< filter the packets with type of WIFI_PKT_MISC */
|
||||
#define WIFI_PROMIS_FILTER_MASK_DATA_MPDU (1<<4) /**< filter the MPDU which is a kind of WIFI_PKT_DATA */
|
||||
#define WIFI_PROMIS_FILTER_MASK_DATA_AMPDU (1<<5) /**< filter the AMPDU which is a kind of WIFI_PKT_DATA */
|
||||
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_ALL (0xFF800000) /**< filter all control packets */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_WRAPPER (1<<23) /**< filter the control packets with subtype of Control Wrapper */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_BAR (1<<24) /**< filter the control packets with subtype of Block Ack Request */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_BA (1<<25) /**< filter the control packets with subtype of Block Ack */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_PSPOLL (1<<26) /**< filter the control packets with subtype of PS-Poll */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_RTS (1<<27) /**< filter the control packets with subtype of RTS */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_CTS (1<<28) /**< filter the control packets with subtype of CTS */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_ACK (1<<29) /**< filter the control packets with subtype of ACK */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_CFEND (1<<30) /**< filter the control packets with subtype of CF-END */
|
||||
#define WIFI_PROMIS_CTRL_FILTER_MASK_CFENDACK (1<<31) /**< filter the control packets with subtype of CF-END+CF-ACK */
|
||||
|
||||
/** @brief Mask for filtering different packet types in promiscuous mode. */
|
||||
typedef struct {
|
||||
uint32_t filter_mask; /**< OR of one or more filter values WIFI_PROMIS_FILTER_* */
|
||||
} wifi_promiscuous_filter_t;
|
||||
|
||||
#define WIFI_EVENT_MASK_ALL (0xFFFFFFFF) /**< mask all WiFi events */
|
||||
#define WIFI_EVENT_MASK_NONE (0) /**< mask none of the WiFi events */
|
||||
#define WIFI_EVENT_MASK_AP_PROBEREQRECVED (BIT(0)) /**< mask SYSTEM_EVENT_AP_PROBEREQRECVED event */
|
||||
|
||||
/**
|
||||
* @brief Channel state information(CSI) configuration type
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
bool lltf_en; /**< enable to receive legacy long training field(lltf) data. Default enabled */
|
||||
bool htltf_en; /**< enable to receive HT long training field(htltf) data. Default enabled */
|
||||
bool stbc_htltf2_en; /**< enable to receive space time block code HT long training field(stbc-htltf2) data. Default enabled */
|
||||
bool manu_scale; /**< manually scale the CSI data by left shifting or automatically scale the CSI data. If set true, please set the shift bits. false: automatically. true: manually. Default false */
|
||||
uint8_t shift; /**< manually left shift bits of the scale of the CSI data. The range of the left shift bits is 0~15 */
|
||||
} wifi_csi_config_t;
|
||||
|
||||
/**
|
||||
* @brief CSI data type
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
wifi_pkt_rx_ctrl_t rx_ctrl;/**< received packet radio metadata header of the CSI data */
|
||||
uint8_t mac[6]; /**< source MAC address of the CSI data */
|
||||
bool last_word_invalid; /**< last four bytes of the CSI data is invalid or not */
|
||||
uint8_t *buf; /**< buffer of CSI data */
|
||||
uint16_t len; /**< length of CSI data */
|
||||
} wifi_csi_info_t;
|
||||
|
||||
/**
|
||||
* @brief WiFi GPIO configuration for antenna selection
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t gpio_select: 1, /**< Whether this GPIO is connected to external antenna switch */
|
||||
gpio_num: 7; /**< The GPIO number that connects to external antenna switch */
|
||||
} wifi_ant_gpio_t;
|
||||
|
||||
/**
|
||||
* @brief WiFi GPIOs configuration for antenna selection
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
wifi_ant_gpio_t gpio_cfg[4]; /**< The configurations of GPIOs that connect to external antenna switch */
|
||||
} wifi_ant_gpio_config_t;
|
||||
|
||||
/**
|
||||
* @brief WiFi antenna mode
|
||||
*
|
||||
*/
|
||||
typedef enum {
|
||||
WIFI_ANT_MODE_ANT0, /**< Enable WiFi antenna 0 only */
|
||||
WIFI_ANT_MODE_ANT1, /**< Enable WiFi antenna 1 only */
|
||||
WIFI_ANT_MODE_AUTO, /**< Enable WiFi antenna 0 and 1, automatically select an antenna */
|
||||
WIFI_ANT_MODE_MAX, /**< Invalid WiFi enabled antenna */
|
||||
} wifi_ant_mode_t;
|
||||
|
||||
/**
|
||||
* @brief WiFi antenna configuration
|
||||
*
|
||||
*/
|
||||
typedef struct {
|
||||
wifi_ant_mode_t rx_ant_mode; /**< WiFi antenna mode for receiving */
|
||||
wifi_ant_t rx_ant_default; /**< Default antenna mode for receiving, it's ignored if rx_ant_mode is not WIFI_ANT_MODE_AUTO */
|
||||
wifi_ant_mode_t tx_ant_mode; /**< WiFi antenna mode for transmission, it can be set to WIFI_ANT_MODE_AUTO only if rx_ant_mode is set to WIFI_ANT_MODE_AUTO */
|
||||
uint8_t enabled_ant0: 4, /**< Index (in antenna GPIO configuration) of enabled WIFI_ANT_MODE_ANT0 */
|
||||
enabled_ant1: 4; /**< Index (in antenna GPIO configuration) of enabled WIFI_ANT_MODE_ANT1 */
|
||||
} wifi_ant_config_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -15,6 +15,8 @@
|
||||
#ifndef ESP_WPA2_H
|
||||
#define ESP_WPA2_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "esp_err.h"
|
||||
#include "esp_wifi_crypto_types.h"
|
||||
|
||||
@ -121,7 +123,7 @@ void esp_wifi_sta_wpa2_ent_clear_password(void);
|
||||
* @attention 1. The API only passes the parameter password to the global pointer variable in wpa2 enterprise module.
|
||||
* @attention 2. The new password is used to substitute the old password when eap-mschapv2 failure request message with error code ERROR_PASSWD_EXPIRED is received.
|
||||
*
|
||||
* @param password: point to address where stores the password;
|
||||
* @param new_password: point to address where stores the password;
|
||||
* @param len: length of password
|
||||
*
|
||||
* @return
|
||||
@ -130,7 +132,7 @@ void esp_wifi_sta_wpa2_ent_clear_password(void);
|
||||
* - ESP_ERR_NO_MEM: fail(internal memory malloc fail)
|
||||
*/
|
||||
|
||||
esp_err_t esp_wifi_sta_wpa2_ent_set_new_password(const unsigned char *password, int len);
|
||||
esp_err_t esp_wifi_sta_wpa2_ent_set_new_password(const unsigned char *new_password, int len);
|
||||
|
||||
/**
|
||||
* @brief Clear new password for MSCHAPv2 method..
|
||||
@ -144,12 +146,12 @@ void esp_wifi_sta_wpa2_ent_clear_new_password(void);
|
||||
* @attention 2. The ca_cert should be zero terminated.
|
||||
*
|
||||
* @param ca_cert: point to address where stores the CA certificate;
|
||||
* @param len: length of ca_cert
|
||||
* @param ca_cert_len: length of ca_cert
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK: succeed
|
||||
*/
|
||||
esp_err_t esp_wifi_sta_wpa2_ent_set_ca_cert(const unsigned char *ca_cert, int len);
|
||||
esp_err_t esp_wifi_sta_wpa2_ent_set_ca_cert(const unsigned char *ca_cert, int ca_cert_len);
|
||||
|
||||
/**
|
||||
* @brief Clear CA certificate for PEAP/TTLS method.
|
||||
|
@ -56,14 +56,33 @@ typedef enum wps_type {
|
||||
|
||||
extern const wps_crypto_funcs_t g_wifi_default_wps_crypto_funcs;
|
||||
|
||||
#define WPS_MAX_MANUFACTURER_LEN 65
|
||||
#define WPS_MAX_MODEL_NUMBER_LEN 33
|
||||
#define WPS_MAX_MODEL_NAME_LEN 33
|
||||
#define WPS_MAX_DEVICE_NAME_LEN 33
|
||||
|
||||
typedef struct {
|
||||
char manufacturer[WPS_MAX_MANUFACTURER_LEN]; /*!< Manufacturer, null-terminated string. The default manufcturer is used if the string is empty */
|
||||
char model_number[WPS_MAX_MODEL_NUMBER_LEN]; /*!< Model number, null-terminated string. The default model number is used if the string is empty */
|
||||
char model_name[WPS_MAX_MODEL_NAME_LEN]; /*!< Model name, null-terminated string. The default model name is used if the string is empty */
|
||||
char device_name[WPS_MAX_DEVICE_NAME_LEN]; /*!< Device name, null-terminated string. The default device name is used if the string is empty */
|
||||
} wps_factory_information_t;
|
||||
|
||||
typedef struct {
|
||||
wps_type_t wps_type;
|
||||
const wps_crypto_funcs_t *crypto_funcs;
|
||||
}esp_wps_config_t;
|
||||
wps_factory_information_t factory_info;
|
||||
} esp_wps_config_t;
|
||||
|
||||
#define WPS_CONFIG_INIT_DEFAULT(type) { \
|
||||
.wps_type = type, \
|
||||
.crypto_funcs = &g_wifi_default_wps_crypto_funcs, \
|
||||
.factory_info = { \
|
||||
.manufacturer = "ESPRESSIF", \
|
||||
.model_number = "ESP32", \
|
||||
.model_name = "ESPRESSIF IOT", \
|
||||
.device_name = "ESP STATION", \
|
||||
} \
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -243,7 +243,10 @@ int esp_aes_crypt_ctr( esp_aes_context *ctx,
|
||||
* \param input Plaintext block
|
||||
* \param output Output (ciphertext) block
|
||||
*/
|
||||
void esp_aes_encrypt( esp_aes_context *ctx, const unsigned char input[16], unsigned char output[16] );
|
||||
int esp_internal_aes_encrypt( esp_aes_context *ctx, const unsigned char input[16], unsigned char output[16] );
|
||||
|
||||
/** Deprecated, see esp_aes_internal_encrypt */
|
||||
void esp_aes_encrypt( esp_aes_context *ctx, const unsigned char input[16], unsigned char output[16] ) __attribute__((deprecated));
|
||||
|
||||
/**
|
||||
* \brief Internal AES block decryption function
|
||||
@ -254,7 +257,10 @@ void esp_aes_encrypt( esp_aes_context *ctx, const unsigned char input[16], unsig
|
||||
* \param input Ciphertext block
|
||||
* \param output Output (plaintext) block
|
||||
*/
|
||||
void esp_aes_decrypt( esp_aes_context *ctx, const unsigned char input[16], unsigned char output[16] );
|
||||
int esp_internal_aes_decrypt( esp_aes_context *ctx, const unsigned char input[16], unsigned char output[16] );
|
||||
|
||||
/** Deprecated, see esp_aes_internal_decrypt */
|
||||
void esp_aes_decrypt( esp_aes_context *ctx, const unsigned char input[16], unsigned char output[16] ) __attribute__((deprecated));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -301,6 +301,15 @@ typedef struct _ETSTIMER_ {
|
||||
*/
|
||||
void ets_timer_init(void);
|
||||
|
||||
/**
|
||||
* @brief In FreeRTOS, please call FreeRTOS apis, never call this api.
|
||||
*
|
||||
* @param None
|
||||
*
|
||||
* @return None
|
||||
*/
|
||||
void ets_timer_deinit(void);
|
||||
|
||||
/**
|
||||
* @brief Arm an ets timer, this timer range is 640 us to 429496 ms.
|
||||
* In FreeRTOS, please call FreeRTOS apis, never call this api.
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#include "esp_attr.h"
|
||||
#include "soc/gpio_reg.h"
|
||||
#include "soc/gpio_pins.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -35,11 +36,13 @@ extern "C" {
|
||||
|
||||
#define GPIO_REG_READ(reg) READ_PERI_REG(reg)
|
||||
#define GPIO_REG_WRITE(reg, val) WRITE_PERI_REG(reg, val)
|
||||
#define GPIO_PIN_COUNT 40
|
||||
#define GPIO_ID_PIN0 0
|
||||
#define GPIO_ID_PIN(n) (GPIO_ID_PIN0+(n))
|
||||
#define GPIO_PIN_ADDR(i) (GPIO_PIN0_REG + i*4)
|
||||
|
||||
#define GPIO_FUNC_IN_HIGH 0x38
|
||||
#define GPIO_FUNC_IN_LOW 0x30
|
||||
|
||||
#define GPIO_ID_IS_PIN_REGISTER(reg_id) \
|
||||
((reg_id >= GPIO_ID_PIN0) && (reg_id <= GPIO_ID_PIN(GPIO_PIN_COUNT-1)))
|
||||
|
||||
@ -57,8 +60,8 @@ typedef enum {
|
||||
#define GPIO_OUTPUT_SET(gpio_no, bit_value) \
|
||||
((gpio_no < 32) ? gpio_output_set(bit_value<<gpio_no, (bit_value ? 0 : 1)<<gpio_no, 1<<gpio_no,0) : \
|
||||
gpio_output_set_high(bit_value<<(gpio_no - 32), (bit_value ? 0 : 1)<<(gpio_no - 32), 1<<(gpio_no -32),0))
|
||||
#define GPIO_DIS_OUTPUT(gpio_no) ((gpio_no < 32) ? gpio_output_set(0,0,0, 1<<gpio_no) : gpio_output_set_high(0,0,0, 1<<gpio_no))
|
||||
#define GPIO_INPUT_GET(gpio_no) ((gpio_no < 32)? ((gpio_input_get()>>gpio_no)&BIT0) : ((gpio_input_get_high()>>(gpio_no - 32))&BIT0))
|
||||
#define GPIO_DIS_OUTPUT(gpio_no) ((gpio_no < 32) ? gpio_output_set(0,0,0, 1<<gpio_no) : gpio_output_set_high(0,0,0, 1<<(gpio_no - 32)))
|
||||
#define GPIO_INPUT_GET(gpio_no) ((gpio_no < 32) ? ((gpio_input_get()>>gpio_no)&BIT0) : ((gpio_input_get_high()>>(gpio_no - 32))&BIT0))
|
||||
|
||||
/* GPIO interrupt handler, registered through gpio_intr_handler_register */
|
||||
typedef void (* gpio_intr_handler_fn_t)(uint32_t intr_mask, bool high, void *arg);
|
||||
|
0
tools/sdk/include/esp32/rom/md5_hash.h
Executable file → Normal file
0
tools/sdk/include/esp32/rom/md5_hash.h
Executable file → Normal file
0
tools/sdk/include/esp32/rom/queue.h
Executable file → Normal file
0
tools/sdk/include/esp32/rom/queue.h
Executable file → Normal file
@ -117,6 +117,8 @@ extern "C" {
|
||||
#define ESP_ROM_SPIFLASH_WR_PROTECT (ESP_ROM_SPIFLASH_BP0|ESP_ROM_SPIFLASH_BP1|ESP_ROM_SPIFLASH_BP2)
|
||||
#define ESP_ROM_SPIFLASH_QE BIT9
|
||||
|
||||
#define FLASH_ID_GD25LQ32C 0xC86016
|
||||
|
||||
typedef enum {
|
||||
ESP_ROM_SPIFLASH_QIO_MODE = 0,
|
||||
ESP_ROM_SPIFLASH_QOUT_MODE,
|
||||
|
@ -128,7 +128,6 @@ typedef enum {
|
||||
} RcvMsgBuffState;
|
||||
|
||||
typedef struct {
|
||||
// uint32_t RcvBuffSize;
|
||||
uint8_t *pRcvMsgBuff;
|
||||
uint8_t *pWritePos;
|
||||
uint8_t *pReadPos;
|
||||
@ -248,7 +247,7 @@ STATUS uart_tx_one_char(uint8_t TxChar);
|
||||
*
|
||||
* @return OK.
|
||||
*/
|
||||
STATUS uart_tx_one_char2(uint8_t TxChar);//for send message
|
||||
STATUS uart_tx_one_char2(uint8_t TxChar);
|
||||
|
||||
/**
|
||||
* @brief Wait until uart tx full empty.
|
||||
@ -285,7 +284,7 @@ static inline void IRAM_ATTR uart_tx_wait_idle(uint8_t uart_no) {
|
||||
STATUS uart_rx_one_char(uint8_t *pRxChar);
|
||||
|
||||
/**
|
||||
* @brief Get an input char to message channel, wait until successful.
|
||||
* @brief Get an input char from message channel, wait until successful.
|
||||
* Please do not call this function in SDK.
|
||||
*
|
||||
* @param None
|
||||
|
0
tools/sdk/include/esp32/xtensa/cacheasm.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/cacheasm.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/cacheattrasm.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/cacheattrasm.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/core-macros.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/core-macros.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/coreasm.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/coreasm.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/corebits.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/corebits.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/hal.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/hal.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/specreg.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/specreg.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/traxreg.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/traxreg.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xdm-regs.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xdm-regs.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xt_perf_consts.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xt_perf_consts.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtensa-libdb-macros.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtensa-libdb-macros.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtensa-versions.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtensa-versions.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtensa-xer.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtensa-xer.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtruntime-core-state.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtruntime-core-state.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtruntime-frames.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtruntime-frames.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtruntime.h
Executable file → Normal file
0
tools/sdk/include/esp32/xtensa/xtruntime.h
Executable file → Normal file
Reference in New Issue
Block a user