summaryrefslogtreecommitdiff
path: root/drivers/am/alsa_midi_driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/am/alsa_midi_driver.c')
-rw-r--r--drivers/am/alsa_midi_driver.c122
1 files changed, 122 insertions, 0 deletions
diff --git a/drivers/am/alsa_midi_driver.c b/drivers/am/alsa_midi_driver.c
new file mode 100644
index 0000000..b27f03c
--- /dev/null
+++ b/drivers/am/alsa_midi_driver.c
@@ -0,0 +1,122 @@
+
+#include "alsa_midi.h"
+#include <string.h>
+
+static int
+alsa_midi_driver_attach( alsa_midi_driver_t *driver, jack_engine_t *engine )
+{
+ return driver->midi->attach(driver->midi);
+}
+
+static int
+alsa_midi_driver_detach( alsa_midi_driver_t *driver, jack_engine_t *engine )
+{
+ return driver->midi->detach(driver->midi);
+}
+
+static int
+alsa_midi_driver_read( alsa_midi_driver_t *driver, jack_nframes_t nframes )
+{
+ driver->midi->read(driver->midi, nframes);
+ return 0;
+}
+
+static int
+alsa_midi_driver_write( alsa_midi_driver_t *driver, jack_nframes_t nframes )
+{
+ driver->midi->write(driver->midi, nframes);
+ return 0;
+}
+
+static int
+alsa_midi_driver_start( alsa_midi_driver_t *driver )
+{
+ return driver->midi->start(driver->midi);
+}
+
+static int
+alsa_midi_driver_stop( alsa_midi_driver_t *driver )
+{
+ return driver->midi->stop(driver->midi);
+}
+
+static void
+alsa_midi_driver_delete( alsa_midi_driver_t *driver )
+{
+ if (driver->midi)
+ (driver->midi->destroy)(driver->midi);
+
+ free (driver);
+}
+
+static jack_driver_t *
+alsa_midi_driver_new (jack_client_t *client, const char *name)
+{
+ alsa_midi_driver_t *driver;
+
+ jack_info ("creating alsa_midi driver ...");
+
+ driver = (alsa_midi_driver_t *) calloc (1, sizeof (alsa_midi_driver_t));
+
+ jack_driver_init ((jack_driver_t *) driver);
+
+ driver->attach = (JackDriverAttachFunction) alsa_midi_driver_attach;
+ driver->detach = (JackDriverDetachFunction) alsa_midi_driver_detach;
+ driver->read = (JackDriverReadFunction) alsa_midi_driver_read;
+ driver->write = (JackDriverWriteFunction) alsa_midi_driver_write;
+ driver->start = (JackDriverStartFunction) alsa_midi_driver_start;
+ driver->stop = (JackDriverStartFunction) alsa_midi_driver_stop;
+
+
+ driver->midi = alsa_seqmidi_new(client, NULL);
+ driver->client = client;
+
+ return (jack_driver_t *) driver;
+}
+
+/* DRIVER "PLUGIN" INTERFACE */
+
+const char driver_client_name[] = "alsa_midi";
+
+const jack_driver_desc_t *
+driver_get_descriptor ()
+{
+ jack_driver_desc_t * desc;
+ jack_driver_param_desc_t * params;
+ //unsigned int i;
+
+ desc = calloc (1, sizeof (jack_driver_desc_t));
+
+ strcpy (desc->name,"alsa_midi");
+ desc->nparams = 0;
+
+ params = calloc (desc->nparams, sizeof (jack_driver_param_desc_t));
+
+ desc->params = params;
+
+ return desc;
+}
+
+jack_driver_t *
+driver_initialize (jack_client_t *client, const JSList * params)
+{
+ const JSList * node;
+ const jack_driver_param_t * param;
+
+ for (node = params; node; node = jack_slist_next (node)) {
+ param = (const jack_driver_param_t *) node->data;
+
+ switch (param->character) {
+ default:
+ break;
+ }
+ }
+
+ return alsa_midi_driver_new (client, NULL);
+}
+
+void
+driver_finish (jack_driver_t *driver)
+{
+ alsa_midi_driver_delete ((alsa_midi_driver_t *) driver);
+}