2025-02-05 14:54:48 +08:00

73 lines
2.4 KiB
C

/*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include "esp_err.h"
#include "soc/soc_caps.h"
#include "hal/uart_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Structure that holds configuration for UART wakeup.
*
* This structure is used to configure the wakeup behavior for a UART port. The wakeup mode can be
* selected from several options, such as active threshold, FIFO threshold, start bit detection, and
* character sequence detection. The availability of different wakeup modes depends on the SOC capabilities.
*/
typedef struct {
/** Wakeup mode selection */
uart_wakeup_mode_t wakeup_mode;
#if SOC_UART_WAKEUP_SUPPORT_ACTIVE_THRESH_MODE
/** Used in Active threshold wake-up;
related: UART_WK_MODE_ACTIVE_THRESH;
Configures the number of RXD edge changes to wake up the chip.*/
uint16_t rx_edge_threshold;
#endif
#if SOC_UART_WAKEUP_SUPPORT_FIFO_THRESH_MODE
/** Used in Bytes received in RX FIFO wake-up;
related: UART_WK_MODE_FIFO_THRESH;
Configures the number of received data bytes to wake up the chip.*/
uint16_t rx_fifo_threshold;
#endif
#if SOC_UART_WAKEUP_SUPPORT_CHAR_SEQ_MODE
/** Used in Character sequence detection(Trigger phrase) wake-up;
related: UART_WK_MODE_CHAR_SEQ;
'*' represents any symbol.
The end character cannot be '*'.
Example: "he**o" matches hello, heyyo. */
char wake_chars_seq[SOC_UART_WAKEUP_CHARS_SEQ_MAX_LEN];
#endif
} uart_wakeup_cfg_t;
/**
* @brief Initializes the UART wakeup functionality.
*
* This function configures the wakeup behavior for a specified UART port based on the provided configuration.
* The behavior depends on the selected wakeup mode and additional parameters such as active threshold or
* character sequence, if applicable. It is important that the provided configuration matches the capabilities
* of the SOC to ensure proper operation.
*
* @param uart_num The UART port to initialize for wakeup (e.g., UART_NUM_0, UART_NUM_1, etc.).
* @param cfg Pointer to the `uart_wakeup_cfg_t` structure that contains the wakeup configuration settings.
*
* @return
* - `ESP_OK` if the wakeup configuration was successfully applied.
* - `ESP_ERR_INVALID_ARG` if the provided configuration is invalid (e.g., threshold values out of range).
*/
esp_err_t uart_wakeup_setup(uart_port_t uart_num, const uart_wakeup_cfg_t *cfg);
#ifdef __cplusplus
}
#endif