aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends/osc.h
diff options
context:
space:
mode:
Diffstat (limited to 'backends/osc.h')
-rw-r--r--backends/osc.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/backends/osc.h b/backends/osc.h
new file mode 100644
index 0000000..5938f12
--- /dev/null
+++ b/backends/osc.h
@@ -0,0 +1,55 @@
+#include "midimonster.h"
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#define OSC_RECV_BUF 8192
+#define OSC_XMIT_BUF 8192
+
+int init();
+static int backend_configure(char* option, char* value);
+static int backend_configure_instance(instance* instance, char* option, char* value);
+static instance* backend_instance();
+static channel* backend_channel(instance* instance, char* spec);
+static int backend_set(instance* inst, size_t num, channel** c, channel_value* v);
+static int backend_handle(size_t num, managed_fd* fds);
+static int backend_start();
+static int backend_shutdown();
+
+typedef enum {
+ not_set = 0,
+ int32 = 'i',
+ float32 = 'f',
+ /*s, b*/ //ignored
+ int64 = 'h',
+ double64 = 'd',
+} osc_parameter_type;
+
+typedef union {
+ int32_t i32;
+ float f;
+ int64_t i64;
+ double d;
+} osc_parameter_value;
+
+typedef struct /*_osc_channel*/ {
+ char* path;
+ size_t params;
+ size_t param_index;
+ uint8_t mark;
+
+ osc_parameter_type type;
+ osc_parameter_value max;
+ osc_parameter_value min;
+ osc_parameter_value current;
+} osc_channel;
+
+typedef struct /*_osc_instance_data*/ {
+ size_t channels;
+ osc_channel* channel;
+ char* root;
+ socklen_t dest_len;
+ struct sockaddr_storage dest;
+ int fd;
+ uint8_t learn;
+ uint16_t forced_rport;
+} osc_instance;