Tasmota/lib/libesp32_epdiy/examples/terminal/main/main.c

98 lines
2.6 KiB
C
Executable File

/* Simple firmware for a ESP32 displaying a static image on an EPaper Screen.
*
* Write an image into a header file using a 3...2...1...0 format per pixel,
* for 4 bits color (16 colors - well, greys.) MSB first. At 80 MHz, screen
* clears execute in 1.075 seconds and images are drawn in 1.531 seconds.
*/
#include "driver/uart.h"
#include "esp_heap_caps.h"
#include "driver/gpio.h"
#include "esp_heap_caps.h"
#include "esp_timer.h"
#include "esp_log.h"
#include "esp_types.h"
#include "esp_sleep.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include <string.h>
#include "epd_driver.h"
#include "st.h"
#define USB_TXD (GPIO_NUM_1)
#define SERIAL_RXD (GPIO_NUM_3)
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)
#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b))
#define DEFAULT(a, b) (a) = (a) ? (a) : (b)
#define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)
#define BUF_SIZE (4096)
#define ESC_BUF_SIZE (128 * 4)
#define ESC_ARG_SIZE 16
void csihandle(void);
void tclearregion(int x1, int y1, int x2, int y2);
int min(int a, int b) {
return a < b ? a : b;
}
int max(int a, int b) {
return a > b ? a : b;
}
void delay(uint64_t millis) { vTaskDelay(millis / portTICK_PERIOD_MS); }
uint64_t millis() { return esp_timer_get_time() / 1000; }
int log_to_uart(const char* fmt, va_list args) {
char buffer[256];
int result = vsprintf(buffer, fmt, args);
uart_write_bytes(UART_NUM_1, buffer, strnlen(buffer, 256));
return result;
}
void read_task() {
while (true) {
ttyread();
}
}
void app_main() {
epd_init(EPD_OPTIONS_DEFAULT);
delay(300);
epd_poweron();
epd_clear();
epd_poweroff();
/* Configure parameters of an UART driver,
* communication pins and install the driver */
uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.use_ref_tick = true,
};
uart_param_config(UART_NUM_1, &uart_config);
// Change here to modify tx/rx pins
ESP_ERROR_CHECK(uart_set_pin(UART_NUM_1, USB_TXD, SERIAL_RXD, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
ESP_ERROR_CHECK(uart_driver_install(UART_NUM_1, BUF_SIZE, 1024, 0, NULL, 0));
// Still log to the serial output
// Needed if reusing the USB TX/RX
esp_log_set_vprintf(log_to_uart);
ESP_LOGI("term", "listening\n");
tnew(cols, rows);
selinit();
RTOS_ERROR_CHECK(xTaskCreatePinnedToCore(&read_task, "read", 1 << 12, NULL, 1, NULL, 0));
}