#include "osc_control.h" #include #include #include #include #include "display.h" #include #include "ledstrip.h" #include "squeeze.h" static const char *TAG = "osc_control"; #define FLAMESPEWER_IP "192.168.1.25" static esp_osc_client_t client; // static void sender() // { // // select targets // esp_osc_target_t targets[2] = { // esp_osc_target("127.0.0.1", 9000), // }; // 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; } #define FLAMESPEWER_IP "192.168.1.204" static void osc_process() { for (;;) { // receive messages esp_osc_receive(&client, callback); // vTaskDelay(pdMS_TO_TICKS(100)); vTaskDelay(pdMS_TO_TICKS(100)); } } //#define pdTICKSTOMS( xTicks ) ( ( ( TickTypet ) ( xTicks ) * 1000u ) / configTICKRATE_HZ ) static void osc_send() { ESP_LOGI(TAG, "begin task osc_send"); // // Really need this to wait for wifi connect esp_osc_target_t target = esp_osc_target("192.168.1.25", 5005); vTaskDelay(pdMS_TO_TICKS(2000)); uint32_t last_tx = 0; uint32_t last_discover = 0; for (;;) { if(squeeze_triggered()) { ESP_LOGI(TAG, "trig that squeeze"); esp_osc_send(&client, &target, "/squeeze_trig", "i", 1); } if(xTaskGetTickCount()*portTICK_PERIOD_MS - last_tx > 150) { last_tx = xTaskGetTickCount() * portTICK_PERIOD_MS; esp_osc_send(&client, &target, "/squeeze_value", "f", squeeze_value()); } if(xTaskGetTickCount()*portTICK_PERIOD_MS - last_discover > 1000) { last_discover = xTaskGetTickCount() * portTICK_PERIOD_MS; esp_osc_send(&client, &target, "/discover", "s", "ledstrip"); } vTaskDelay(pdMS_TO_TICKS(10)); } } void osc_init() { esp_osc_init(&client, 1024, 5000); xTaskCreatePinnedToCore(osc_process, "osc_process", 1024*8, NULL, 10, NULL, 1); xTaskCreatePinnedToCore(osc_send, "osc_send", 1024*4, NULL, 10, NULL, 1); }