diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2021-11-30 23:50:53 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2021-11-30 23:50:53 -0700 |
commit | d89195e2144df51ca02a860f4b46fd38b4dfeb29 (patch) | |
tree | bf94208b2538c8039729f7b30a7dd5504ebf7fb2 | |
parent | 6df4a4ed74621ce5df26791b84b9157902aeaa83 (diff) | |
download | esp32-ws2812b-d89195e2144df51ca02a860f4b46fd38b4dfeb29.tar.gz esp32-ws2812b-d89195e2144df51ca02a860f4b46fd38b4dfeb29.tar.bz2 esp32-ws2812b-d89195e2144df51ca02a860f4b46fd38b4dfeb29.zip |
Reorganize tasks into their own files.
-rw-r--r-- | include/tcp_server.h | 11 | ||||
-rw-r--r-- | include/ws2812b_writer.h | 16 | ||||
-rw-r--r-- | main/CMakeLists.txt | 2 | ||||
-rw-r--r-- | main/main.c | 96 | ||||
-rw-r--r-- | main/tcp_server.c | 43 | ||||
-rw-r--r-- | main/ws2812b_writer.c | 54 |
6 files changed, 131 insertions, 91 deletions
diff --git a/include/tcp_server.h b/include/tcp_server.h new file mode 100644 index 0000000..8eeea22 --- /dev/null +++ b/include/tcp_server.h @@ -0,0 +1,11 @@ +#pragma once +#ifndef TCP_SERVER_H_ +#define TCP_SERVER_H_ + +#include "ws2812b_writer.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + +portTASK_FUNCTION_PROTO(tcp_server, params); + +#endif /* TCP_SERVER_H_ */ diff --git a/include/ws2812b_writer.h b/include/ws2812b_writer.h new file mode 100644 index 0000000..0679059 --- /dev/null +++ b/include/ws2812b_writer.h @@ -0,0 +1,16 @@ +#pragma once +#ifndef WS2812B_WRITER_H_ +#define WS2812B_WRITER_H_ + +#include "drv/ws2812b.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + +typedef struct { + char color[32]; + ws2812b_t* drv; +} ws_params_t; + +portTASK_FUNCTION_PROTO(ws2812b_write_task, params); + +#endif /* WS2812B_WRITER_H_ */ diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index b0bed9e..60434ca 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,2 +1,2 @@ -idf_component_register(SRCS "main.c" "station.c" +idf_component_register(SRCS "main.c" "station.c" "ws2812b_writer.c" "tcp_server.c" INCLUDE_DIRS "../include") diff --git a/main/main.c b/main/main.c index 4caa26a..691043d 100644 --- a/main/main.c +++ b/main/main.c @@ -4,9 +4,10 @@ #include "esp_system.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "lwip/sockets.h" #include "sdkconfig.h" -#include "station.h" + +#include "ws2812b_writer.h" +#include "tcp_server.h" #ifdef CONFIG_IDF_TARGET_ESP32 #define LCD_HOST HSPI_HOST @@ -43,92 +44,7 @@ #define PIN_NUM_BCKL 5 #endif -struct { - char color[32]; - ws2812b_t* drv; -} ws_params; - -#define SIZE 300 -void calculate_colors(ws2812b_buffer_t* buffer) -{ - /* RACE Conditions for sure. Need to fix that. */ - ws2812b_rgb_t color = {0}; - if (!strcmp(ws_params.color, "black\n")) { - } else if (!strcmp(ws_params.color, "green\n")) { - color.g = 255; - } else if (!strcmp(ws_params.color, "red\n")) { - color.r = 255; - } else if (!strcmp(ws_params.color, "blue\n")) { - color.b = 255; - } else if (!strcmp(ws_params.color, "yellow\n")) { - color.r = 255; - color.g = 255; - } else if (!strcmp(ws_params.color, "magenta\n")) { - color.r = 255; - color.b = 255; - } else if (!strcmp(ws_params.color, "teal\n")) { - color.g = 255; - color.b = 255; - } else { - color.r = 128; - color.g = 128; - color.b = 128; - } - - int i; - for (i = 0; i < SIZE; ++i) { - ws2812b_buffer_set_color(buffer, i, &color); - } -} - -portTASK_FUNCTION(ws2812b_write_task, params) -{ - strcpy(ws_params.color, "red\n"); - - ws2812b_buffer_t* buffer = ws2812b_new_buffer(SIZE); - for (;;) { - calculate_colors(buffer); - ws2812b_write(ws_params.drv, buffer); - vTaskDelay(10 / portTICK_PERIOD_MS); - } -} - -portTASK_FUNCTION(tcp_server, params) -{ - wifi_init_station("Wort", "JoshIsBau5"); - - int s = socket(AF_INET, SOCK_STREAM, 0); - struct sockaddr_in addr; - memset(&addr, 0, sizeof(addr)); - addr.sin_port = htons(1234); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; - int err = bind(s, (struct sockaddr*)&addr, sizeof(addr)); - if (err) { - printf("Error binding to sockaddr: %d\n", err); - return; - } - - printf("Listening ...\n"); - listen(s, 1); - - while (true) { - printf("Waiting for connection... \n"); - - struct sockaddr_in client_addr; - socklen_t size; - int sock = accept(s, (struct sockaddr*)&client_addr, &size); - - printf("Accepted connection\n"); - ssize_t len; - - while ((len = read(sock, ws_params.color, sizeof(ws_params.color) - 1)) > - 0) { - ws_params.color[len] = 0; - printf("Read %s\n", ws_params.color); - } - } -} +static ws_params_t ws_params; void app_main(void) { @@ -168,6 +84,6 @@ void app_main(void) printf("Configuration complete!!\n"); - xTaskCreate(ws2812b_write_task, "ws2812b_writer", 4096, NULL, 1, NULL); - xTaskCreate(tcp_server, "tcp_server", 4096, NULL, 2, NULL); + xTaskCreate(ws2812b_write_task, "ws2812b_writer", 4096, &ws_params, 1, NULL); + xTaskCreate(tcp_server, "tcp_server", 4096, &ws_params, 2, NULL); } diff --git a/main/tcp_server.c b/main/tcp_server.c new file mode 100644 index 0000000..1ff9b62 --- /dev/null +++ b/main/tcp_server.c @@ -0,0 +1,43 @@ +#include "tcp_server.h" + +#include "lwip/sockets.h" +#include "station.h" + +portTASK_FUNCTION(tcp_server, params) +{ + ws_params_t* ws_params = (ws_params_t*) params; + + wifi_init_station("Wort", "JoshIsBau5"); + + int s = socket(AF_INET, SOCK_STREAM, 0); + struct sockaddr_in addr; + memset(&addr, 0, sizeof(addr)); + addr.sin_port = htons(1234); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = INADDR_ANY; + int err = bind(s, (struct sockaddr*)&addr, sizeof(addr)); + if (err) { + printf("Error binding to sockaddr: %d\n", err); + return; + } + + printf("Listening ...\n"); + listen(s, 1); + + while (true) { + printf("Waiting for connection... \n"); + + struct sockaddr_in client_addr; + socklen_t size; + int sock = accept(s, (struct sockaddr*)&client_addr, &size); + + printf("Accepted connection\n"); + ssize_t len; + + while ((len = read(sock, ws_params->color, sizeof(ws_params->color) - 1)) > + 0) { + ws_params->color[len] = 0; + printf("Read %s\n", ws_params->color); + } + } +} diff --git a/main/ws2812b_writer.c b/main/ws2812b_writer.c new file mode 100644 index 0000000..fc3c777 --- /dev/null +++ b/main/ws2812b_writer.c @@ -0,0 +1,54 @@ +#include "ws2812b_writer.h" + +#include <stdlib.h> +#include <string.h> + +#define SIZE 300 + +void calculate_colors( + ws_params_t* ws_params, + ws2812b_buffer_t* buffer) +{ + /* RACE Conditions for sure. Need to fix that. */ + ws2812b_rgb_t color = {0}; + if (!strcmp(ws_params->color, "black\n")) { + } else if (!strcmp(ws_params->color, "green\n")) { + color.g = 255; + } else if (!strcmp(ws_params->color, "red\n")) { + color.r = 255; + } else if (!strcmp(ws_params->color, "blue\n")) { + color.b = 255; + } else if (!strcmp(ws_params->color, "yellow\n")) { + color.r = 255; + color.g = 255; + } else if (!strcmp(ws_params->color, "magenta\n")) { + color.r = 255; + color.b = 255; + } else if (!strcmp(ws_params->color, "teal\n")) { + color.g = 255; + color.b = 255; + } else { + color.r = 128; + color.g = 128; + color.b = 128; + } + + int i; + for (i = 0; i < SIZE; ++i) { + ws2812b_buffer_set_color(buffer, i, &color); + } +} + +portTASK_FUNCTION(ws2812b_write_task, params) +{ + ws_params_t* ws_params = (ws_params_t*) params; + + strcpy(ws_params->color, "red\n"); + + ws2812b_buffer_t* buffer = ws2812b_new_buffer(SIZE); + for (;;) { + calculate_colors(ws_params, buffer); + ws2812b_write(ws_params->drv, buffer); + vTaskDelay(10 / portTICK_PERIOD_MS); + } +} |