Add Serial Terminal App & WebUi Theme
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
#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,
|
||||
};
|
||||
Reference in New Issue
Block a user