diff --git a/boards/esp32s3_devkitc.conf b/boards/esp32s3_devkitc.conf new file mode 100644 index 0000000..cebb195 --- /dev/null +++ b/boards/esp32s3_devkitc.conf @@ -0,0 +1 @@ +CONFIG_HEAP_MEM_POOL_SIZE=65536 diff --git a/boards/esp32s3_devkitc.overlay b/boards/esp32s3_devkitc.overlay new file mode 100644 index 0000000..ea9865c --- /dev/null +++ b/boards/esp32s3_devkitc.overlay @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&wifi { + status = "okay"; +}; diff --git a/src/http_get.c b/src/http_get.c index cfbf777..89cfce3 100644 --- a/src/http_get.c +++ b/src/http_get.c @@ -54,75 +54,32 @@ void print_addrinfo_results(struct zsock_addrinfo **results) } } -int connect_socket(struct zsock_addrinfo **results, uint16_t port) +int connect_socket(struct zsock_addrinfo **results) { int sock; - int ret; struct zsock_addrinfo *rp; - struct sockaddr_in6 *sa6; - - // Create IPv6 Socket - sock = zsock_socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); - if (sock < 0) { - printk("Error creating IPv6 socket\n"); - return(-1); - } - - // Iterate through IPv6 addresses until we get a successful connection - for (rp = *results; rp != NULL; rp = rp->ai_next) { - if (rp->ai_addr->sa_family == AF_INET6) { - // IPv6 Address - sa6 = (struct sockaddr_in6 *) rp->ai_addr; - sa6->sin6_port = htons(port); - - char ipv6[INET6_ADDRSTRLEN]; - zsock_inet_ntop(AF_INET6, &sa6->sin6_addr, ipv6, INET6_ADDRSTRLEN); - printk("Connecting to %s:%d ", ipv6, port); - - ret = zsock_connect(sock, (struct sockaddr *) sa6, sizeof(struct sockaddr_in)); - if (ret == 0) { - printk("Success\r\n"); - return(sock); - } else { - printk("Failure (%d)\r\n", ret); - } - } - } - // Close IPv6 Socket - zsock_close(sock); - - // Now try IPv4 Addresses struct sockaddr_in *sa; - // Create IPv4 Socket + // Create Socket sock = zsock_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) { - printk("Error creating IPv4 socket\n"); + printk("Error creating socket\n"); return(-1); } - // Iterate through IPv4 addresses until we get a successful connection + // Iterate through until we get a successful connection for (rp = *results; rp != NULL; rp = rp->ai_next) { if (rp->ai_addr->sa_family == AF_INET) { // IPv4 Address sa = (struct sockaddr_in *) rp->ai_addr; - sa->sin_port = htons(port); - - char ipv4[INET_ADDRSTRLEN]; - zsock_inet_ntop(AF_INET, &sa->sin_addr, ipv4, INET_ADDRSTRLEN); - printk("Connecting to %s:%d ", ipv4, port); - - ret = zsock_connect(sock, (struct sockaddr *) sa, sizeof(struct sockaddr_in)); - if (ret == 0) { - printk("Success\r\n"); - return(sock); - } else { - printk("Failure (%d)\r\n", ret); - } + sa->sin_port = htons(80); + zsock_connect(sock, (struct sockaddr *) sa, sizeof(struct sockaddr_in)); + if (sock > 0) + break; } } - return(0); + return(sock); } static void http_response_cb(struct http_response *rsp, @@ -130,15 +87,15 @@ static void http_response_cb(struct http_response *rsp, void *user_data) { if (final_data == HTTP_DATA_MORE) { - //printk("Partial data received (%zd bytes)\n", rsp->data_len); + printk("Partial data received (%zd bytes)\n", rsp->data_len); } else if (final_data == HTTP_DATA_FINAL) { - //printk("All the data received (%zd bytes)\n", rsp->data_len); + printk("All the data received (%zd bytes)\n", rsp->data_len); } - //printk("Bytes Recv %zd\n", rsp->data_len); - //printk("Response status %s\n", rsp->http_status); - //printk("Recv Buffer Length %zd\n", rsp->recv_buf_len); - printk("%.*s", rsp->data_len, rsp->recv_buf); + printk("Bytes Recv %zd\n", rsp->data_len); + printk("Response status %s\n", rsp->http_status); + printk("Recv Buffer Length %zd\n", rsp->recv_buf_len); + printk("%s\n",rsp->recv_buf); } void http_get(int sock, char * hostname, char * url) diff --git a/src/http_get.h b/src/http_get.h index c01a05b..2ee69b8 100644 --- a/src/http_get.h +++ b/src/http_get.h @@ -6,4 +6,5 @@ void nslookup(const char * hostname, struct zsock_addrinfo **results); void print_addrinfo_results(struct zsock_addrinfo **results); void http_get(int sock, char * hostname, char * url); -int connect_socket(struct zsock_addrinfo **results, uint16_t port); \ No newline at end of file +int connect_socket(struct zsock_addrinfo **results); + diff --git a/src/wifi.c b/src/wifi.c index cfb1171..d116d24 100644 --- a/src/wifi.c +++ b/src/wifi.c @@ -12,7 +12,6 @@ #include #include #include "http_get.h" -#include "ping.h" #define SSID "test_ap" #define PSK "secretsquirrel" @@ -61,17 +60,17 @@ static void handle_ipv4_result(struct net_if *iface) char buf[NET_IPV4_ADDR_LEN]; - if (iface->config.ip.ipv4->unicast[i].addr_type != NET_ADDR_DHCP) { + if (iface->config.ip.ipv4->unicast[i].ipv4.addr_type != NET_ADDR_DHCP) { continue; } printk("IPv4 address: %s\n", net_addr_ntop(AF_INET, - &iface->config.ip.ipv4->unicast[i].address.in_addr, + &iface->config.ip.ipv4->unicast[i].ipv4.address.in_addr, buf, sizeof(buf))); printk("Subnet: %s\n", net_addr_ntop(AF_INET, - &iface->config.ip.ipv4->netmask, + &iface->config.ip.ipv4->unicast[i].netmask, buf, sizeof(buf))); printk("Router: %s\n", net_addr_ntop(AF_INET, @@ -178,18 +177,15 @@ int main(void) wifi_status(); k_sem_take(&ipv4_address_obtained, K_FOREVER); printk("Ready...\n\n"); - - // Ping Google DNS 4 times - ping("8.8.8.8", 4); - - printk("\nLooking up IP addresses:\n"); + + printk("Looking up IP addresses:\n"); struct zsock_addrinfo *res; nslookup("iot.beyondlogic.org", &res); print_addrinfo_results(&res); - printk("\nConnecting to HTTP Server:\n"); - sock = connect_socket(&res, 80); - http_get(sock, "iot.beyondlogic.org", "/LoremIpsum.txt"); + printk("Connecting to HTTP Server:\n"); + sock = connect_socket(&res); + http_get(sock, "iot.beyondlogic.org", "/test.txt"); zsock_close(sock); // Stay connected for 30 seconds, then disconnect.