|
|
@@ -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); |
|
|
|
} |