Add PoC Serial communication implementation

This commit is contained in:
Lorow
2025-05-09 19:45:05 +02:00
parent 9ce9a7da74
commit 1eeba31efd
4 changed files with 101 additions and 2 deletions

View File

@@ -0,0 +1,49 @@
#include "SerialManager.hpp"
#define ECHO_TEST_TXD (4)
#define ECHO_TEST_RXD (5)
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)
#define ECHO_UART_PORT_NUM (1)
#define ECHO_UART_BAUD_RATE (115200)
#define ECHO_TASK_STACK_SIZE (3072)
static const char *TAG = "UART TEST";
#define BUF_SIZE (1024)
uint8_t *data;
SerialManager::SerialManager(std::shared_ptr<CommandManager> commandManager) : commandManager(commandManager) {}
void SerialManager::setup()
{
usb_serial_jtag_driver_config_t usb_serial_jtag_config;
usb_serial_jtag_config.rx_buffer_size = BUF_SIZE;
usb_serial_jtag_config.tx_buffer_size = BUF_SIZE;
usb_serial_jtag_driver_install(&usb_serial_jtag_config);
// Configure a temporary buffer for the incoming data
data = (uint8_t *)malloc(BUF_SIZE);
}
// rewrite this to serial events or something
void SerialManager::try_receive()
{
int len = usb_serial_jtag_read_bytes(data, (BUF_SIZE - 1), 20 / portTICK_PERIOD_MS);
if (len)
{
auto result = this->commandManager->executeFromJson(std::string_view((const char *)data));
auto resultMessage = result.getResult();
usb_serial_jtag_write_bytes(resultMessage.c_str(), resultMessage.length(), 20 / portTICK_PERIOD_MS);
}
}
void HandleSerialManagerTask(void *pvParameters)
{
auto serialManager = static_cast<SerialManager *>(pvParameters);
while (1)
{
serialManager->try_receive();
}
}

View File

@@ -0,0 +1,32 @@
#pragma once
#ifndef SERIALMANAGER_HPP
#define SERIALMANAGER_HPP
#include <stdio.h>
#include <string>
#include <memory>
#include <CommandManager.hpp>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/uart.h"
#include "esp_log.h"
#include "driver/gpio.h"
#include "driver/usb_serial_jtag.h"
#include "esp_vfs_usb_serial_jtag.h"
#include "esp_vfs_dev.h"
class SerialManager
{
public:
SerialManager(std::shared_ptr<CommandManager> commandManager);
void setup();
void try_receive();
private:
QueueHandle_t serialQueue;
std::shared_ptr<CommandManager> commandManager;
};
void HandleSerialManagerTask(void *pvParameters);
#endif