diff options
Diffstat (limited to 'drivers/am/alsa_midi_driver.c')
-rw-r--r-- | drivers/am/alsa_midi_driver.c | 122 |
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); +} |