Files @ 48d2337d76c2
Branch filter:

Location: protofusion-esp32-template/main/osc_control.c

Ethan Zonca
Functional OSC TX and RX
#include "osc_control.h"
#include <stdlib.h>
#include <esp_event.h>
#include <esp_log.h>
#include <esp_wifi.h>
#include "display.h"
#include <esp_osc.h>
#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;

  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());
    }

    vTaskDelay(pdMS_TO_TICKS(10));
  }
}

void osc_init() {
  esp_osc_init(&client, 1024, 5005);

  xTaskCreatePinnedToCore(osc_process, "osc_process", 1024*8, NULL, 10, NULL, 1);
  xTaskCreatePinnedToCore(osc_send, "osc_send", 1024*4, NULL, 10, NULL, 1);
}