1
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
37
38
39
44
52
53
59
64
65
69
70
71
73
81
82
83
84
85
86
87
88
89
90
94
99
100
107
108
109
110
111
112
113
114
115
118
119
122
123
124
127
128
129
132
133
136
137
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
161
167
171
172
173
174
175
176
177
178
179
180
181
182
/* ... */
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include "soc/uart_periph.h"
#include "esp_rom_gpio.h"
#include "driver/gpio.h"
#include "hal/gpio_hal.h"
#include "sdkconfig.h"
#include "esp_console.h"
#include "linenoise/linenoise.h"
#include <string.h>12 includes
#define DEFAULT_UART_CHANNEL (0)
#define CONSOLE_UART_CHANNEL (1 - DEFAULT_UART_CHANNEL)
#define DEFAULT_UART_RX_PIN (3)
#define DEFAULT_UART_TX_PIN (2)
#define CONSOLE_UART_RX_PIN (4)
#define CONSOLE_UART_TX_PIN (5)
#define UARTS_BAUD_RATE (115200)
#define TASK_STACK_SIZE (2048)
#define READ_BUF_SIZE (1024)9 defines
/* ... */
const char test_message[] = "This is an example string, if you can read this, the example is a success!";
/* ... */
static void connect_uarts(void)
{
esp_rom_gpio_connect_out_signal(DEFAULT_UART_RX_PIN, UART_PERIPH_SIGNAL(1, SOC_UART_TX_PIN_IDX), false, false);
esp_rom_gpio_connect_in_signal(DEFAULT_UART_RX_PIN, UART_PERIPH_SIGNAL(0, SOC_UART_RX_PIN_IDX), false);
esp_rom_gpio_connect_out_signal(DEFAULT_UART_TX_PIN, UART_PERIPH_SIGNAL(0, SOC_UART_TX_PIN_IDX), false, false);
esp_rom_gpio_connect_in_signal(DEFAULT_UART_TX_PIN, UART_PERIPH_SIGNAL(1, SOC_UART_RX_PIN_IDX), false);
}{ ... }
/* ... */
static void disconnect_uarts(void)
{
esp_rom_gpio_connect_out_signal(CONSOLE_UART_TX_PIN, UART_PERIPH_SIGNAL(1, SOC_UART_TX_PIN_IDX), false, false);
esp_rom_gpio_connect_in_signal(CONSOLE_UART_RX_PIN, UART_PERIPH_SIGNAL(1, SOC_UART_RX_PIN_IDX), false);
}{ ... }
/* ... */
static void configure_uarts(void)
{
/* ... */
uart_config_t uart_config = {
.baud_rate = UARTS_BAUD_RATE,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_DEFAULT,
}{...};
ESP_ERROR_CHECK(uart_driver_install(DEFAULT_UART_CHANNEL, READ_BUF_SIZE * 2, 0, 0, NULL, 0));
ESP_ERROR_CHECK(uart_param_config(DEFAULT_UART_CHANNEL, &uart_config));
ESP_ERROR_CHECK(uart_set_pin(DEFAULT_UART_CHANNEL, DEFAULT_UART_TX_PIN, DEFAULT_UART_RX_PIN,
UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
connect_uarts();
}{ ... }
/* ... */
static int console_test(int argc, char **argv)
{
printf("%s\n", test_message);
return 0;
}{ ... }
/* ... */
static void send_commands(void* arg)
{
static char data[READ_BUF_SIZE];
char command[] = "consoletest\n";
int len = 0;
void* substring = NULL;
do {
len = uart_read_bytes(DEFAULT_UART_CHANNEL, data, READ_BUF_SIZE, 100 / portTICK_PERIOD_MS);
}{...} while (len == 0);
if (len == -1) {
goto end;
}{...}
len = uart_write_bytes(DEFAULT_UART_CHANNEL, command, sizeof(command));
if (len == -1) {
goto end;
}{...}
do {
len = uart_read_bytes(DEFAULT_UART_CHANNEL, data, READ_BUF_SIZE - 1, 250 / portTICK_PERIOD_MS);
}{...} while (len == 0);
if (len == -1) {
goto end;
}{...}
/* ... */
data[len] = 0;
substring = strcasestr(data, test_message);
end:
disconnect_uarts();
printf("Result: %s\n", substring == NULL ? "Failure" : "Success");
vTaskDelete(NULL);
}{ ... }
void app_main(void)
{
esp_console_repl_t *repl = NULL;
esp_console_repl_config_t repl_config = ESP_CONSOLE_REPL_CONFIG_DEFAULT();
repl_config.prompt = "repl >";
const esp_console_cmd_t cmd = {
.command = "consoletest",
.help = "Test console by sending a message",
.func = &console_test,
}{...};
esp_console_dev_uart_config_t uart_config = {
.channel = CONSOLE_UART_CHANNEL,
.baud_rate = UARTS_BAUD_RATE,
.tx_gpio_num = CONSOLE_UART_TX_PIN,
.rx_gpio_num = CONSOLE_UART_RX_PIN,
}{...};
/* ... */
linenoiseSetDumbMode(1);
ESP_ERROR_CHECK(esp_console_new_repl_uart(&uart_config, &repl_config, &repl));
configure_uarts();
ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
xTaskCreate(send_commands, "send_commands_task", TASK_STACK_SIZE, NULL, 10, NULL);
ESP_ERROR_CHECK(esp_console_start_repl(repl));
}{ ... }