version 1.4, 2012/11/30 21:04:35 |
version 1.5, 2012/11/30 22:26:34 |
|
|
for (rxmask = 0, i = 0; i < MIDI_NEP; i++) |
for (rxmask = 0, i = 0; i < MIDI_NEP; i++) |
rxmask |= midi_ep[i].txmask; |
rxmask |= midi_ep[i].txmask; |
if ((rxmask & c->midi->self) == 0 && c->state == PORT_INIT && !c->hold) |
if ((rxmask & c->midi->self) == 0 && c->state == PORT_INIT && !c->hold) |
port_close(c); |
port_drain(c); |
} |
} |
|
|
struct port * |
struct port * |
|
|
return 1; |
return 1; |
} |
} |
|
|
|
void |
|
port_drain(struct port *c) |
|
{ |
|
struct midi *ep = c->midi; |
|
|
|
if (!(ep->mode & MODE_MIDIOUT) || ep->obuf.used == 0) |
|
port_close(c); |
|
else { |
|
c->state = PORT_DRAIN; |
|
#ifdef DEBUG |
|
if (log_level >= 3) { |
|
port_log(c); |
|
log_puts(": draining\n"); |
|
} |
|
#endif |
|
} |
|
} |
|
|
int |
int |
port_init(struct port *c) |
port_init(struct port *c) |
{ |
{ |
|
|
void |
void |
port_done(struct port *c) |
port_done(struct port *c) |
{ |
{ |
/* XXX: drain? */ |
if (c->state == PORT_INIT) |
if (c->state != PORT_CFG) |
port_drain(c); |
port_close(c); |
|
} |
} |