cwMidiDevice.h/cpp,cwMidiAlsa.h/cpp : Implemented active sensing filter.
This commit is contained in:
parent
5f123f5f72
commit
065ff3f555
@ -54,7 +54,8 @@ namespace cw
|
|||||||
{
|
{
|
||||||
unsigned devCnt; // MIDI devices attached to this computer
|
unsigned devCnt; // MIDI devices attached to this computer
|
||||||
dev_t* devArray;
|
dev_t* devArray;
|
||||||
cbFunc_t cbFunc; // MIDI input application callback
|
cbFunc_t cbFunc; // MIDI input application callback
|
||||||
|
bool filterRtSenseFl;
|
||||||
void* cbDataPtr;
|
void* cbDataPtr;
|
||||||
snd_seq_t* h; // ALSA system sequencer handle
|
snd_seq_t* h; // ALSA system sequencer handle
|
||||||
snd_seq_addr_t alsa_addr; // ALSA client/port address representing the application
|
snd_seq_addr_t alsa_addr; // ALSA client/port address representing the application
|
||||||
@ -72,6 +73,7 @@ namespace cw
|
|||||||
bool latency_meas_enable_in_fl;
|
bool latency_meas_enable_in_fl;
|
||||||
bool latency_meas_enable_out_fl;
|
bool latency_meas_enable_out_fl;
|
||||||
latency_meas_result_t latency_meas_result;
|
latency_meas_result_t latency_meas_result;
|
||||||
|
|
||||||
|
|
||||||
} alsa_device_t;
|
} alsa_device_t;
|
||||||
|
|
||||||
@ -254,7 +256,7 @@ namespace cw
|
|||||||
case SND_SEQ_EVENT_START: status = kSysRtStartMdId; break;
|
case SND_SEQ_EVENT_START: status = kSysRtStartMdId; break;
|
||||||
case SND_SEQ_EVENT_CONTINUE: status = kSysRtContMdId; break;
|
case SND_SEQ_EVENT_CONTINUE: status = kSysRtContMdId; break;
|
||||||
case SND_SEQ_EVENT_STOP: status = kSysRtStopMdId; break;
|
case SND_SEQ_EVENT_STOP: status = kSysRtStopMdId; break;
|
||||||
case SND_SEQ_EVENT_SENSING: status = kSysRtSenseMdId; break;
|
case SND_SEQ_EVENT_SENSING: status = p->filterRtSenseFl ? 0 : kSysRtSenseMdId; break;
|
||||||
case SND_SEQ_EVENT_RESET: status = kSysRtResetMdId; break;
|
case SND_SEQ_EVENT_RESET: status = kSysRtResetMdId; break;
|
||||||
|
|
||||||
case SND_SEQ_EVENT_SYSEX:
|
case SND_SEQ_EVENT_SYSEX:
|
||||||
@ -599,7 +601,12 @@ namespace cw
|
|||||||
} // cw
|
} // cw
|
||||||
|
|
||||||
|
|
||||||
cw::rc_t cw::midi::device::alsa::create( handle_t& h, cbFunc_t cbFunc, void* cbArg, unsigned parserBufByteCnt, const char* appNameStr )
|
cw::rc_t cw::midi::device::alsa::create( handle_t& h,
|
||||||
|
cbFunc_t cbFunc,
|
||||||
|
void* cbArg,
|
||||||
|
unsigned parserBufByteCnt,
|
||||||
|
const char* appNameStr,
|
||||||
|
bool filterRtSenseFl )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
int arc = 0;
|
int arc = 0;
|
||||||
@ -631,8 +638,9 @@ cw::rc_t cw::midi::device::alsa::create( handle_t& h, cbFunc_t cbFunc, void* cb
|
|||||||
p->alsa_fd = mem::allocZ<struct pollfd>(p->alsa_fdCnt);
|
p->alsa_fd = mem::allocZ<struct pollfd>(p->alsa_fdCnt);
|
||||||
snd_seq_poll_descriptors(p->h, p->alsa_fd, p->alsa_fdCnt, POLLIN);
|
snd_seq_poll_descriptors(p->h, p->alsa_fd, p->alsa_fdCnt, POLLIN);
|
||||||
|
|
||||||
p->cbFunc = cbFunc;
|
p->cbFunc = cbFunc;
|
||||||
p->cbDataPtr = cbArg;
|
p->cbDataPtr = cbArg;
|
||||||
|
p->filterRtSenseFl = filterRtSenseFl;
|
||||||
|
|
||||||
// start the sequencer queue
|
// start the sequencer queue
|
||||||
if((arc = snd_seq_start_queue(p->h, p->alsa_queue, NULL)) < 0 )
|
if((arc = snd_seq_start_queue(p->h, p->alsa_queue, NULL)) < 0 )
|
||||||
|
@ -9,7 +9,13 @@ namespace cw
|
|||||||
|
|
||||||
typedef handle< struct alsa_device_str> handle_t;
|
typedef handle< struct alsa_device_str> handle_t;
|
||||||
|
|
||||||
rc_t create( handle_t& h, cbFunc_t cbFunc, void* cbDataPtr, unsigned parserBufByteCnt, const char* appNameStr );
|
rc_t create( handle_t& h,
|
||||||
|
cbFunc_t cbFunc,
|
||||||
|
void* cbDataPtr,
|
||||||
|
unsigned parserBufByteCnt,
|
||||||
|
const char* appNameStr,
|
||||||
|
bool filterRtSenseFl );
|
||||||
|
|
||||||
rc_t destroy( handle_t& h);
|
rc_t destroy( handle_t& h);
|
||||||
bool isInitialized( handle_t h );
|
bool isInitialized( handle_t h );
|
||||||
|
|
||||||
|
@ -60,6 +60,8 @@ namespace cw
|
|||||||
unsigned bufN;
|
unsigned bufN;
|
||||||
std::atomic<unsigned> buf_ii;
|
std::atomic<unsigned> buf_ii;
|
||||||
std::atomic<unsigned> buf_oi;
|
std::atomic<unsigned> buf_oi;
|
||||||
|
|
||||||
|
bool filterRtSenseFl;
|
||||||
|
|
||||||
} device_t;
|
} device_t;
|
||||||
|
|
||||||
@ -238,7 +240,8 @@ cw::rc_t cw::midi::device::create( handle_t& hRef,
|
|||||||
unsigned fileDevReadAheadMicros,
|
unsigned fileDevReadAheadMicros,
|
||||||
unsigned parserBufByteCnt,
|
unsigned parserBufByteCnt,
|
||||||
bool enableBufFl,
|
bool enableBufFl,
|
||||||
unsigned bufferMsgCnt )
|
unsigned bufferMsgCnt,
|
||||||
|
bool filterRtSenseFl )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
rc_t rc1 = kOkRC;
|
rc_t rc1 = kOkRC;
|
||||||
@ -252,7 +255,8 @@ cw::rc_t cw::midi::device::create( handle_t& hRef,
|
|||||||
enableBufFl ? _callback : cbFunc,
|
enableBufFl ? _callback : cbFunc,
|
||||||
enableBufFl ? p : cbArg,
|
enableBufFl ? p : cbArg,
|
||||||
parserBufByteCnt,
|
parserBufByteCnt,
|
||||||
appNameStr )) != kOkRC )
|
appNameStr,
|
||||||
|
filterRtSenseFl)) != kOkRC )
|
||||||
{
|
{
|
||||||
rc = cwLogError(rc,"ALSA MIDI device create failed.");
|
rc = cwLogError(rc,"ALSA MIDI device create failed.");
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
@ -328,6 +332,7 @@ cw::rc_t cw::midi::device::create( handle_t& h,
|
|||||||
unsigned bufMsgCnt = 0;
|
unsigned bufMsgCnt = 0;
|
||||||
const object_t* file_ports = nullptr;
|
const object_t* file_ports = nullptr;
|
||||||
const object_t* port = nullptr;
|
const object_t* port = nullptr;
|
||||||
|
bool filterRtSenseFl = true;;
|
||||||
|
|
||||||
if((rc = args->getv("appNameStr",appNameStr,
|
if((rc = args->getv("appNameStr",appNameStr,
|
||||||
"fileDevName",fileDevName,
|
"fileDevName",fileDevName,
|
||||||
@ -335,7 +340,8 @@ cw::rc_t cw::midi::device::create( handle_t& h,
|
|||||||
"parseBufByteCnt",parseBufByteCnt,
|
"parseBufByteCnt",parseBufByteCnt,
|
||||||
"enableBufFl",enableBufFl,
|
"enableBufFl",enableBufFl,
|
||||||
"bufferMsgCnt",bufMsgCnt,
|
"bufferMsgCnt",bufMsgCnt,
|
||||||
"file_ports",file_ports)) != kOkRC )
|
"file_ports",file_ports,
|
||||||
|
"filterRtSenseFl",filterRtSenseFl)) != kOkRC )
|
||||||
{
|
{
|
||||||
rc = cwLogError(rc,"MIDI port parse args. failed.");
|
rc = cwLogError(rc,"MIDI port parse args. failed.");
|
||||||
}
|
}
|
||||||
@ -361,7 +367,18 @@ cw::rc_t cw::midi::device::create( handle_t& h,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = create(h,cbFunc,cbArg,labelArray,fpi,appNameStr,fileDevName,fileDevReadAheadMicros,parseBufByteCnt,enableBufFl,bufMsgCnt);
|
rc = create(h,
|
||||||
|
cbFunc,
|
||||||
|
cbArg,
|
||||||
|
labelArray,
|
||||||
|
fpi,
|
||||||
|
appNameStr,
|
||||||
|
fileDevName,
|
||||||
|
fileDevReadAheadMicros,
|
||||||
|
parseBufByteCnt,
|
||||||
|
enableBufFl,
|
||||||
|
bufMsgCnt,
|
||||||
|
filterRtSenseFl);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,8 @@ namespace cw
|
|||||||
unsigned fileDevReadAheadMicros = 3000,
|
unsigned fileDevReadAheadMicros = 3000,
|
||||||
unsigned parserBufByteCnt = 1024,
|
unsigned parserBufByteCnt = 1024,
|
||||||
bool enableBufFl = false, // Enable buffer to hold all incoming msg's until RT thread can pick them up.
|
bool enableBufFl = false, // Enable buffer to hold all incoming msg's until RT thread can pick them up.
|
||||||
unsigned bufferMsgCnt = 4096); // Count of messages in input buffer.
|
unsigned bufferMsgCnt = 4096, // Count of messages in input buffer.
|
||||||
|
bool filterRtSenseFl = true);
|
||||||
|
|
||||||
rc_t create( handle_t& h,
|
rc_t create( handle_t& h,
|
||||||
cbFunc_t cbFunc,
|
cbFunc_t cbFunc,
|
||||||
|
Loading…
Reference in New Issue
Block a user