Files
ESP32C3-0.42OLED-OS/main/apps/app_serial.c
T

98 lines
2.8 KiB
C

#include "apps.h"
#include "os_gfx.h"
#include "os_status.h"
#include "sys_uart.h"
#include <stdio.h>
#include <string.h>
#include "esp_netif.h"
#include "esp_log.h"
static const uint32_t s_baud_presets[] = {9600, 19200, 38400, 57600, 115200, 230400};
#define BAUD_PRESETS_COUNT (sizeof(s_baud_presets) / sizeof(s_baud_presets[0]))
static void serial_init(void)
{
sys_uart_init(SYS_UART_DEFAULT_BAUD);
}
static void serial_enter(void)
{
}
static void serial_update(uint32_t delta_ms)
{
(void)delta_ms;
sys_status_t status;
sys_status_get(&status);
sys_gfx_draw_status_bar(&status);
uint32_t rx_count = 0, tx_count = 0;
sys_uart_get_stats(&rx_count, &tx_count);
uint32_t baud = sys_uart_get_baud_rate();
/* Title */
sys_gfx_draw_str_3x5(3, 9, "SERIAL CONSOLE", COLOR_WHITE);
/* Web URL / IP Info */
char ip_str[24] = "192.168.4.1";
if (status.wifi_state == WIFI_STATE_CONNECTED) {
esp_netif_t *netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
if (netif) {
esp_netif_ip_info_t ip_info;
if (esp_netif_get_ip_info(netif, &ip_info) == ESP_OK) {
esp_ip4addr_ntoa(&ip_info.ip, ip_str, sizeof(ip_str));
}
}
}
char url_buf[32];
snprintf(url_buf, sizeof(url_buf), "IP:%s", ip_str);
sys_gfx_draw_str_3x5(3, 16, url_buf, COLOR_WHITE);
/* Stats Line: Baud, RX, TX */
char stats_buf[32];
snprintf(stats_buf, sizeof(stats_buf), "B:%lu R:%lu T:%lu",
(unsigned long)baud, (unsigned long)rx_count, (unsigned long)tx_count);
sys_gfx_draw_str_3x5(3, 23, stats_buf, COLOR_WHITE);
sys_gfx_draw_action_bar("C:PING D:BAUD", "H:HOME");
}
static void serial_handle_input(input_action_t action)
{
if (action == INPUT_ACTION_CLICK) {
sys_uart_write_str("ESP32C3-OS PING\r\n");
sys_gfx_show_toast("TX: PING SENT", 1000);
} else if (action == INPUT_ACTION_DOUBLE_CLICK) {
uint32_t current_baud = sys_uart_get_baud_rate();
size_t next_idx = 0;
for (size_t i = 0; i < BAUD_PRESETS_COUNT; i++) {
if (s_baud_presets[i] == current_baud) {
next_idx = (i + 1) % BAUD_PRESETS_COUNT;
break;
}
}
sys_uart_set_baud_rate(s_baud_presets[next_idx]);
char toast[24];
snprintf(toast, sizeof(toast), "BAUD:%lu", (unsigned long)s_baud_presets[next_idx]);
sys_gfx_show_toast(toast, 1200);
} else if (action == INPUT_ACTION_LONG_PRESS) {
sys_uart_clear_rx_buffer();
sys_gfx_show_toast("BUF CLEARED", 1000);
}
}
static void serial_exit(void)
{
}
const sys_app_t g_app_serial = {
.id = "serial",
.name = "Web Serial",
.init = serial_init,
.enter = serial_enter,
.update = serial_update,
.handle_input = serial_handle_input,
.exit = serial_exit,
};