diff options
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | makefile | 7 | ||||
-rw-r--r-- | midimonster.c | 22 | ||||
-rw-r--r-- | midimonster.h | 57 | ||||
-rw-r--r-- | monster.cfg | 26 |
5 files changed, 115 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36d8a83 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +midimonster +*.swp +*.o diff --git a/makefile b/makefile new file mode 100644 index 0000000..81ab1d3 --- /dev/null +++ b/makefile @@ -0,0 +1,7 @@ +LDLIBS = -lasound +CFLAGS = -g -Wall + +all: midimonster + +clean: + $(RM) midimonster diff --git a/midimonster.c b/midimonster.c new file mode 100644 index 0000000..58166d6 --- /dev/null +++ b/midimonster.c @@ -0,0 +1,22 @@ +#include "midimonster.h" + +int usage(char* fn){ + fprintf(stderr, "MIDIMonster v0.1\n"); + fprintf(stderr, "Usage:\n"); + fprintf(stderr, "\t%s <configfile>\n", fn); + return EXIT_FAILURE; +} + +int main(int argc, char** argv){ + char* cfg_file = DEFAULT_CFG; + if(argc > 1){ + cfg_file = argv[1]; + } + + //initialize backends + //read config + //wait for events + //free all data + + return EXIT_SUCCESS; +} diff --git a/midimonster.h b/midimonster.h new file mode 100644 index 0000000..59c97eb --- /dev/null +++ b/midimonster.h @@ -0,0 +1,57 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> + +#define DEFAULT_CFG "monster.cfg" + +struct _channel_value; +struct _backend_channel; +struct _backend_instance; + +typedef int (*mmbackend_handle_event)(struct _backend_channel* c, struct _channel_value v); +typedef struct _backend_channel* (*mmbackend_parse_channel)(char* spec); +typedef int (*mmbackend_configure)(char* option, char* value); +typedef struct _backend_instance* (*mmbackend_create_instance)(); +typedef int (*mmbackend_configure_instance)(char* option, char* value); +typedef int (*mmbackend_process_fd)(int fd, void** impl); +typedef int (*mmbackend_shutdown)(); + +typedef struct _channel_value { + double raw_double; + uint64_t raw_u64; + double normalised; +} channel_value; + +typedef struct /*_mm_backend*/ { + char* name; + mmbackend_configure conf; + mmbackend_create_instance create; + mmbackend_configure_instance conf_instance; + mmbackend_parse_channel channel; + mmbackend_handle_event handle; + mmbackend_process_fd process; + mmbackend_shutdown shutdown; +} backend; + +typedef struct _backend_instance { + backend* backend; + size_t ident; + void* impl; + char* name; +} instance; + +typedef struct _backend_channel { + instance* instance; + size_t ident; + void* impl; +} channel; + +typedef struct /*_mm_managed_fd*/ { + int fd; + backend* backend; + void* impl; +} managed_fd; + +backend* mm_backend_register(backend b); +int mm_manage_fd(int fd, backend* b, int manage, void* impl); +int mm_channel_event(channel* c, channel_value v); diff --git a/monster.cfg b/monster.cfg new file mode 100644 index 0000000..6391d40 --- /dev/null +++ b/monster.cfg @@ -0,0 +1,26 @@ +[backend midi] +name = MIDIMonster + +[backend artnet] + +[backend osc] + +[midi indisc] +name = MIDIMonster Input 1 +mode = input,output,create + +[midi lc1] +device = 20:0 +mode = input,output + +[midi xlate] +name = Translation Output 1 +mode = input,output,create + +[artnet net1] +mode = input,output +net = 0 +uni = 1 + +[map] + |