#include "osc_control.h" #include #include #include #include #include "display.h" #include #include "ledstrip.h" #define WIFI_SSID "" #define WIFI_PASS "" #define OSC_ADDRESS "" #define OSC_PORT 0 static const char *TAG = "osc_control"; esp_osc_client_t client; static void sender() { // select targets esp_osc_target_t targets[2] = { esp_osc_target("127.0.0.1", 9000), esp_osc_target(OSC_ADDRESS, OSC_PORT), }; for(;;) { // delay vTaskDelay(1000 / portTICK_PERIOD_MS); // send messages for (size_t i = 0; i < 2; i++) { esp_osc_send(&client, &targets[i], "test", "ihfdsb", 42, (int64_t)84, 3.14f, 6.28, "foo", 3, "bar"); } } } static uint8_t r_man = 0; static uint8_t g_man = 0; static uint8_t b_man = 0; static bool callback(const char *topic, const char *format, esp_osc_value_t *values) { // log message ESP_LOGI(TAG, "got message: %s (%s)", topic, format); char out[512] = {0}; snprintf(out, 128, "topic: %s\nformat: %s\n", topic, format); for (size_t i = 0; i < strlen(format); i++) { switch (format[i]) { case 'i': { snprintf(out+strlen(out), 128-strlen(out), "Value: %ld", values[i].i); ESP_LOGI(TAG, "==> i: %ld", values[i].i); if(strcmp(topic, "/led_effect") == 0) { ledstrip_set_effect(values[i].i); } } break; case 'h': { ESP_LOGI(TAG, "==> h: %lld", values[i].h); } break; case 'f': { if(values[i].f > 1.0) values[i].f = 1.0; if(values[i].f < 0.0) values[i].f = 0.0; snprintf(out+strlen(out), 128-strlen(out), "Value: %f", values[i].f); ESP_LOGI(TAG, "==> f: %f", values[i].f); if(strcmp(topic, "/led_modifier") == 0) { ledstrip_set_modifier(values[i].f); } else if(strcmp(topic, "/led_manual_r") == 0) { r_man = values[i].f * 255.0; ledstrip_set(g_man, r_man, b_man); } else if(strcmp(topic, "/led_manual_g") == 0) { g_man = values[i].f * 255.0; ledstrip_set(g_man, r_man, b_man); } else if(strcmp(topic, "/led_manual_b") == 0) { b_man = values[i].f * 255.0; ledstrip_set(g_man, r_man, b_man); } } break; case 'd': { ESP_LOGI(TAG, "==> d: %f", values[i].d); } break; case 's': { ESP_LOGI(TAG, "==> s: %s", values[i].s); } break; case 'b': { ESP_LOGI(TAG, "==> b: %.*s (%d)", values[i].bl, values[i].b, values[i].bl); break; } } } display_update_text(out); return true; } static void receiver() { for (;;) { // receive messages esp_osc_receive(&client, callback); } } static void restarter() { for (;;) { // delay vTaskDelay(5000 / portTICK_PERIOD_MS); // restart client esp_osc_init(&client, 1024, 9000); } } void osc_init() { // prepare client esp_osc_init(&client, 1024, 5005); // create tasks //xTaskCreatePinnedToCore(sender, "sender", 4096, NULL, 10, NULL, 1); xTaskCreatePinnedToCore(receiver, "receiver", 4096, NULL, 10, NULL, 1); //xTaskCreatePinnedToCore(restarter, "restarter", 4096, NULL, 10, NULL, 1); }