TCP working with simple test host patch (only one ESP)
This commit is contained in:
parent
6674f89420
commit
1c0d4c305b
3 changed files with 37 additions and 25 deletions
13
README.rst
13
README.rst
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
47
wifi/net.c
47
wifi/net.c
|
|
@ -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++;
|
||||||
|
|
|
||||||
|
|
@ -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];
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue