mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-03 04:34:31 +02:00
bugfix(uart): uniform AT_CMD char configuration
This commit is contained in:
@@ -680,44 +680,46 @@ esp_err_t uart_disable_pattern_det_intr(uart_port_t uart_num);
|
||||
* @brief UART enable pattern detect function.
|
||||
* Designed for applications like 'AT commands'.
|
||||
* When the hardware detect a series of one same character, the interrupt will be triggered.
|
||||
* @note This function only works for esp32. And this function is deprecated, please use
|
||||
* uart_enable_pattern_det_baud_intr instead.
|
||||
*
|
||||
* @param uart_num UART port number.
|
||||
* @param pattern_chr character of the pattern
|
||||
* @param pattern_chr character of the pattern.
|
||||
* @param chr_num number of the character, 8bit value.
|
||||
* @param chr_tout timeout of the interval between each pattern characters, 24bit value, unit is APB (80Mhz) clock cycle.
|
||||
* When the duration is less than this value, it will not take this data as at_cmd char
|
||||
* When the duration is less than this value, it will not take this data as at_cmd char.
|
||||
* @param post_idle idle time after the last pattern character, 24bit value, unit is APB (80Mhz) clock cycle.
|
||||
* When the duration is less than this value, it will not take the previous data as the last at_cmd char
|
||||
* @param pre_idle idle time before the first pattern character, 24bit value, unit is APB (80Mhz) clock cycle.
|
||||
* When the duration is less than this value, it will not take this data as the first at_cmd char
|
||||
* When the duration is less than this value, it will not take this data as the first at_cmd char.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_FAIL Parameter error
|
||||
*/
|
||||
esp_err_t uart_enable_pattern_det_intr(uart_port_t uart_num, char pattern_chr, uint8_t chr_num, int chr_tout, int post_idle, int pre_idle);
|
||||
#elif CONFIG_IDF_TARGET_ESP32S2BETA
|
||||
esp_err_t uart_enable_pattern_det_intr(uart_port_t uart_num, char pattern_chr, uint8_t chr_num, int chr_tout, int post_idle, int pre_idle) __attribute__((deprecated));
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief UART enable pattern detect function.
|
||||
* Designed for applications like 'AT commands'.
|
||||
* When the hardware detect a series of one same character, the interrupt will be triggered.
|
||||
*
|
||||
* @param uart_num UART port number.
|
||||
* @param pattern_chr character of the pattern
|
||||
* @param pattern_chr character of the pattern.
|
||||
* @param chr_num number of the character, 8bit value.
|
||||
* @param chr_tout timeout of the interval between each pattern characters, 16bit value, unit is baud rate.
|
||||
* When the duration is more than this value, it will not take this data as at_cmd char
|
||||
* @param post_idle idle time after the last pattern character, 16bit value, unit is baud rate.
|
||||
* @param chr_tout timeout of the interval between each pattern characters, 16bit value, unit is the baud-rate cycle you configured.
|
||||
* When the duration is more than this value, it will not take this data as at_cmd char.
|
||||
* @param post_idle idle time after the last pattern character, 16bit value, unit is the baud-rate cycle you configured.
|
||||
* When the duration is less than this value, it will not take the previous data as the last at_cmd char
|
||||
* @param pre_idle idle time before the first pattern character, 16bit value, unit is baud rate.
|
||||
* When the duration is less than this value, it will not take this data as the first at_cmd char
|
||||
* @param pre_idle idle time before the first pattern character, 16bit value, unit is the baud-rate cycle you configured.
|
||||
* When the duration is less than this value, it will not take this data as the first at_cmd char.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_FAIL Parameter error
|
||||
*/
|
||||
esp_err_t uart_enable_pattern_det_intr(uart_port_t uart_num, char pattern_chr, uint8_t chr_num, int chr_tout, int post_idle, int pre_idle);
|
||||
#endif
|
||||
esp_err_t uart_enable_pattern_det_baud_intr(uart_port_t uart_num, char pattern_chr, uint8_t chr_num, int chr_tout, int post_idle, int pre_idle);
|
||||
|
||||
/**
|
||||
* @brief Return the nearest detected pattern position in buffer.
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -11,8 +11,9 @@
|
||||
// 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 _SOC_UART_CAPS_H_
|
||||
#define _SOC_UART_CAPS_H_
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -22,5 +23,3 @@ extern "C" {
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SOC_UART_CAPS_H_ */
|
||||
|
@@ -27,11 +27,19 @@ static wl_handle_t test_wl_handle;
|
||||
|
||||
TEST_CASE("Can use access() for UART", "[vfs]")
|
||||
{
|
||||
const char *uarts[] = {"/dev/uart/0", "/dev/uart/1", "/dev/uart/2"};
|
||||
const char *uarts[] = {
|
||||
"/dev/uart/0",
|
||||
"/dev/uart/1",
|
||||
#if SOC_UART_NUM > 2
|
||||
"/dev/uart/2"
|
||||
#endif
|
||||
};
|
||||
|
||||
uart_driver_install(UART_NUM_0, 256, 0, 0, NULL, 0);
|
||||
uart_driver_install(UART_NUM_1, 256, 0, 0, NULL, 0);
|
||||
#if SOC_UART_NUM > 2
|
||||
uart_driver_install(UART_NUM_2, 256, 0, 0, NULL, 0);
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < sizeof(uarts)/sizeof(uarts[0]); ++i) {
|
||||
TEST_ASSERT_EQUAL_MESSAGE(access(uarts[i], F_OK), 0, uarts[i]);
|
||||
@@ -55,7 +63,9 @@ TEST_CASE("Can use access() for UART", "[vfs]")
|
||||
|
||||
uart_driver_delete(UART_NUM_0);
|
||||
uart_driver_delete(UART_NUM_1);
|
||||
#if SOC_UART_NUM > 2
|
||||
uart_driver_delete(UART_NUM_2);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void test_spi_flash_setup()
|
||||
|
@@ -169,7 +169,7 @@ The API provides a convenient way to handle specific interrupts discussed above
|
||||
|
||||
* **FIFO space threshold or transmission timeout reached** - the interrupts on TX or Rx FIFO buffer being filled with specific number of characters or on a timeout of sending or receiving data. To use these interrupts, first configure respective threshold values of the buffer length and the timeout by entering them in :cpp:type:`uart_intr_config_t` structure and calling :cpp:func:`uart_intr_config`. Then enable interrupts with functions :cpp:func:`uart_enable_rx_intr` and :cpp:func:`uart_enable_tx_intr`. To disable these interrupts there are corresponding functions :cpp:func:`uart_disable_rx_intr` or :cpp:func:`uart_disable_tx_intr`.
|
||||
|
||||
* **Pattern detection** - an interrupt triggered on detecting a 'pattern' of the same character being sent number of times. The functions that allow to configure, enable and disable this interrupt are :cpp:func:`uart_enable_pattern_det_intr` and cpp:func:`uart_disable_pattern_det_intr`.
|
||||
* **Pattern detection** - an interrupt triggered on detecting a 'pattern' of the same character being sent number of times. The functions that allow to configure, enable and disable this interrupt are :cpp:func:`uart_enable_pattern_det_baud_intr` and cpp:func:`uart_disable_pattern_det_intr`.
|
||||
|
||||
Macros
|
||||
^^^^^^
|
||||
|
@@ -699,7 +699,7 @@ nmea_parser_handle_t nmea_parser_init(const nmea_parser_config_t *config)
|
||||
goto err_uart_install;
|
||||
}
|
||||
/* Set pattern interrupt, used to detect the end of a line */
|
||||
uart_enable_pattern_det_intr(esp_gps->uart_port, '\n', 1, 10000, 10, 10);
|
||||
uart_enable_pattern_det_baud_intr(esp_gps->uart_port, '\n', 1, 9, 0, 0);
|
||||
/* Set pattern queue size */
|
||||
uart_pattern_queue_reset(esp_gps->uart_port, config->uart.event_queue_size);
|
||||
uart_flush(esp_gps->uart_port);
|
||||
|
@@ -47,7 +47,7 @@
|
||||
#define PACKET_READ_TICS (100 / portTICK_RATE_MS)
|
||||
#define ECHO_TASK_STACK_SIZE (2048)
|
||||
#define ECHO_TASK_PRIO (10)
|
||||
#define ECHO_UART_PORT (UART_NUM_2)
|
||||
#define ECHO_UART_PORT (UART_NUM_MAX - 1)
|
||||
|
||||
static const char *TAG = "RS485_ECHO_APP";
|
||||
|
||||
|
@@ -140,11 +140,7 @@ void app_main()
|
||||
uart_driver_install(EX_UART_NUM, BUF_SIZE * 2, BUF_SIZE * 2, 20, &uart0_queue, 0);
|
||||
|
||||
//Set uart pattern detect function.
|
||||
#if CONFIG_IDF_TARGET_ESP32
|
||||
uart_enable_pattern_det_intr(EX_UART_NUM, '+', PATTERN_CHR_NUM, 10000, 10, 10);
|
||||
#elif CONFIG_IDF_TARGET_ESP32S2BETA
|
||||
uart_enable_pattern_det_intr(EX_UART_NUM, '+', PATTERN_CHR_NUM, 9, 0, 0);
|
||||
#endif
|
||||
uart_enable_pattern_det_baud_intr(EX_UART_NUM, '+', PATTERN_CHR_NUM, 9, 0, 0);
|
||||
//Reset the pattern queue length to record at most 20 pattern positions.
|
||||
uart_pattern_queue_reset(EX_UART_NUM, 20);
|
||||
|
||||
|
@@ -28,9 +28,9 @@
|
||||
#define ESP_MODEM_LINE_BUFFER_SIZE (CONFIG_EXAMPLE_UART_RX_BUFFER_SIZE / 2)
|
||||
#define ESP_MODEM_EVENT_QUEUE_SIZE (16)
|
||||
|
||||
#define MIN_PATTERN_INTERVAL (10000)
|
||||
#define MIN_POST_IDLE (10)
|
||||
#define MIN_PRE_IDLE (10)
|
||||
#define MIN_PATTERN_INTERVAL (9)
|
||||
#define MIN_POST_IDLE (0)
|
||||
#define MIN_PRE_IDLE (0)
|
||||
|
||||
/**
|
||||
* @brief Macro defined for error checking
|
||||
@@ -264,12 +264,12 @@ static esp_err_t esp_modem_dte_send_wait(modem_dte_t *dte, const char *data, uin
|
||||
MODEM_CHECK(res >= len, "wait prompt [%s] timeout", err, prompt);
|
||||
MODEM_CHECK(!strncmp(prompt, (const char *)buffer, len), "get wrong prompt: %s", err, buffer);
|
||||
free(buffer);
|
||||
uart_enable_pattern_det_intr(esp_dte->uart_port, '\n', 1, MIN_PATTERN_INTERVAL, MIN_POST_IDLE, MIN_PRE_IDLE);
|
||||
uart_enable_pattern_det_baud_intr(esp_dte->uart_port, '\n', 1, MIN_PATTERN_INTERVAL, MIN_POST_IDLE, MIN_PRE_IDLE);
|
||||
return ESP_OK;
|
||||
err:
|
||||
free(buffer);
|
||||
err_write:
|
||||
uart_enable_pattern_det_intr(esp_dte->uart_port, '\n', 1, MIN_PATTERN_INTERVAL, MIN_POST_IDLE, MIN_PRE_IDLE);
|
||||
uart_enable_pattern_det_baud_intr(esp_dte->uart_port, '\n', 1, MIN_PATTERN_INTERVAL, MIN_POST_IDLE, MIN_PRE_IDLE);
|
||||
err_param:
|
||||
return ESP_FAIL;
|
||||
}
|
||||
@@ -298,7 +298,7 @@ static esp_err_t esp_modem_dte_change_mode(modem_dte_t *dte, modem_mode_t new_mo
|
||||
case MODEM_COMMAND_MODE:
|
||||
uart_disable_rx_intr(esp_dte->uart_port);
|
||||
uart_flush(esp_dte->uart_port);
|
||||
uart_enable_pattern_det_intr(esp_dte->uart_port, '\n', 1, MIN_PATTERN_INTERVAL, MIN_POST_IDLE, MIN_PRE_IDLE);
|
||||
uart_enable_pattern_det_baud_intr(esp_dte->uart_port, '\n', 1, MIN_PATTERN_INTERVAL, MIN_POST_IDLE, MIN_PRE_IDLE);
|
||||
uart_pattern_queue_reset(esp_dte->uart_port, CONFIG_EXAMPLE_UART_PATTERN_QUEUE_SIZE);
|
||||
MODEM_CHECK(dce->set_working_mode(dce, new_mode) == ESP_OK, "set new working mode:%d failed", err, new_mode);
|
||||
break;
|
||||
@@ -392,7 +392,7 @@ modem_dte_t *esp_modem_dte_init(const esp_modem_dte_config_t *config)
|
||||
CONFIG_EXAMPLE_UART_EVENT_QUEUE_SIZE, &(esp_dte->event_queue), 0);
|
||||
MODEM_CHECK(res == ESP_OK, "install uart driver failed", err_uart_config);
|
||||
/* Set pattern interrupt, used to detect the end of a line. */
|
||||
res = uart_enable_pattern_det_intr(esp_dte->uart_port, '\n', 1, MIN_PATTERN_INTERVAL, MIN_POST_IDLE, MIN_PRE_IDLE);
|
||||
res = uart_enable_pattern_det_baud_intr(esp_dte->uart_port, '\n', 1, MIN_PATTERN_INTERVAL, MIN_POST_IDLE, MIN_PRE_IDLE);
|
||||
/* Set pattern queue size */
|
||||
res |= uart_pattern_queue_reset(esp_dte->uart_port, CONFIG_EXAMPLE_UART_PATTERN_QUEUE_SIZE);
|
||||
MODEM_CHECK(res == ESP_OK, "config uart pattern failed", err_uart_pattern);
|
||||
|
Reference in New Issue
Block a user