Renamed cwMidiPort.h/cpp to cwMidiDevice.h/cpp.

cwMidiDecls.h midi::msg_t now breaks out MIDI channel from status and has a new user 'uid' field to link the msg to an external entity.
Renamed midi::packet_t. cbDataPtr to cbArg.
midi::packet_t.cbFunc_t is now included in cwMidiDecls.h.
Other files effected: cwIo.cpp,cwIoAudioMidi.cpp,cwIoPresetSelApp.cpp
This commit is contained in:
kevin 2024-02-14 10:56:44 -05:00
parent 5bfc19ba70
commit 742fc05e81
7 changed files with 22 additions and 21 deletions

View File

@ -9,7 +9,7 @@
#include "cwIo.h" #include "cwIo.h"
#include "cwMidi.h" #include "cwMidi.h"
#include "cwMidiPort.h" #include "cwMidiDevice.h"
#include "cwObject.h" #include "cwObject.h"
@ -609,7 +609,7 @@ namespace cw
msg_t m; msg_t m;
midi_msg_t mm; midi_msg_t mm;
const midi::packet_t* pkt = pktArray + i; const midi::packet_t* pkt = pktArray + i;
io_t* p = reinterpret_cast<io_t*>(pkt->cbDataPtr); io_t* p = reinterpret_cast<io_t*>(pkt->cbArg);
rc_t rc = kOkRC; rc_t rc = kOkRC;
@ -633,7 +633,6 @@ namespace cw
rc_t _midiPortCreate( io_t* p, const object_t* c ) rc_t _midiPortCreate( io_t* p, const object_t* c )
{ {
rc_t rc = kOkRC; rc_t rc = kOkRC;
unsigned parserBufByteN = 1024;
const object_t* cfg = nullptr; const object_t* cfg = nullptr;
// get the MIDI port cfg // get the MIDI port cfg
@ -643,14 +642,12 @@ namespace cw
return kOkRC; return kOkRC;
} }
if((rc = cfg->getv("parserBufByteN", parserBufByteN, if((rc = cfg->getv("asyncFl", p->midiAsyncFl )) != kOkRC )
"asyncFl", p->midiAsyncFl )) != kOkRC )
{ {
rc = cwLogError(kSyntaxErrorRC,"MIDI configuration parse failed."); rc = cwLogError(kSyntaxErrorRC,"MIDI configuration parse failed.");
} }
// initialie the MIDI system if((rc = create(p->midiH, _midiCallback, p, cfg)) != kOkRC )
if((rc = create(p->midiH, _midiCallback, p, parserBufByteN, "app")) != kOkRC )
return rc; return rc;
@ -3807,7 +3804,7 @@ void cw::io::latency_measure_setup(handle_t h)
p->latency_meas_result.audio_out_rms_max = 0; p->latency_meas_result.audio_out_rms_max = 0;
if( p->midiH.isValid() ) if( p->midiH.isValid() )
latency_measure_setup(p->midiH); latency_measure_reset(p->midiH);
} }
cw::io::latency_meas_result_t cw::io::latency_measure_result(handle_t h) cw::io::latency_meas_result_t cw::io::latency_measure_result(handle_t h)
@ -3816,10 +3813,10 @@ cw::io::latency_meas_result_t cw::io::latency_measure_result(handle_t h)
if( p->midiH.isValid() ) if( p->midiH.isValid() )
{ {
midi::device::latency_meas_result_t r = latency_measure_result(p->midiH); midi::device::latency_meas_combined_result_t r = latency_measure_result(p->midiH);
p->latency_meas_result.note_on_input_ts = r.note_on_input_ts; p->latency_meas_result.note_on_input_ts = r.alsa_dev.note_on_input_ts;
p->latency_meas_result.note_on_output_ts = r.note_on_output_ts; p->latency_meas_result.note_on_output_ts = r.alsa_dev.note_on_output_ts;
} }
return p->latency_meas_result; return p->latency_meas_result;

View File

@ -870,8 +870,8 @@ namespace cw
am->devIdx = pkt->devIdx; am->devIdx = pkt->devIdx;
am->portIdx = pkt->portIdx; am->portIdx = pkt->portIdx;
am->timestamp = mm->timeStamp; am->timestamp = mm->timeStamp;
am->ch = mm->status & 0x0f; am->ch = mm->ch;
am->status = mm->status & 0xf0; am->status = mm->status;
am->d0 = mm->d0; am->d0 = mm->d0;
am->d1 = mm->d1; am->d1 = mm->d1;

View File

@ -1355,7 +1355,7 @@ namespace cw
{ {
//printf("R:%i %i %i\n",mm->status, mm->d0, mm->d1); //printf("R:%i %i %i\n",mm->status, mm->d0, mm->d1);
const am_midi_msg_t* am = _midi_store( p, pkt->devIdx, pkt->portIdx, mm->timeStamp, mm->status & 0x0f, mm->status & 0xf0, mm->d0, mm->d1 ); const am_midi_msg_t* am = _midi_store( p, pkt->devIdx, pkt->portIdx, mm->timeStamp, mm->ch, mm->status, mm->d0, mm->d1 );
if( p->thruFl && am != nullptr ) if( p->thruFl && am != nullptr )
_transmit_msg( p, am, false ); _transmit_msg( p, am, false );

View File

@ -1142,8 +1142,8 @@ namespace cw
if( midi::isChStatus(mm->status) ) if( midi::isChStatus(mm->status) )
{ {
if(midi_record_play::send_midi_msg( app->mrpH, midi_record_play::kSampler_MRP_DevIdx, mm->status & 0x0f, mm->status & 0xf0, mm->d0, mm->d1 ) == kOkRC ) if(midi_record_play::send_midi_msg( app->mrpH, midi_record_play::kSampler_MRP_DevIdx, mm->ch, mm->status, mm->d0, mm->d1 ) == kOkRC )
_midi_play_callback( app, midi_record_play::kMidiEventActionId, id, timestamp, loc, nullptr, mm->status & 0x0f, mm->status & 0xf0, mm->d0, mm->d1 ); _midi_play_callback( app, midi_record_play::kMidiEventActionId, id, timestamp, loc, nullptr, mm->ch, mm->status, mm->d0, mm->d1 );
} }
} }

View File

@ -8,21 +8,25 @@ namespace cw
typedef struct msg_str typedef struct msg_str
{ {
time::spec_t timeStamp; time::spec_t timeStamp;
uint8_t status; // midi status byte unsigned uid; // application specified id
uint8_t ch; // midi channel
uint8_t status; // midi status byte (channel has been removed)
uint8_t d0; // midi data byte 0 uint8_t d0; // midi data byte 0
uint8_t d1; // midi data byte 1 uint8_t d1; // midi data byte 1
uint8_t pad;
} msg_t; } msg_t;
typedef struct packet_str typedef struct packet_str
{ {
void* cbDataPtr; // Application supplied reference value void* cbArg; // Application supplied reference value
unsigned devIdx; // The device the msg originated from unsigned devIdx; // The device the msg originated from
unsigned portIdx; // The port index on the source device unsigned portIdx; // The port index on the source device
msg_t* msgArray; // Pointer to an array of 'msgCnt' mdMsg records or NULL if sysExMsg is non-NULL msg_t* msgArray; // Pointer to an array of 'msgCnt' mdMsg records or NULL if sysExMsg is non-NULL
uint8_t* sysExMsg; // Pointer to a sys-ex msg or NULL if msgArray is non-NULL (see note below) uint8_t* sysExMsg; // Pointer to a sys-ex msg or NULL if msgArray is non-NULL (see note below)
unsigned msgCnt; // Count of mdMsg records or sys-ex bytes unsigned msgCnt; // Count of mdMsg records or sys-ex bytes
} packet_t; } packet_t;
typedef void (*cbFunc_t)( const packet_t* pktArray, unsigned pktCnt );
} }
} }
#endif #endif