diff --git a/main/osc_control.c b/main/osc_control.c new file mode 100644 --- /dev/null +++ b/main/osc_control.c @@ -0,0 +1,100 @@ +#include "osc_control.h" +#include +#include +#include +#include +#include "display.h" +#include + +#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 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': + ESP_LOGI(TAG, "==> i: %ld", values[i].i); + break; + case 'h': + ESP_LOGI(TAG, "==> h: %lld", values[i].h); + break; + case 'f': + snprintf(out+strlen(out), 128-strlen(out), "Value: %f", values[i].f); + ESP_LOGI(TAG, "==> f: %f", values[i].f); + 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); +} \ No newline at end of file