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);
}
/* this doesn't work as a printhook yet since posts are split into atoms */
void pdmain_print( const char *s)
{
char y[81];
@ -172,7 +173,7 @@ void pdmain_print( const char *s)
if (strlen(y) > 0)
pd_bt_writeback((unsigned char *)y, strlen(y));
#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_sendtcp(y, strlen(y));
#endif

View file

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

View file

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