UDPa dn TCP messaging both working, but message timing varies by >= 300 msec

This commit is contained in:
msp 2022-10-26 11:45:41 -04:00
parent 451a260cd0
commit da0a1784c8
3 changed files with 18 additions and 23 deletions

View file

@ -162,6 +162,7 @@ void pd_pollhost( void)
xSemaphoreGive(pd_bt_mutex); xSemaphoreGive(pd_bt_mutex);
} }
/* this doesn't work as a printhook yet since posts are split into atoms */
void pdmain_print( const char *s) void pdmain_print( const char *s)
{ {
char y[81]; char y[81];
@ -172,7 +173,7 @@ void pdmain_print( const char *s)
if (strlen(y) > 0) if (strlen(y) > 0)
pd_bt_writeback((unsigned char *)y, strlen(y)); pd_bt_writeback((unsigned char *)y, strlen(y));
#endif #endif
#if 0 /* this doesn't work all that well since posts are split into atoms */ #if 1
net_sendudp(y, strlen(y), CONFIG_ESP_WIFI_SENDPORT); net_sendudp(y, strlen(y), CONFIG_ESP_WIFI_SENDPORT);
net_sendtcp(y, strlen(y)); net_sendtcp(y, strlen(y));
#endif #endif

View file

@ -69,7 +69,7 @@ extern float soundin[], soundout[];
void canvas_start_dsp( void); void canvas_start_dsp( void);
void pdmain_init( void) void pdmain_init( void)
{ {
sys_printhook = pdmain_print; /* sys_printhook = pdmain_print; */
pd_init(); pd_init();
STUFF->st_dacsr = sys_getsr(); STUFF->st_dacsr = sys_getsr();
STUFF->st_soundout = soundout; STUFF->st_soundout = soundout;

View file

@ -73,49 +73,43 @@ void tcpreceivertask(void *z)
void udpreceivertask(void *z) void udpreceivertask(void *z)
{ {
char rx_buffer[1000]; char rx_buffer[1000];
int ip_protocol = 0, err, newsocket; int ip_protocol = 0, err, udpsocket;
struct sockaddr_in dest_addr; struct sockaddr_in dest_addr;
ESP_LOGI(TAG, "udpreceivertask starting..."); ESP_LOGI(TAG, "udpreceivertask starting...");
dest_addr.sin_addr.s_addr = inet_addr(CONFIG_ESP_WIFI_SENDADDR); dest_addr.sin_addr.s_addr = htonl(INADDR_ANY);
dest_addr.sin_family = AF_INET; dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(CONFIG_ESP_WIFI_SENDPORT); dest_addr.sin_port = htons(CONFIG_ESP_WIFI_LISTENPORT);
newsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); udpsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (newsocket < 0) { if (udpsocket < 0) {
ESP_LOGE(TAG, "Unable to create socket: errno %d", errno); ESP_LOGE(TAG, "Unable to create socket: errno %d", errno);
return; return;
} }
ESP_LOGI(TAG, "udp connecting..."); ESP_LOGI(TAG, "udp binding...");
while (err = connect(newsocket, &dest_addr, sizeof(dest_addr)) < 0) err = bind(udpsocket, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
{ if (err < 0) {
ESP_LOGE(TAG, "Socket unable to bind: errno %d - retrying", errno); ESP_LOGE(TAG, "Socket unable to bind: errno %d", errno);
close(newsocket);
vTaskDelay(2000 / portTICK_PERIOD_MS);
newsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (newsocket < 0) {
ESP_LOGE(TAG, "Unable to create socket: errno %d", errno);
return;
}
} }
ESP_LOGI(TAG, "udp bound. receiving ...");
while (1) while (1)
{ {
int len = recv(newsocket, rx_buffer, sizeof(rx_buffer) - 1, 0); int len = recv(udpsocket, rx_buffer, sizeof(rx_buffer) - 1, 0);
if (len < 0) { if (len < 0) {
ESP_LOGE(TAG, "recvfrom failed: errno %d -- restarting", errno); ESP_LOGE(TAG, "UDP recvfrom failed: errno %d -- restarting", errno);
esp_restart(); esp_restart();
} }
else if (len == 0) else if (len == 0)
{ {
ESP_LOGE(TAG, "unexpected EOF on socket"); ESP_LOGE(TAG, "UDP unexpected EOF on socket");
vTaskDelay(500 / portTICK_PERIOD_MS); vTaskDelay(500 / portTICK_PERIOD_MS);
} }
else else
{ {
rx_buffer[len] = 0; rx_buffer[len] = 0;
ESP_LOGI(TAG, "rcv: %s", rx_buffer); ESP_LOGI(TAG, "UDP rcv: %s", rx_buffer);
pd_fromhost(rx_buffer, strlen(rx_buffer)); pd_fromhost(rx_buffer, strlen(rx_buffer));
} }
} }
@ -140,7 +134,7 @@ void net_init( void)
xTaskCreate(udpreceivertask, "udprcv", 3000, NULL, PRIORITY_WIFI, NULL); xTaskCreate(udpreceivertask, "udprcv", 3000, NULL, PRIORITY_WIFI, NULL);
while (!tcp_socket) while (!tcp_socket)
{ {
ESP_LOGE(TAG, "sendtcp: waiting for socket"); ESP_LOGI(TAG, "sendtcp: waiting for socket");
vTaskDelay(1000 / portTICK_PERIOD_MS); vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
} }