minor cleanup
This commit is contained in:
parent
e3e600ed91
commit
26b3b96c17
3 changed files with 121 additions and 132 deletions
100
src/main.c
100
src/main.c
|
@ -2,8 +2,6 @@
|
|||
#include "sdkconfig.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#include "baudot.h"
|
||||
#include "softuart.h"
|
||||
#include "network.h"
|
||||
#include "rmtuart.h"
|
||||
|
||||
|
@ -27,108 +25,10 @@ network_ctx_t network = {
|
|||
.tty_en_gpio = TTY_EN_GPIO,
|
||||
};
|
||||
|
||||
void softuart_test()
|
||||
{
|
||||
|
||||
softuart_ctx_t softuart = {
|
||||
.tx_gpio = TTY_TX_GPIO,
|
||||
.rx_gpio = TTY_RX_GPIO,
|
||||
};
|
||||
|
||||
softuart_start(&softuart);
|
||||
|
||||
while (1)
|
||||
{
|
||||
ESP_LOGI(TAG, "sending...");
|
||||
uint8_t data[] = {1, 1, 1, 2, 3, 4, 0b10101 /* 21 */, 0b01010 /* 10 */};
|
||||
xStreamBufferSend(softuart.tx_buffer, &data, sizeof(data), pdMS_TO_TICKS(1000));
|
||||
for (int t = 0; t < 20; t++)
|
||||
{
|
||||
uint8_t rx_data[32] = {0};
|
||||
size_t rx_data_len = xStreamBufferReceive(softuart.rx_buffer, &rx_data, sizeof(rx_data), pdMS_TO_TICKS(100));
|
||||
if (rx_data_len > 0)
|
||||
{
|
||||
// ESP_LOGI(TAG, "%d bytes received:", rx_data_len);
|
||||
for (size_t i = 0; i < rx_data_len; i++)
|
||||
{
|
||||
ESP_LOGI(TAG, "data[%d] = %02x (%d)", i, rx_data[i], rx_data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include <string.h>
|
||||
void unicode_test()
|
||||
{
|
||||
baudot_context_t ctx = {0, 0, 0};
|
||||
uint8_t baudot[] = {0x03 /* a */, 0x19 /* b */, 0x0e /* c */, 0x1b /* fig */, 0x1a /* ę */, 0x0d /* ą */, 0x14 /* ł */, 0x1f /* letters */};
|
||||
uint8_t unicode[64] = {};
|
||||
uint8_t baudot2[64] = {};
|
||||
char *unicode2 = "zażółć gęślą jaźń ZAŻÓŁĆ GĘŚLĄ JAŹŃ";
|
||||
ESP_LOGI(TAG, "Converting baudot...");
|
||||
int baudot_len = unicode_to_baudot(&ctx, (uint8_t *)unicode2, strlen(unicode2), baudot2, sizeof(baudot2));
|
||||
ESP_LOGI(TAG, "Got baudot: %d", (int)baudot_len);
|
||||
}
|
||||
|
||||
void rmtuart_echo_test()
|
||||
{
|
||||
rmtuart_start(&rmtuart);
|
||||
while (true)
|
||||
{
|
||||
for (int i = 0; i < 1; i++)
|
||||
{
|
||||
xStreamBufferReset(rmtuart.tx_buffer);
|
||||
xStreamBufferReset(rmtuart.rx_buffer);
|
||||
|
||||
uint8_t tx_data[] = {1, 2, 3, 4, 5, 0b10000, 0b10001, 0b10101, 0b11111};
|
||||
int tx_size = sizeof(tx_data);
|
||||
xStreamBufferSend(rmtuart.tx_buffer, &tx_data, tx_size, pdMS_TO_TICKS(1000));
|
||||
ESP_LOGI(TAG, "%d bytes sent", sizeof(tx_data));
|
||||
|
||||
uint8_t rx_data[sizeof(tx_data) * 2] = {};
|
||||
uint8_t *rx_ptr = rx_data;
|
||||
int chunklen = 0;
|
||||
int rx_size = 0;
|
||||
while ((chunklen = xStreamBufferReceive(rmtuart.rx_buffer, rx_ptr, sizeof(rx_data) - rx_size, pdMS_TO_TICKS(rx_size < tx_size ? 5000 : 500))) > 0 && sizeof(rx_data) - rx_size > 0)
|
||||
{
|
||||
ESP_LOGI(TAG, "%d/%d bytes received (%02x)", chunklen, rx_size, rx_data[rx_size]);
|
||||
rx_size += chunklen;
|
||||
rx_ptr += chunklen;
|
||||
}
|
||||
ESP_LOGI(TAG, "Receive finished, got %d bytes", rx_size);
|
||||
|
||||
if (rx_size != tx_size)
|
||||
{
|
||||
ESP_LOGE(TAG, "Invalid receive size");
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < sizeof(tx_data); i++)
|
||||
{
|
||||
if (tx_data[i] != rx_data[i])
|
||||
{
|
||||
ESP_LOGW(TAG, "Byte %d difference: %02x vs %02x", i, tx_data[i], rx_data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "Done");
|
||||
}
|
||||
|
||||
// unicode_test();
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(5000));
|
||||
}
|
||||
}
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
ESP_LOGI(TAG, "starting up");
|
||||
|
||||
// rmtuart_echo_test();
|
||||
// return;
|
||||
|
||||
rmtuart_start(&rmtuart);
|
||||
|
||||
network.rx_buffer = rmtuart.rx_buffer;
|
||||
|
|
|
@ -101,59 +101,43 @@ static void tcp_server_task(network_ctx_t *ctx)
|
|||
size_t rx_data_len = xStreamBufferReceive(ctx->rx_buffer, &rx_data, sizeof(rx_data), pdMS_TO_TICKS(100));
|
||||
for (int i = 0; i < rx_data_len; i++)
|
||||
{
|
||||
ESP_LOGI(TAG, "TTY->TCP: %02x", rx_data[i]);
|
||||
ESP_LOGI(TAG, "TTY >> %02x", rx_data[i]);
|
||||
}
|
||||
|
||||
uint8_t rx_unicode_data[64] = {1};
|
||||
size_t rx_unicode_data_len = baudot_to_unicode(&unicode_ctx, rx_data, rx_data_len, rx_unicode_data, sizeof(rx_unicode_data));
|
||||
/*
|
||||
for (int i = 0; i < rx_data_len; i++)
|
||||
{
|
||||
ESP_LOGI(TAG, "raw[%d] = %02x", i, rx_data[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < rx_unicode_data_len; i++)
|
||||
{
|
||||
ESP_LOGI(TAG, "unicode[%d] = %02x", i, rx_unicode_data[i]);
|
||||
}
|
||||
*/
|
||||
|
||||
struct timeval tv = {0, 10000};
|
||||
int activity = select(max_sd + 1, &readfds, NULL, NULL, &tv);
|
||||
|
||||
// ESP_LOGI(TAG, "select() = %d; rx_data_len = %d", activity, rx_data_len);
|
||||
if ((activity < 0) && (errno != EINTR))
|
||||
{
|
||||
ESP_LOGE(TAG, "select error");
|
||||
}
|
||||
|
||||
// else its some IO operation on some other socket
|
||||
for (int i = 0; i < MAX_CLIENTS; i++)
|
||||
{
|
||||
int sd = client_sockets[i];
|
||||
|
||||
if (client_sockets[i] > 0 && FD_ISSET(sd, &readfds))
|
||||
{
|
||||
// Check if it was for closing , and also read the
|
||||
// incoming message
|
||||
int read_buffer_len;
|
||||
uint8_t read_buffer[32];
|
||||
if ((read_buffer_len = read(sd, read_buffer, sizeof(read_buffer))) == 0)
|
||||
{
|
||||
ESP_LOGI(TAG, "Client disconnected");
|
||||
ESP_LOGI(TAG, "Client #%d disconnected", i);
|
||||
close(sd);
|
||||
client_sockets[i] = 0;
|
||||
}
|
||||
else if (read_buffer_len > 0)
|
||||
{
|
||||
ESP_LOGI(TAG, "Sending %d bytes to TTY", read_buffer_len);
|
||||
ESP_LOGI(TAG, "Sending %d bytes from client #%d to TTY", read_buffer_len, i);
|
||||
uint8_t tx_baudot_data[100] = {0};
|
||||
size_t tx_baudot_data_len = unicode_to_baudot(&unicode_ctx, read_buffer, read_buffer_len, tx_baudot_data, sizeof(tx_baudot_data));
|
||||
if (tx_baudot_data_len > 0)
|
||||
{
|
||||
for (int i = 0; i < tx_baudot_data_len; i++)
|
||||
for (int n = 0; n < tx_baudot_data_len; n++)
|
||||
{
|
||||
ESP_LOGI(TAG, "TCP->TTY: %02x", tx_baudot_data[i]);
|
||||
ESP_LOGI(TAG, "TTY << %02x", tx_baudot_data[n]);
|
||||
}
|
||||
|
||||
xStreamBufferSend(ctx->tx_buffer, &tx_baudot_data, tx_baudot_data_len, pdMS_TO_TICKS(60000));
|
||||
|
@ -163,16 +147,15 @@ static void tcp_server_task(network_ctx_t *ctx)
|
|||
|
||||
if (client_sockets[i] && rx_unicode_data_len > 0)
|
||||
{
|
||||
ESP_LOGI(TAG, "Sending %d bytes to TCP/%d: %s", rx_unicode_data_len, client_sockets[i], rx_unicode_data);
|
||||
ESP_LOGI(TAG, "Sending %d bytes to client #%d: %s", rx_unicode_data_len, i, rx_unicode_data);
|
||||
send(client_sockets[i], &rx_unicode_data, rx_unicode_data_len, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// If something happened on the master socket ,
|
||||
// then its an incoming connection
|
||||
// Handle incoming connections
|
||||
if (FD_ISSET(listen_sock, &readfds))
|
||||
{
|
||||
struct sockaddr_storage source_addr; // Large enough for both IPv4 or IPv6
|
||||
struct sockaddr_storage source_addr;
|
||||
socklen_t addr_len = sizeof(source_addr);
|
||||
int sock = accept(listen_sock, (struct sockaddr *)&source_addr, &addr_len);
|
||||
if (sock < 0)
|
||||
|
@ -202,26 +185,21 @@ static void tcp_server_task(network_ctx_t *ctx)
|
|||
// add new socket to array of sockets
|
||||
for (int i = 0; i < MAX_CLIENTS; i++)
|
||||
{
|
||||
// if position is empty
|
||||
if (client_sockets[i] == 0)
|
||||
{
|
||||
client_sockets[i] = sock;
|
||||
connected = true;
|
||||
|
||||
ESP_LOGI(TAG, "Adding to list of sockets as %d", i);
|
||||
ESP_LOGI(TAG, "Connection accepted from %s (client #%d)", addr_str, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!connected)
|
||||
{
|
||||
ESP_LOGW(TAG, "max clients exceeded");
|
||||
ESP_LOGW(TAG, "Max clients exceeded, dropping connection from %s", addr_str);
|
||||
close(sock);
|
||||
}
|
||||
else
|
||||
{
|
||||
ESP_LOGI(TAG, "Socket accepted ip address: %s", addr_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
111
src/test.c
Normal file
111
src/test.c
Normal file
|
@ -0,0 +1,111 @@
|
|||
#include "softuart.h"
|
||||
#include "baudot.h"
|
||||
#include "rmtuart.h"
|
||||
|
||||
static const char *TAG = "test";
|
||||
|
||||
const uint32_t TTY_TX_GPIO = 22;
|
||||
const uint32_t TTY_RX_GPIO = 23;
|
||||
|
||||
rmtuart_ctx_t rmtuart = {
|
||||
.tx_gpio = TTY_TX_GPIO,
|
||||
.rx_gpio = TTY_RX_GPIO,
|
||||
.rx_mode = RX_MODE_GPIO,
|
||||
.baudrate = 50,
|
||||
.data_bits = 5,
|
||||
.stop_bits = 1,
|
||||
};
|
||||
|
||||
void softuart_test()
|
||||
{
|
||||
softuart_ctx_t softuart = {
|
||||
.tx_gpio = TTY_TX_GPIO,
|
||||
.rx_gpio = TTY_RX_GPIO,
|
||||
};
|
||||
|
||||
softuart_start(&softuart);
|
||||
|
||||
while (1)
|
||||
{
|
||||
ESP_LOGI(TAG, "sending...");
|
||||
uint8_t data[] = {1, 1, 1, 2, 3, 4, 0b10101 /* 21 */, 0b01010 /* 10 */};
|
||||
xStreamBufferSend(softuart.tx_buffer, &data, sizeof(data), pdMS_TO_TICKS(1000));
|
||||
for (int t = 0; t < 20; t++)
|
||||
{
|
||||
uint8_t rx_data[32] = {0};
|
||||
size_t rx_data_len = xStreamBufferReceive(softuart.rx_buffer, &rx_data, sizeof(rx_data), pdMS_TO_TICKS(100));
|
||||
if (rx_data_len > 0)
|
||||
{
|
||||
// ESP_LOGI(TAG, "%d bytes received:", rx_data_len);
|
||||
for (size_t i = 0; i < rx_data_len; i++)
|
||||
{
|
||||
ESP_LOGI(TAG, "data[%d] = %02x (%d)", i, rx_data[i], rx_data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include <string.h>
|
||||
void unicode_test()
|
||||
{
|
||||
baudot_context_t ctx = {0, 0, 0};
|
||||
uint8_t baudot[] = {0x03 /* a */, 0x19 /* b */, 0x0e /* c */, 0x1b /* fig */, 0x1a /* ę */, 0x0d /* ą */, 0x14 /* ł */, 0x1f /* letters */};
|
||||
uint8_t unicode[64] = {};
|
||||
uint8_t baudot2[64] = {};
|
||||
char *unicode2 = "zażółć gęślą jaźń ZAŻÓŁĆ GĘŚLĄ JAŹŃ";
|
||||
ESP_LOGI(TAG, "Converting baudot...");
|
||||
int baudot_len = unicode_to_baudot(&ctx, (uint8_t *)unicode2, strlen(unicode2), baudot2, sizeof(baudot2));
|
||||
ESP_LOGI(TAG, "Got baudot: %d", (int)baudot_len);
|
||||
}
|
||||
|
||||
void rmtuart_echo_test()
|
||||
{
|
||||
rmtuart_start(&rmtuart);
|
||||
while (true)
|
||||
{
|
||||
for (int i = 0; i < 1; i++)
|
||||
{
|
||||
xStreamBufferReset(rmtuart.tx_buffer);
|
||||
xStreamBufferReset(rmtuart.rx_buffer);
|
||||
|
||||
uint8_t tx_data[] = {1, 2, 3, 4, 5, 0b10000, 0b10001, 0b10101, 0b11111};
|
||||
int tx_size = sizeof(tx_data);
|
||||
xStreamBufferSend(rmtuart.tx_buffer, &tx_data, tx_size, pdMS_TO_TICKS(1000));
|
||||
ESP_LOGI(TAG, "%d bytes sent", sizeof(tx_data));
|
||||
|
||||
uint8_t rx_data[sizeof(tx_data) * 2] = {};
|
||||
uint8_t *rx_ptr = rx_data;
|
||||
int chunklen = 0;
|
||||
int rx_size = 0;
|
||||
while ((chunklen = xStreamBufferReceive(rmtuart.rx_buffer, rx_ptr, sizeof(rx_data) - rx_size, pdMS_TO_TICKS(rx_size < tx_size ? 5000 : 500))) > 0 && sizeof(rx_data) - rx_size > 0)
|
||||
{
|
||||
ESP_LOGI(TAG, "%d/%d bytes received (%02x)", chunklen, rx_size, rx_data[rx_size]);
|
||||
rx_size += chunklen;
|
||||
rx_ptr += chunklen;
|
||||
}
|
||||
ESP_LOGI(TAG, "Receive finished, got %d bytes", rx_size);
|
||||
|
||||
if (rx_size != tx_size)
|
||||
{
|
||||
ESP_LOGE(TAG, "Invalid receive size");
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < sizeof(tx_data); i++)
|
||||
{
|
||||
if (tx_data[i] != rx_data[i])
|
||||
{
|
||||
ESP_LOGW(TAG, "Byte %d difference: %02x vs %02x", i, tx_data[i], rx_data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "Done");
|
||||
}
|
||||
|
||||
// unicode_test();
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(5000));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue