1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#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);
}
|