Files
@ 33512a8a338c
Branch filter:
Location: protofusion-esp32-template/components/esp-osc/test/main/main.c - annotation
33512a8a338c
3.5 KiB
text/plain
Add OSC library, works!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c 33512a8a338c | #include <stdlib.h>
#include <esp_event.h>
#include <esp_log.h>
#include <esp_wifi.h>
#include <nvs_flash.h>
#include <esp_osc.h>
#define WIFI_SSID ""
#define WIFI_PASS ""
#define OSC_ADDRESS ""
#define OSC_PORT 0
#define TAG "main"
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);
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':
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;
}
}
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);
}
}
static void handler(void *arg, esp_event_base_t base, int32_t id, void *data) {
if (base == WIFI_EVENT) {
switch (id) {
case WIFI_EVENT_STA_START:
// connect to ap
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_wifi_connect());
break;
case IP_EVENT_STA_GOT_IP:
break;
case WIFI_EVENT_STA_DISCONNECTED:
// reconnect Wi-Fi
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_wifi_connect());
break;
default:
break;
}
}
}
void app_main() {
// initialize NVS flash
ESP_ERROR_CHECK(nvs_flash_init());
// initialize networking
ESP_ERROR_CHECK(esp_netif_init());
// create default event loop
ESP_ERROR_CHECK(esp_event_loop_create_default());
// enable Wi-Fi
esp_netif_create_default_wifi_sta();
// initialize Wi-Fi
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
// set Wi-Fi storage to ram
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
// set wifi mode
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
// register event handlers
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &handler, NULL, NULL));
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &handler, NULL, NULL));
// prepare Wi-Fi config
wifi_config_t wifi_config = {.sta = {.ssid = WIFI_SSID, .password = WIFI_PASS}};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
// start Wi-Fi
ESP_ERROR_CHECK(esp_wifi_start());
// prepare client
esp_osc_init(&client, 1024, 9000);
// 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);
}
|