mirror of https://github.com/ericonr/sndio.git
use the hold flag for midi ports as well
This commit is contained in:
parent
49190bbba1
commit
0057424c2b
|
@ -453,13 +453,14 @@ port_exit(void *arg)
|
||||||
* create a new midi port
|
* create a new midi port
|
||||||
*/
|
*/
|
||||||
struct port *
|
struct port *
|
||||||
port_new(char *path, unsigned int mode)
|
port_new(char *path, unsigned int mode, int hold)
|
||||||
{
|
{
|
||||||
struct port *c;
|
struct port *c;
|
||||||
|
|
||||||
c = xmalloc(sizeof(struct port));
|
c = xmalloc(sizeof(struct port));
|
||||||
c->path = path;
|
c->path = path;
|
||||||
c->state = PORT_CFG;
|
c->state = PORT_CFG;
|
||||||
|
c->hold = hold;
|
||||||
c->midi = midi_new(&port_midiops, c, mode);
|
c->midi = midi_new(&port_midiops, c, mode);
|
||||||
midi_portnum++;
|
midi_portnum++;
|
||||||
c->next = port_list;
|
c->next = port_list;
|
||||||
|
@ -517,7 +518,7 @@ port_unref(struct port *c)
|
||||||
#endif
|
#endif
|
||||||
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)
|
if ((rxmask & c->midi->self) == 0 && c->state == PORT_INIT && !c->hold)
|
||||||
port_close(c);
|
port_close(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -574,7 +575,9 @@ port_close(struct port *c)
|
||||||
int
|
int
|
||||||
port_init(struct port *c)
|
port_init(struct port *c)
|
||||||
{
|
{
|
||||||
return port_open(c);
|
if (c->hold)
|
||||||
|
return port_open(c);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -87,7 +87,8 @@ struct port {
|
||||||
#define PORT_INIT 1
|
#define PORT_INIT 1
|
||||||
#define PORT_DRAIN 2
|
#define PORT_DRAIN 2
|
||||||
unsigned int state;
|
unsigned int state;
|
||||||
char *path;
|
char *path; /* hold the port open ? */
|
||||||
|
int hold;
|
||||||
struct midi *midi;
|
struct midi *midi;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -109,7 +110,7 @@ void midi_fill(struct midi *);
|
||||||
void midi_tag(struct midi *, unsigned int);
|
void midi_tag(struct midi *, unsigned int);
|
||||||
void midi_link(struct midi *, struct midi *);
|
void midi_link(struct midi *, struct midi *);
|
||||||
|
|
||||||
struct port *port_new(char *, unsigned int);
|
struct port *port_new(char *, unsigned int, int);
|
||||||
struct port *port_bynum(int);
|
struct port *port_bynum(int);
|
||||||
void port_del(struct port *);
|
void port_del(struct port *);
|
||||||
int port_ref(struct port *);
|
int port_ref(struct port *);
|
||||||
|
|
|
@ -390,7 +390,7 @@ main(int argc, char **argv)
|
||||||
mode, vol, mmc, dup);
|
mode, vol, mmc, dup);
|
||||||
break;
|
break;
|
||||||
case 'q':
|
case 'q':
|
||||||
p = port_new(optarg, MODE_MIDIMASK);
|
p = port_new(optarg, MODE_MIDIMASK, hold);
|
||||||
if (!p)
|
if (!p)
|
||||||
errx(1, "%s: can't open port", optarg);
|
errx(1, "%s: can't open port", optarg);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue