Make input and output buffer sizes configurable
This commit is contained in:
parent
3720ec76d2
commit
86e2d3a6b8
@ -25,6 +25,13 @@ menu "EspTunnel Configuration"
|
|||||||
help
|
help
|
||||||
The UART interface to use for RX and TX.
|
The UART interface to use for RX and TX.
|
||||||
|
|
||||||
|
config ESPTNL_BUFFER_SIZE
|
||||||
|
int "Buffer size"
|
||||||
|
default 128
|
||||||
|
range 40 218
|
||||||
|
help
|
||||||
|
The maximum size of the buffer to transmit via ESPNOW.
|
||||||
|
|
||||||
choice ESPTNL_LOG_LEVEL
|
choice ESPTNL_LOG_LEVEL
|
||||||
prompt "Log level"
|
prompt "Log level"
|
||||||
default ESPTNL_LOG_DEBUG
|
default ESPTNL_LOG_DEBUG
|
||||||
|
|||||||
@ -22,7 +22,7 @@ static_assert(std::is_standard_layout_v<EspNowEvent> && std::is_trivial_v<EspNow
|
|||||||
"EspNowEvent is not compatible with a FreeRTOS queue.");
|
"EspNowEvent is not compatible with a FreeRTOS queue.");
|
||||||
|
|
||||||
QueueHandle_t s_esp_now_queue = nullptr;
|
QueueHandle_t s_esp_now_queue = nullptr;
|
||||||
std::array<std::uint8_t, 128> s_rx_buffer;
|
std::array<std::uint8_t, CONFIG_ESPTNL_BUFFER_SIZE> s_rx_buffer;
|
||||||
std::variant<MacAddress, std::monostate> s_peer;
|
std::variant<MacAddress, std::monostate> s_peer;
|
||||||
|
|
||||||
bool s_isBroadcastAddress(const std::uint8_t* mac)
|
bool s_isBroadcastAddress(const std::uint8_t* mac)
|
||||||
@ -123,12 +123,12 @@ void sendHello()
|
|||||||
ESP_ERROR_CHECK(esp_now_send(broadcast_mac.data(), (uint8_t*)buffer, length));
|
ESP_ERROR_CHECK(esp_now_send(broadcast_mac.data(), (uint8_t*)buffer, length));
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::array<std::uint8_t, 128>& getRxBuffer()
|
const std::array<std::uint8_t, CONFIG_ESPTNL_BUFFER_SIZE>& getRxBuffer()
|
||||||
{
|
{
|
||||||
return s_rx_buffer;
|
return s_rx_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendData(const std::array<std::uint8_t, 128>& buffer, const std::size_t length)
|
void sendData(const std::array<std::uint8_t, CONFIG_ESPTNL_BUFFER_SIZE>& buffer, const std::size_t length)
|
||||||
{
|
{
|
||||||
if (const MacAddress* peer_mac = std::get_if<MacAddress>(&s_peer);
|
if (const MacAddress* peer_mac = std::get_if<MacAddress>(&s_peer);
|
||||||
peer_mac != nullptr)
|
peer_mac != nullptr)
|
||||||
|
|||||||
@ -28,7 +28,7 @@ void setupWifi();
|
|||||||
[[nodiscard]] QueueHandle_t setupEspNow();
|
[[nodiscard]] QueueHandle_t setupEspNow();
|
||||||
void sendHello();
|
void sendHello();
|
||||||
|
|
||||||
void sendData(const std::array<std::uint8_t, 128>& buffer, const std::size_t length);
|
void sendData(const std::array<std::uint8_t, CONFIG_ESPTNL_BUFFER_SIZE>& buffer, const std::size_t length);
|
||||||
const std::array<std::uint8_t, 128>& getRxBuffer();
|
const std::array<std::uint8_t, CONFIG_ESPTNL_BUFFER_SIZE>& getRxBuffer();
|
||||||
|
|
||||||
}// namespace App
|
}// namespace App
|
||||||
|
|||||||
@ -28,7 +28,7 @@ QueueHandle_t setupSerial(const uart_port_t uart)
|
|||||||
.source_clk = UART_SCLK_DEFAULT,
|
.source_clk = UART_SCLK_DEFAULT,
|
||||||
};
|
};
|
||||||
|
|
||||||
ESP_ERROR_CHECK(uart_driver_install(uart, 128 * 2, 128 * 2, 4, &s_uart_queue, 0));
|
ESP_ERROR_CHECK(uart_driver_install(uart, CONFIG_ESPTNL_BUFFER_SIZE * 2, CONFIG_ESPTNL_BUFFER_SIZE * 2, 4, &s_uart_queue, 0));
|
||||||
ESP_ERROR_CHECK(uart_param_config(uart, &config));
|
ESP_ERROR_CHECK(uart_param_config(uart, &config));
|
||||||
ESP_ERROR_CHECK(uart_set_pin(uart, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
|
ESP_ERROR_CHECK(uart_set_pin(uart, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
|
||||||
|
|
||||||
|
|||||||
@ -29,10 +29,10 @@ QueueHandle_t s_uart_queue = nullptr;
|
|||||||
|
|
||||||
void s_sendUartData(std::size_t len)
|
void s_sendUartData(std::size_t len)
|
||||||
{
|
{
|
||||||
len = std::clamp<std::size_t>(len, 1, 128);
|
len = std::clamp<std::size_t>(len, 1, CONFIG_ESPTNL_BUFFER_SIZE);
|
||||||
ESP_LOGD(LOG_TAG, "Sending %u bytes via UART.", len);
|
ESP_LOGD(LOG_TAG, "Sending %u bytes via UART.", len);
|
||||||
|
|
||||||
std::array<std::uint8_t, 128> tx_buffer;
|
std::array<std::uint8_t, CONFIG_ESPTNL_BUFFER_SIZE> tx_buffer;
|
||||||
uart_read_bytes(CONFIG_ESPTNL_UART, tx_buffer.data(), len, 0);
|
uart_read_bytes(CONFIG_ESPTNL_UART, tx_buffer.data(), len, 0);
|
||||||
|
|
||||||
xTimerStop(s_timer, 0);
|
xTimerStop(s_timer, 0);
|
||||||
@ -43,7 +43,7 @@ std::size_t s_uartBytesWaiting()
|
|||||||
{
|
{
|
||||||
std::size_t len = 0;
|
std::size_t len = 0;
|
||||||
uart_get_buffered_data_len(CONFIG_ESPTNL_UART, &len);
|
uart_get_buffered_data_len(CONFIG_ESPTNL_UART, &len);
|
||||||
return std::min<std::size_t>(len, 128);
|
return std::min<std::size_t>(len, CONFIG_ESPTNL_BUFFER_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[noreturn]] void s_mainTask(void*)
|
[[noreturn]] void s_mainTask(void*)
|
||||||
@ -81,7 +81,7 @@ std::size_t s_uartBytesWaiting()
|
|||||||
ESP_LOGD(LOG_TAG, "ESP-NOW event: TX completed. Checking to send data.");
|
ESP_LOGD(LOG_TAG, "ESP-NOW event: TX completed. Checking to send data.");
|
||||||
|
|
||||||
const std::size_t bytes_waiting = s_uartBytesWaiting();
|
const std::size_t bytes_waiting = s_uartBytesWaiting();
|
||||||
if (s_uartBytesWaiting() >= 128)
|
if (s_uartBytesWaiting() >= CONFIG_ESPTNL_BUFFER_SIZE)
|
||||||
{
|
{
|
||||||
s_sendUartData(bytes_waiting);
|
s_sendUartData(bytes_waiting);
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ std::size_t s_uartBytesWaiting()
|
|||||||
if (event.type == UART_DATA)
|
if (event.type == UART_DATA)
|
||||||
{
|
{
|
||||||
const std::size_t recv_size = s_uartBytesWaiting();
|
const std::size_t recv_size = s_uartBytesWaiting();
|
||||||
if (recv_size >= 128)
|
if (recv_size >= CONFIG_ESPTNL_BUFFER_SIZE)
|
||||||
s_sendUartData(recv_size);
|
s_sendUartData(recv_size);
|
||||||
else
|
else
|
||||||
xTimerReset(s_timer, 0);
|
xTimerReset(s_timer, 0);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user