aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends/osc.h
diff options
context:
space:
mode:
Diffstat (limited to 'backends/osc.h')
-rw-r--r--backends/osc.h56
1 files changed, 39 insertions, 17 deletions
diff --git a/backends/osc.h b/backends/osc.h
index 5938f12..6f3b923 100644
--- a/backends/osc.h
+++ b/backends/osc.h
@@ -1,19 +1,21 @@
#include "midimonster.h"
#include <sys/types.h>
+#ifndef _WIN32
#include <sys/socket.h>
+#endif
#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();
+MM_PLUGIN_API int init();
+static int osc_configure(char* option, char* value);
+static int osc_configure_instance(instance* inst, char* option, char* value);
+static instance* osc_instance();
+static channel* osc_map_channel(instance* inst, char* spec, uint8_t flags);
+static int osc_set(instance* inst, size_t num, channel** c, channel_value* v);
+static int osc_handle(size_t num, managed_fd* fds);
+static int osc_start();
+static int osc_shutdown();
typedef enum {
not_set = 0,
@@ -34,22 +36,42 @@ typedef union {
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_parameter_type* type;
+ osc_parameter_value* max;
+ osc_parameter_value* min;
+ osc_parameter_value* in;
+ osc_parameter_value* out;
} osc_channel;
typedef struct /*_osc_instance_data*/ {
+ //pre-configured channel patterns
+ size_t patterns;
+ osc_channel* pattern;
+
+ //actual channel registry
size_t channels;
osc_channel* channel;
+
+ //instance config
char* root;
+ uint8_t learn;
+
+ //peer addressing
socklen_t dest_len;
struct sockaddr_storage dest;
- int fd;
- uint8_t learn;
uint16_t forced_rport;
-} osc_instance;
+
+ //peer fd
+ int fd;
+} osc_instance_data;
+
+typedef union {
+ struct {
+ uint32_t channel;
+ uint32_t parameter;
+ } fields;
+ uint64_t label;
+} osc_channel_ident;
+