version 1.1, 2012/11/23 07:03:28 |
version 1.2, 2012/11/30 20:30:24 |
|
|
struct midi *ep = p->midi; |
struct midi *ep = p->midi; |
int events = 0; |
int events = 0; |
|
|
if ((ep->mode & MODE_MIDIIN) && ep->ibuf.used < ep->ibuf.len) |
if (ep->mode & MODE_MIDIIN) |
events |= POLLIN; |
events |= POLLIN; |
if ((ep->mode & MODE_MIDIOUT) && ep->obuf.used > 0) |
if ((ep->mode & MODE_MIDIOUT) && ep->obuf.used > 0) |
events |= POLLOUT; |
events |= POLLOUT; |
|
|
void |
void |
port_mio_in(void *arg) |
port_mio_in(void *arg) |
{ |
{ |
|
unsigned char data[MIDI_BUFSZ]; |
struct port *p = arg; |
struct port *p = arg; |
struct midi *ep = p->midi; |
struct midi *ep = p->midi; |
unsigned char *data; |
int n; |
int n, count; |
|
|
|
for (;;) { |
for (;;) { |
data = abuf_wgetblk(&ep->ibuf, &count); |
n = mio_read(p->mio.hdl, data, MIDI_BUFSZ); |
if (count == 0) |
|
break; |
|
n = mio_read(p->mio.hdl, data, count); |
|
if (n == 0) |
if (n == 0) |
break; |
break; |
abuf_wcommit(&ep->ibuf, n); |
midi_in(ep, data, n); |
midi_in(ep); |
|
if (n < count) |
|
break; |
|
} |
} |
} |
} |
|
|
|
|
abuf_rdiscard(&ep->obuf, n); |
abuf_rdiscard(&ep->obuf, n); |
if (n < count) |
if (n < count) |
break; |
break; |
midi_fill(ep); |
|
} |
} |
|
midi_fill(ep); |
} |
} |
|
|
void |
void |