TCP working with simple test host patch (only one ESP)

This commit is contained in:
msp 2022-09-24 17:28:28 -04:00
parent 6674f89420
commit 1c0d4c305b
3 changed files with 37 additions and 25 deletions

View file

@ -20,6 +20,15 @@ file:///home/msp/Downloads/WBT101-06A-ClassicBluetooth-Basic-1.pdf
https://people.csail.mit.edu/albert/bluez-intro/c404.html https://people.csail.mit.edu/albert/bluez-intro/c404.html
DOLIST DOLIST
move to TCP? adapt commector extern to act as TCP server
list of MAC addrs (same as for BT?) starting server after ESP fails (can't connect - restart?)
alive message to send count starting w/0
server patch (on host) uploads patch when "alive 0" arrives
message to Pd to restart
restart when recvfrom fails
later:
fold in the network Pd objects?
adapt to non-lyraT boards

View file

@ -15,34 +15,36 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
static const char *TAG = "net"; static const char *TAG = "ESPD";
int tcp_socket;
void udpreceivertask(void *z) void udpreceivertask(void *z)
{ {
char rx_buffer[4000]; char rx_buffer[4000];
int ip_protocol = 0; int ip_protocol = 0, err;
struct sockaddr_in dest_addr; struct sockaddr_in dest_addr;
dest_addr.sin_addr.s_addr = htonl(INADDR_ANY); ESP_LOGI(TAG, "udpreceivertask starting...");
ESP_LOGE(TAG, "(ignore this - testing error printout)");
dest_addr.sin_addr.s_addr = inet_addr(CONFIG_ESP_WIFI_SENDADDR);
dest_addr.sin_family = AF_INET; dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(CONFIG_ESP_WIFI_LISTENPORT); dest_addr.sin_port = htons(CONFIG_ESP_WIFI_SENDPORT);
ip_protocol = IPPROTO_IP;
int rcv_sock = socket(AF_INET, SOCK_DGRAM, ip_protocol); tcp_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if (rcv_sock < 0) { if (tcp_socket < 0) {
ESP_LOGE(TAG, "Unable to create socket: errno %d", errno); ESP_LOGE(TAG, "Unable to create socket: errno %d", errno);
return; return;
} }
int err = bind(rcv_sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); ESP_LOGI(TAG, "connecting...");
if (err < 0) { while (err = connect(tcp_socket, &dest_addr, sizeof(dest_addr)) < 0)
{
ESP_LOGE(TAG, "Socket unable to bind: errno %d", errno); ESP_LOGE(TAG, "Socket unable to bind: errno %d", errno);
vTaskDelay(2000 / portTICK_PERIOD_MS);
} }
ESP_LOGI(TAG, "Waiting for data");
while (1) while (1)
{ {
int len = recv(rcv_sock, rx_buffer, sizeof(rx_buffer) - 1, 0); int len = recv(tcp_socket, rx_buffer, sizeof(rx_buffer) - 1, 0);
if (len < 0) { if (len < 0) {
ESP_LOGE(TAG, "recvfrom failed: errno %d", errno); ESP_LOGE(TAG, "recvfrom failed: errno %d", errno);
@ -63,18 +65,19 @@ void udpreceivertask(void *z)
} }
} }
static int xyz_sock; static int udp_out_sock;
static struct sockaddr_in xyz_dest_addr; static struct sockaddr_in udp_out_addr;
void net_init( void) void net_init( void)
{ {
/* socket to send over -- could use same one? */ ESP_LOGI(TAG, "net_init...");
xyz_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); /* socket for sending UDP messages */
udp_out_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
xyz_dest_addr.sin_addr.s_addr = inet_addr(CONFIG_ESP_WIFI_SENDADDR); udp_out_addr.sin_addr.s_addr = inet_addr(CONFIG_ESP_WIFI_SENDADDR);
xyz_dest_addr.sin_family = AF_INET; udp_out_addr.sin_family = AF_INET;
/* this will get overridden later: */ /* this will get overridden later: */
xyz_dest_addr.sin_port = htons(CONFIG_ESP_WIFI_SENDPORT); udp_out_addr.sin_port = htons(CONFIG_ESP_WIFI_SENDPORT);
xTaskCreate(udpreceivertask, "udprcv", 6000, NULL, PRIORITY_WIFI, NULL); xTaskCreate(udpreceivertask, "udprcv", 6000, NULL, PRIORITY_WIFI, NULL);
} }
@ -84,9 +87,9 @@ static int64_t whensent;
void net_sendudp(void *msg, int len, int port) void net_sendudp(void *msg, int len, int port)
{ {
int err; int err;
xyz_dest_addr.sin_port = htons(port); udp_out_addr.sin_port = htons(port);
err = sendto(xyz_sock, msg, len, 0, err = sendto(udp_out_sock, msg, len, 0,
(struct sockaddr *)&xyz_dest_addr, sizeof(xyz_dest_addr)); (struct sockaddr *)&udp_out_addr, sizeof(udp_out_addr));
if (err < 0) { if (err < 0) {
static int errorcount; static int errorcount;
errorcount++; errorcount++;

View file

@ -32,7 +32,7 @@ static EventGroupHandle_t s_wifi_event_group;
#define WIFI_CONNECTED_BIT BIT0 #define WIFI_CONNECTED_BIT BIT0
#define WIFI_FAIL_BIT BIT1 #define WIFI_FAIL_BIT BIT1
static const char *TAG = "wifi station"; static const char *TAG = "ESPD";
static int s_retry_num = 0; static int s_retry_num = 0;
char wifi_mac[80]; char wifi_mac[80];