Browse Source

[alsa-midi] add basic alsa-seq midi slave driver

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@4400 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.121.0
torben 14 years ago
parent
commit
71afbc6f28
3 changed files with 143 additions and 0 deletions
  1. +11
    -0
      drivers/alsa-midi/Makefile.am
  2. +10
    -0
      drivers/alsa-midi/alsa_midi.h
  3. +122
    -0
      drivers/alsa-midi/alsa_midi_driver.c

+ 11
- 0
drivers/alsa-midi/Makefile.am View File

@@ -1,5 +1,16 @@
MAINTAINERCLEANFILES=Makefile.in

AM_CFLAGS = $(JACK_CFLAGS)

plugindir = $(ADDON_DIR)

plugin_LTLIBRARIES = jack_alsa_midi.la

jack_alsa_midi_la_LDFLAGS = -module -avoid-version
jack_alsa_midi_la_SOURCES = alsa_rawmidi.c alsa_seqmidi.c alsa_midi_driver.c

noinst_HEADERS = alsa_midi.h \
midi_pack.h \
midi_unpack.h

jack_alsa_midi_la_LIBADD = $(ALSA_LIBS)

+ 10
- 0
drivers/alsa-midi/alsa_midi.h View File

@@ -20,6 +20,7 @@
#define __jack_alsa_midi_h__

#include <jack/jack.h>
#include <jack/driver.h>

typedef struct alsa_midi_t alsa_midi_t;
struct alsa_midi_t {
@@ -35,4 +36,13 @@ struct alsa_midi_t {
alsa_midi_t* alsa_rawmidi_new(jack_client_t *jack);
alsa_midi_t* alsa_seqmidi_new(jack_client_t *jack, const char* alsa_name);

typedef struct _alsa_midi_driver {

JACK_DRIVER_DECL;

alsa_midi_t *midi;
jack_client_t *client;

} alsa_midi_driver_t;

#endif /* __jack_alsa_midi_h__ */

+ 122
- 0
drivers/alsa-midi/alsa_midi_driver.c View File

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

Loading…
Cancel
Save