cwMidiAlsa.cpp : Ports that do not qualify based on READ/WRITE attributes are now dropped.
Ports without names are now given the default name '<None>'.
This commit is contained in:
parent
a6f518ed54
commit
3526b2c807
@ -283,6 +283,7 @@ namespace cw
|
|||||||
time::spec_t ts;
|
time::spec_t ts;
|
||||||
ts.tv_sec = ev->time.time.tv_sec;
|
ts.tv_sec = ev->time.time.tv_sec;
|
||||||
ts.tv_nsec = ev->time.time.tv_nsec;
|
ts.tv_nsec = ev->time.time.tv_nsec;
|
||||||
|
|
||||||
parser::midiTriple(p->prvRcvPort->parserH, &ts, status | ch, d0, d1 );
|
parser::midiTriple(p->prvRcvPort->parserH, &ts, status | ch, d0, d1 );
|
||||||
|
|
||||||
p->prvTimeMicroSecs = microSecs1;
|
p->prvTimeMicroSecs = microSecs1;
|
||||||
@ -439,7 +440,7 @@ namespace cw
|
|||||||
{
|
{
|
||||||
assert(j<p->devArray[i].iPortCnt);
|
assert(j<p->devArray[i].iPortCnt);
|
||||||
p->devArray[i].iPortArray[j].inputFl = true;
|
p->devArray[i].iPortArray[j].inputFl = true;
|
||||||
p->devArray[i].iPortArray[j].nameStr = mem::duplStr(cwStringNullGuard(port));
|
p->devArray[i].iPortArray[j].nameStr = mem::duplStr(port==nullptr ? "<None>" : port);
|
||||||
p->devArray[i].iPortArray[j].alsa_type = type;
|
p->devArray[i].iPortArray[j].alsa_type = type;
|
||||||
p->devArray[i].iPortArray[j].alsa_cap = caps;
|
p->devArray[i].iPortArray[j].alsa_cap = caps;
|
||||||
p->devArray[i].iPortArray[j].alsa_addr = addr;
|
p->devArray[i].iPortArray[j].alsa_addr = addr;
|
||||||
@ -461,7 +462,7 @@ namespace cw
|
|||||||
{
|
{
|
||||||
assert(k<p->devArray[i].oPortCnt);
|
assert(k<p->devArray[i].oPortCnt);
|
||||||
p->devArray[i].oPortArray[k].inputFl = false;
|
p->devArray[i].oPortArray[k].inputFl = false;
|
||||||
p->devArray[i].oPortArray[k].nameStr = mem::duplStr(cwStringNullGuard(port));
|
p->devArray[i].oPortArray[k].nameStr = mem::duplStr(port==nullptr ? "<None>" : port);
|
||||||
p->devArray[i].oPortArray[k].alsa_type = type;
|
p->devArray[i].oPortArray[k].alsa_type = type;
|
||||||
p->devArray[i].oPortArray[k].alsa_cap = caps;
|
p->devArray[i].oPortArray[k].alsa_cap = caps;
|
||||||
p->devArray[i].oPortArray[k].alsa_addr = addr;
|
p->devArray[i].oPortArray[k].alsa_addr = addr;
|
||||||
@ -475,6 +476,11 @@ namespace cw
|
|||||||
++k;
|
++k;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The capabilities of some ports may not have been as expected
|
||||||
|
// decrease the in/out port count to account for these ports
|
||||||
|
p->devArray[i].iPortCnt = j;
|
||||||
|
p->devArray[i].oPortCnt = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
errLabel:
|
errLabel:
|
||||||
@ -736,7 +742,7 @@ const char* cw::midi::device::alsa::portName( handle_t h, unsigned devIdx,
|
|||||||
if( cwIsFlag(flags,kInMpFl) )
|
if( cwIsFlag(flags,kInMpFl) )
|
||||||
{
|
{
|
||||||
if( portIdx >= p->devArray[devIdx].iPortCnt )
|
if( portIdx >= p->devArray[devIdx].iPortCnt )
|
||||||
return 0;
|
return nullptr;
|
||||||
|
|
||||||
return p->devArray[devIdx].iPortArray[portIdx].nameStr;
|
return p->devArray[devIdx].iPortArray[portIdx].nameStr;
|
||||||
}
|
}
|
||||||
@ -782,7 +788,7 @@ cw::rc_t cw::midi::device::alsa::send( handle_t h, unsigned devIdx, unsigned po
|
|||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
snd_seq_event_t ev;
|
snd_seq_event_t ev;
|
||||||
int arc;
|
int arc;
|
||||||
alsa_device_t* p = _handleToPtr(h);
|
alsa_device_t* p = _handleToPtr(h);
|
||||||
|
|
||||||
assert( p!=NULL && devIdx < p->devCnt && portIdx < p->devArray[devIdx].oPortCnt );
|
assert( p!=NULL && devIdx < p->devCnt && portIdx < p->devArray[devIdx].oPortCnt );
|
||||||
|
|
||||||
@ -796,8 +802,11 @@ cw::rc_t cw::midi::device::alsa::send( handle_t h, unsigned devIdx, unsigned po
|
|||||||
snd_seq_ev_set_direct(&ev);
|
snd_seq_ev_set_direct(&ev);
|
||||||
snd_seq_ev_set_fixed(&ev);
|
snd_seq_ev_set_fixed(&ev);
|
||||||
|
|
||||||
|
uint8_t status_wo_ch = status;
|
||||||
|
if( midi::isChStatus(status) )
|
||||||
|
status_wo_ch = status & 0xf0;
|
||||||
|
|
||||||
switch( status & 0xf0 )
|
switch( status_wo_ch )
|
||||||
{
|
{
|
||||||
case kNoteOffMdId:
|
case kNoteOffMdId:
|
||||||
ev.type = SND_SEQ_EVENT_NOTEOFF;
|
ev.type = SND_SEQ_EVENT_NOTEOFF;
|
||||||
@ -854,8 +863,32 @@ cw::rc_t cw::midi::device::alsa::send( handle_t h, unsigned devIdx, unsigned po
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case kSysRtClockMdId:
|
||||||
|
ev.type = SND_SEQ_EVENT_CLOCK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kSysRtStartMdId:
|
||||||
|
ev.type =SND_SEQ_EVENT_START;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kSysRtContMdId:
|
||||||
|
ev.type = SND_SEQ_EVENT_CONTINUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kSysRtStopMdId:
|
||||||
|
ev.type = SND_SEQ_EVENT_STOP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kSysRtSenseMdId:
|
||||||
|
ev.type = SND_SEQ_EVENT_SENSING;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kSysRtResetMdId:
|
||||||
|
ev.type = SND_SEQ_EVENT_RESET;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
rc = _cmMpErrMsg1(kInvalidArgRC,0,"Cannot send an invalid MIDI status byte:0x%x.",status & 0xf0);
|
rc = _cmMpErrMsg1(kInvalidArgRC,0,"Cannot send an invalid MIDI status byte:0x%x.",status);
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user