aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2021-11-30 23:50:53 -0700
committerJosh Rahm <joshuarahm@gmail.com>2021-11-30 23:50:53 -0700
commitd89195e2144df51ca02a860f4b46fd38b4dfeb29 (patch)
treebf94208b2538c8039729f7b30a7dd5504ebf7fb2
parent6df4a4ed74621ce5df26791b84b9157902aeaa83 (diff)
downloadesp32-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.h11
-rw-r--r--include/ws2812b_writer.h16
-rw-r--r--main/CMakeLists.txt2
-rw-r--r--main/main.c96
-rw-r--r--main/tcp_server.c43
-rw-r--r--main/ws2812b_writer.c54
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);
+ }
+}