Added 'decls' include files to hold public declarations for audio,midi,serial,socket, and websock modules.
Other minor changes to prepare for integration into cwIo. In cwMidi* replaced 'byte_t' with 'uint8_t'. In cwAudioDevice* removed redundant 'device' prefix from function names.
This commit is contained in:
parent
11f6d38330
commit
5cda838a93
27
Makefile
27
Makefile
@ -14,26 +14,31 @@ SRC += cwThread.cpp cwMutex.cpp
|
|||||||
HDR += cwWebSock.h cwWebSockSvr.h cwLib.h
|
HDR += cwWebSock.h cwWebSockSvr.h cwLib.h
|
||||||
SRC += cwWebSock.cpp cwWebSockSvr.cpp cwLib.cpp
|
SRC += cwWebSock.cpp cwWebSockSvr.cpp cwLib.cpp
|
||||||
|
|
||||||
HDR += cwSerialPort.h cwSerialPortSrv.h
|
HDR += cwUiDecls.h cwUi.h cwUiTest.h
|
||||||
SRC += cwSerialPort.cpp cwSerialPortSrv.cpp
|
SRC += cwUi.cpp cwUiTest.cpp
|
||||||
|
|
||||||
HDR += cwMidi.h cwMidiPort.h
|
HDR += cwSerialPortDecls.h cwSerialPort.h cwSerialPortSrv.h
|
||||||
SRC += cwMidi.cpp cwMidiPort.cpp cwMidiAlsa.cpp
|
SRC += cwSerialPort.cpp cwSerialPortSrv.cpp
|
||||||
|
|
||||||
|
HDR += cwMidiDecls.h cwMidi.h cwMidiPort.h
|
||||||
|
SRC += cwMidi.cpp cwMidiPort.cpp cwMidiAlsa.cpp
|
||||||
|
|
||||||
|
HDR += cwAudioBufDecls.h cwAudioBuf.h cwAudioDeviceDecls.h cwAudioDevice.h cwAudioDeviceAlsa.h
|
||||||
|
SRC += cwAudioBuf.cpp cwAudioDevice.cpp cwAudioDeviceAlsa.cpp cwAudioDeviceTest.cpp
|
||||||
|
|
||||||
|
HDR += cwSocketDecls.h cwSocket.h
|
||||||
|
SRC += cwSocket.cpp
|
||||||
|
|
||||||
|
HDR += cwIo.h cwIoTest.h
|
||||||
|
SRC += cwIo.cpp cwIoTest.cpp
|
||||||
|
|
||||||
HDR += cwAudioBuf.h cwAudioDevice.h cwAudioDeviceAlsa.h
|
|
||||||
SRC += cwAudioBuf.cpp cwAudioDevice.cpp cwAudioDeviceAlsa.cpp cwAudioDeviceTest.cpp
|
|
||||||
|
|
||||||
HDR += cwTcpSocket.h cwTcpSocketSrv.h cwTcpSocketTest.h
|
HDR += cwTcpSocket.h cwTcpSocketSrv.h cwTcpSocketTest.h
|
||||||
SRC += cwTcpSocket.cpp cwTcpSocketSrv.cpp cwTcpSocketTest.cpp
|
SRC += cwTcpSocket.cpp cwTcpSocketSrv.cpp cwTcpSocketTest.cpp
|
||||||
|
|
||||||
HDR += cwSocket.h
|
|
||||||
SRC += cwSocket.cpp
|
|
||||||
|
|
||||||
HDR += cwMdns.h cwEuCon.h cwDnsSd.h dns_sd/dns_sd.h dns_sd/dns_sd_print.h dns_sd/dns_sd_const.h dns_sd/fader.h dns_sd/rpt.h
|
HDR += cwMdns.h cwEuCon.h cwDnsSd.h dns_sd/dns_sd.h dns_sd/dns_sd_print.h dns_sd/dns_sd_const.h dns_sd/fader.h dns_sd/rpt.h
|
||||||
SRC += cwMdns.cpp cwEuCon.cpp cwDnsSd.cpp dns_sd/dns_sd.cpp dns_sd/dns_sd_print.cpp dns_sd/fader.cpp dns_sd/rpt.cpp
|
SRC += cwMdns.cpp cwEuCon.cpp cwDnsSd.cpp dns_sd/dns_sd.cpp dns_sd/dns_sd_print.cpp dns_sd/fader.cpp dns_sd/rpt.cpp
|
||||||
|
|
||||||
HDR += cwIo.h cwIoTest.h
|
|
||||||
SRC += cwIo.cpp cwIoTest.cpp
|
|
||||||
|
|
||||||
# -ldl = dlopen,dlclose,dlsym
|
# -ldl = dlopen,dlclose,dlsym
|
||||||
LIBS = -lpthread -lwebsockets -lasound -ldl
|
LIBS = -lpthread -lwebsockets -lasound -ldl
|
||||||
|
11
cwAudioBuf.h
11
cwAudioBuf.h
@ -29,8 +29,10 @@
|
|||||||
// out - outgoing samples are filled with a 1k sine tone
|
// out - outgoing samples are filled with a 1k sine tone
|
||||||
//)
|
//)
|
||||||
|
|
||||||
#ifndef cmApBuf_H
|
#ifndef cwAudioBuf_H
|
||||||
#define cmApBuf_H
|
#define cwAudioBuf_H
|
||||||
|
|
||||||
|
#include "cwAudioBufDecls.h"
|
||||||
|
|
||||||
namespace cw
|
namespace cw
|
||||||
{
|
{
|
||||||
@ -113,7 +115,7 @@ namespace cw
|
|||||||
// Return the meter window period as set by initialize()
|
// Return the meter window period as set by initialize()
|
||||||
unsigned meterMs(handle_t h);
|
unsigned meterMs(handle_t h);
|
||||||
|
|
||||||
// Set the meter update period. THis function limits the value to between 10 and 1000.
|
// Set the meter update period. This function limits the value to between 10 and 1000.
|
||||||
void setMeterMs( handle_t h, unsigned meterMs );
|
void setMeterMs( handle_t h, unsigned meterMs );
|
||||||
|
|
||||||
// Returns the channel count set via setup().
|
// Returns the channel count set via setup().
|
||||||
@ -211,7 +213,8 @@ namespace cw
|
|||||||
// 3) This function just returns audio information it does not
|
// 3) This function just returns audio information it does not
|
||||||
// change any internal states.
|
// change any internal states.
|
||||||
// 4) The timestamp pointers are optional.
|
// 4) The timestamp pointers are optional.
|
||||||
void getIO( handle_t h, unsigned iDevIdx, sample_t* iBufArray[], unsigned iBufChCnt, time::spec_t* iTimeStampPtr,
|
void getIO( handle_t h,
|
||||||
|
unsigned iDevIdx, sample_t* iBufArray[], unsigned iBufChCnt, time::spec_t* iTimeStampPtr,
|
||||||
unsigned oDevIdx, sample_t* oBufArray[], unsigned oBufChCnt, time::spec_t* oTimeStampPtr );
|
unsigned oDevIdx, sample_t* oBufArray[], unsigned oBufChCnt, time::spec_t* oTimeStampPtr );
|
||||||
|
|
||||||
|
|
||||||
|
16
cwAudioBufDecls.h
Normal file
16
cwAudioBufDecls.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef cwAudioBufDecls_H
|
||||||
|
#define cwAudioBufDecls_H
|
||||||
|
|
||||||
|
namespace cw
|
||||||
|
{
|
||||||
|
namespace audio
|
||||||
|
{
|
||||||
|
namespace buf
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -112,19 +112,19 @@ cw::rc_t cw::audio::device::registerDriver( handle_t h, driver_t* drv )
|
|||||||
return kOkRC;
|
return kOkRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned cw::audio::device::deviceCount( handle_t h )
|
unsigned cw::audio::device::count( handle_t h )
|
||||||
{
|
{
|
||||||
device_t* p = _handleToPtr(h);
|
device_t* p = _handleToPtr(h);
|
||||||
return p->nextDrvIdx;
|
return p->nextDrvIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned cw::audio::device::deviceLabelToIndex( handle_t h, const char* label )
|
unsigned cw::audio::device::labelToIndex( handle_t h, const char* label )
|
||||||
{
|
{
|
||||||
unsigned n = deviceCount(h);
|
unsigned n = count(h);
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for(i=0; i<n; ++i)
|
for(i=0; i<n; ++i)
|
||||||
{
|
{
|
||||||
const char* s = deviceLabel(h,i);
|
const char* s = device::label(h,i);
|
||||||
if( textCompare(s,label)==0)
|
if( textCompare(s,label)==0)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@ -132,7 +132,7 @@ unsigned cw::audio::device::deviceLabelToIndex( handle_t h, const char* lab
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char* cw::audio::device::deviceLabel( handle_t h, unsigned devIdx )
|
const char* cw::audio::device::label( handle_t h, unsigned devIdx )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -140,7 +140,7 @@ const char* cw::audio::device::deviceLabel( handle_t h, unsigned devIdx )
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned cw::audio::device::deviceChannelCount( handle_t h, unsigned devIdx, bool inputFl )
|
unsigned cw::audio::device::channelCount( handle_t h, unsigned devIdx, bool inputFl )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -148,7 +148,7 @@ unsigned cw::audio::device::deviceChannelCount( handle_t h, unsigned devIdx, boo
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
double cw::audio::device::deviceSampleRate( handle_t h, unsigned devIdx )
|
double cw::audio::device::sampleRate( handle_t h, unsigned devIdx )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -156,7 +156,7 @@ double cw::audio::device::deviceSampleRate( handle_t h, unsigned devIdx )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned cw::audio::device::deviceFramesPerCycle( handle_t h, unsigned devIdx, bool inputFl )
|
unsigned cw::audio::device::framesPerCycle( handle_t h, unsigned devIdx, bool inputFl )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -164,7 +164,7 @@ unsigned cw::audio::device::deviceFramesPerCycle( handle_t h, unsigned devIdx, b
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
cw::rc_t cw::audio::device::deviceSetup( handle_t h, unsigned devIdx, double sr, unsigned frmPerCycle, cbFunc_t cb, void* cbData )
|
cw::rc_t cw::audio::device::setup( handle_t h, unsigned devIdx, double sr, unsigned frmPerCycle, cbFunc_t cb, void* cbData )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -172,7 +172,7 @@ cw::rc_t cw::audio::device::deviceSetup( handle_t h, unsigned devIdx, double sr
|
|||||||
return kInvalidArgRC;
|
return kInvalidArgRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
cw::rc_t cw::audio::device::deviceStart( handle_t h, unsigned devIdx )
|
cw::rc_t cw::audio::device::start( handle_t h, unsigned devIdx )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -180,7 +180,7 @@ cw::rc_t cw::audio::device::deviceStart( handle_t h, unsigned devIdx )
|
|||||||
return kInvalidArgRC;
|
return kInvalidArgRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
cw::rc_t cw::audio::device::deviceStop( handle_t h, unsigned devIdx )
|
cw::rc_t cw::audio::device::stop( handle_t h, unsigned devIdx )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -188,7 +188,7 @@ cw::rc_t cw::audio::device::deviceStop( handle_t h, unsigned devIdx )
|
|||||||
return kInvalidArgRC;
|
return kInvalidArgRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cw::audio::device::deviceIsStarted(handle_t h, unsigned devIdx )
|
bool cw::audio::device::isStarted(handle_t h, unsigned devIdx )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -196,7 +196,7 @@ bool cw::audio::device::deviceIsStarted(handle_t h, unsigned devIdx )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cw::audio::device::deviceRealTimeReport( handle_t h, unsigned devIdx )
|
void cw::audio::device::realTimeReport( handle_t h, unsigned devIdx )
|
||||||
{
|
{
|
||||||
drv_t* d;
|
drv_t* d;
|
||||||
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
if((d = _indexToDriver(h,devIdx)) != nullptr )
|
||||||
@ -205,13 +205,13 @@ void cw::audio::device::deviceRealTimeReport( handle_t h, unsigned devIdx )
|
|||||||
|
|
||||||
void cw::audio::device::report( handle_t h )
|
void cw::audio::device::report( handle_t h )
|
||||||
{
|
{
|
||||||
for(unsigned i=0; i<deviceCount(h); ++i)
|
for(unsigned i=0; i<count(h); ++i)
|
||||||
{
|
{
|
||||||
cwLogInfo( "%8.1f in:%i (%i) out:%i (%i) %s",
|
cwLogInfo( "%8.1f in:%i (%i) out:%i (%i) %s",
|
||||||
deviceSampleRate(h,i),
|
sampleRate(h,i),
|
||||||
deviceChannelCount(h,i,true), deviceFramesPerCycle(h,i,true),
|
channelCount(h,i,true), framesPerCycle(h,i,true),
|
||||||
deviceChannelCount(h,i,false), deviceFramesPerCycle(h,i,false),
|
channelCount(h,i,false), framesPerCycle(h,i,false),
|
||||||
deviceLabel(h,i));
|
label(h,i));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,36 +22,14 @@
|
|||||||
#ifndef cwAudioDevice_H
|
#ifndef cwAudioDevice_H
|
||||||
#define cwAudioDevice_H
|
#define cwAudioDevice_H
|
||||||
|
|
||||||
|
#include "cwAudioDeviceDecls.h"
|
||||||
|
|
||||||
namespace cw
|
namespace cw
|
||||||
{
|
{
|
||||||
namespace audio
|
namespace audio
|
||||||
{
|
{
|
||||||
namespace device
|
namespace device
|
||||||
{
|
{
|
||||||
typedef float sample_t;
|
|
||||||
|
|
||||||
// audioPacket_t flags
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
kInterleavedApFl = 0x01, // The audio samples are interleaved.
|
|
||||||
kFloatApFl = 0x02 // The audio samples are single precision floating point values.
|
|
||||||
};
|
|
||||||
|
|
||||||
// Audio packet record used by the audioPacket_t callback.
|
|
||||||
// Audio ports send and receive audio using this data structure.
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned devIdx; // device associated with packet
|
|
||||||
unsigned begChIdx; // first device channel
|
|
||||||
unsigned chCnt; // count of channels
|
|
||||||
unsigned audioFramesCnt; // samples per channel (see note below)
|
|
||||||
unsigned bitsPerSample; // bits per sample word
|
|
||||||
unsigned flags; // kInterleavedApFl | kFloatApFl
|
|
||||||
void* audioBytesPtr; // pointer to sample data
|
|
||||||
void* cbArg; // user defined argument passed in via deviceSetup()
|
|
||||||
time::spec_t timeStamp; // Packet time stamp.
|
|
||||||
} audioPacket_t;
|
|
||||||
|
|
||||||
|
|
||||||
// Audio port callback signature.
|
// Audio port callback signature.
|
||||||
// inPktArray[inPktCnt] are full packets of audio coming from the ADC to the application.
|
// inPktArray[inPktCnt] are full packets of audio coming from the ADC to the application.
|
||||||
@ -94,12 +72,12 @@ namespace cw
|
|||||||
|
|
||||||
rc_t registerDriver( handle_t h, driver_t* drv );
|
rc_t registerDriver( handle_t h, driver_t* drv );
|
||||||
|
|
||||||
unsigned deviceCount( handle_t h );
|
unsigned count( handle_t h );
|
||||||
unsigned deviceLabelToIndex( handle_t h, const char* label );
|
unsigned labelToIndex( handle_t h, const char* label );
|
||||||
const char* deviceLabel( handle_t h, unsigned devIdx );
|
const char* label( handle_t h, unsigned devIdx );
|
||||||
unsigned deviceChannelCount( handle_t h, unsigned devIdx, bool inputFl );
|
unsigned channelCount( handle_t h, unsigned devIdx, bool inputFl );
|
||||||
double deviceSampleRate( handle_t h, unsigned devIdx );
|
double sampleRate( handle_t h, unsigned devIdx );
|
||||||
unsigned deviceFramesPerCycle( handle_t h, unsigned devIdx, bool inputFl );
|
unsigned framesPerCycle( handle_t h, unsigned devIdx, bool inputFl );
|
||||||
|
|
||||||
// Configure a device.
|
// Configure a device.
|
||||||
// All devices must be setup before they are started.
|
// All devices must be setup before they are started.
|
||||||
@ -111,7 +89,7 @@ namespace cw
|
|||||||
// If the device is started when this function is called then it will be
|
// If the device is started when this function is called then it will be
|
||||||
// automatically stopped and then restarted following the reconfiguration.
|
// automatically stopped and then restarted following the reconfiguration.
|
||||||
// If the reconfiguration fails then the device may not be restared.
|
// If the reconfiguration fails then the device may not be restared.
|
||||||
rc_t deviceSetup(
|
rc_t setup(
|
||||||
handle_t h,
|
handle_t h,
|
||||||
unsigned devIdx,
|
unsigned devIdx,
|
||||||
double sr,
|
double sr,
|
||||||
@ -119,10 +97,10 @@ namespace cw
|
|||||||
cbFunc_t cb,
|
cbFunc_t cb,
|
||||||
void* cbData );
|
void* cbData );
|
||||||
|
|
||||||
rc_t deviceStart( handle_t h, unsigned devIdx );
|
rc_t start( handle_t h, unsigned devIdx );
|
||||||
rc_t deviceStop( handle_t h, unsigned devIdx );
|
rc_t stop( handle_t h, unsigned devIdx );
|
||||||
bool deviceIsStarted( handle_t h, unsigned devIdx );
|
bool isStarted( handle_t h, unsigned devIdx );
|
||||||
void deviceRealTimeReport( handle_t h, unsigned devIdx );
|
void realTimeReport( handle_t h, unsigned devIdx );
|
||||||
|
|
||||||
void report( handle_t h );
|
void report( handle_t h );
|
||||||
}
|
}
|
||||||
|
36
cwAudioDeviceDecls.h
Normal file
36
cwAudioDeviceDecls.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef cwAudioDeviceDefs_H
|
||||||
|
#define cwAudioDeviceDefs_H
|
||||||
|
namespace cw
|
||||||
|
{
|
||||||
|
namespace audio
|
||||||
|
{
|
||||||
|
namespace device
|
||||||
|
{
|
||||||
|
typedef float sample_t;
|
||||||
|
|
||||||
|
// audioPacket_t flags
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kInterleavedApFl = 0x01, // The audio samples are interleaved.
|
||||||
|
kFloatApFl = 0x02 // The audio samples are single precision floating point values.
|
||||||
|
};
|
||||||
|
|
||||||
|
// Audio packet record used by the audioPacket_t callback.
|
||||||
|
// Audio ports send and receive audio using this data structure.
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned devIdx; // device associated with packet
|
||||||
|
unsigned begChIdx; // first device channel
|
||||||
|
unsigned chCnt; // count of channels
|
||||||
|
unsigned audioFramesCnt; // samples per channel (see note below)
|
||||||
|
unsigned bitsPerSample; // bits per sample word
|
||||||
|
unsigned flags; // kInterleavedApFl | kFloatApFl
|
||||||
|
void* audioBytesPtr; // pointer to sample data
|
||||||
|
void* cbArg; // user defined argument passed in via deviceSetup()
|
||||||
|
time::spec_t timeStamp; // Packet time stamp.
|
||||||
|
} audioPacket_t;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
@ -25,11 +25,7 @@ namespace cw
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
unsigned bufCnt; // 2=double buffering 3=triple buffering
|
unsigned bufCnt; // 2=double buffering 3=triple buffering
|
||||||
unsigned chIdx; // first test channel
|
|
||||||
//unsigned chCnt; // count of channels to test
|
|
||||||
unsigned framesPerCycle; // DSP frames per cycle
|
unsigned framesPerCycle; // DSP frames per cycle
|
||||||
unsigned bufFrmCnt; // count of DSP frames used by the audio buffer (bufCnt * framesPerCycle)
|
|
||||||
unsigned bufSmpCnt; // count of samples used by the audio buffer (chCnt * bufFrmCnt)
|
|
||||||
unsigned inDevIdx; // input device index
|
unsigned inDevIdx; // input device index
|
||||||
unsigned outDevIdx; // output device index
|
unsigned outDevIdx; // output device index
|
||||||
double srate; // audio sample rate
|
double srate; // audio sample rate
|
||||||
@ -51,8 +47,6 @@ namespace cw
|
|||||||
"-r <srate> -c <chcnt> -b <bufcnt> -f <frmcnt> -i <idevidx> -o <odevidx> -t -p -h \n"
|
"-r <srate> -c <chcnt> -b <bufcnt> -f <frmcnt> -i <idevidx> -o <odevidx> -t -p -h \n"
|
||||||
"\n"
|
"\n"
|
||||||
"-r <srate> = sample rate\n"
|
"-r <srate> = sample rate\n"
|
||||||
"-a <chidx> = first channel\n"
|
|
||||||
"-c <chcnt> = audio channels\n"
|
|
||||||
"-b <bufcnt> = count of buffers\n"
|
"-b <bufcnt> = count of buffers\n"
|
||||||
"-f <frmcnt> = count of samples per buffer\n"
|
"-f <frmcnt> = count of samples per buffer\n"
|
||||||
"-i <idevidx> = input device index\n"
|
"-i <idevidx> = input device index\n"
|
||||||
@ -119,16 +113,10 @@ cw::rc_t cw::audio::device::test( int argc, const char** argv )
|
|||||||
if( _cmApGetOpt(argc,argv,"-h",0,true) )
|
if( _cmApGetOpt(argc,argv,"-h",0,true) )
|
||||||
_cmApPrintUsage();
|
_cmApPrintUsage();
|
||||||
|
|
||||||
|
runFl = _cmApGetOpt(argc,argv,"-p",0,true) ? false : true;
|
||||||
runFl = _cmApGetOpt(argc,argv,"-p",0,true)?false:true;
|
|
||||||
r.srate = _cmApGetOpt(argc,argv,"-r",44100);
|
r.srate = _cmApGetOpt(argc,argv,"-r",44100);
|
||||||
//r.chIdx = _cmApGetOpt(argc,argv,"-a",0);
|
|
||||||
//r.chCnt = _cmApGetOpt(argc,argv,"-c",2);
|
|
||||||
r.bufCnt = _cmApGetOpt(argc,argv,"-b",3);
|
r.bufCnt = _cmApGetOpt(argc,argv,"-b",3);
|
||||||
r.framesPerCycle = _cmApGetOpt(argc,argv,"-f",512);
|
r.framesPerCycle = _cmApGetOpt(argc,argv,"-f",512);
|
||||||
//r.bufFrmCnt = (r.bufCnt*r.framesPerCycle);
|
|
||||||
//r.bufSmpCnt = (r.chCnt * r.bufFrmCnt);
|
|
||||||
//r.logCnt = 100;
|
|
||||||
r.meterMs = 50;
|
r.meterMs = 50;
|
||||||
|
|
||||||
r.inDevIdx = _cmGlobalInDevIdx = _cmApGetOpt(argc,argv,"-i",0);
|
r.inDevIdx = _cmGlobalInDevIdx = _cmApGetOpt(argc,argv,"-i",0);
|
||||||
@ -161,9 +149,9 @@ cw::rc_t cw::audio::device::test( int argc, const char** argv )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// report the current audio device configuration
|
// report the current audio device configuration
|
||||||
for(i=0; i<deviceCount(h); ++i)
|
for(i=0; i<device::count(h); ++i)
|
||||||
{
|
{
|
||||||
cwLogInfo("%i [in: chs=%i frames=%i] [out: chs=%i frames=%i] srate:%8.1f %s",i,deviceChannelCount(h,i,true),deviceFramesPerCycle(h,i,true),deviceChannelCount(h,i,false),deviceFramesPerCycle(h,i,false),deviceSampleRate(h,i),deviceLabel(h,i));
|
cwLogInfo("%i [in: chs=%i frames=%i] [out: chs=%i frames=%i] srate:%8.1f %s",i,device::channelCount(h,i,true),framesPerCycle(h,i,true),channelCount(h,i,false),framesPerCycle(h,i,false),sampleRate(h,i),label(h,i));
|
||||||
}
|
}
|
||||||
|
|
||||||
// report the current audio devices using the audio port interface function
|
// report the current audio devices using the audio port interface function
|
||||||
@ -172,29 +160,29 @@ cw::rc_t cw::audio::device::test( int argc, const char** argv )
|
|||||||
if( runFl )
|
if( runFl )
|
||||||
{
|
{
|
||||||
// initialize the audio bufer
|
// initialize the audio bufer
|
||||||
buf::create( r.audioBufH, deviceCount(h), r.meterMs );
|
buf::create( r.audioBufH, device::count(h), r.meterMs );
|
||||||
|
|
||||||
// setup the buffer for the output device
|
// setup the buffer for the output device
|
||||||
buf::setup( r.audioBufH, r.outDevIdx, r.srate, r.framesPerCycle, r.bufCnt, deviceChannelCount(h,r.outDevIdx,true), r.framesPerCycle, deviceChannelCount(h,r.outDevIdx,false), r.framesPerCycle );
|
buf::setup( r.audioBufH, r.outDevIdx, r.srate, r.framesPerCycle, r.bufCnt, channelCount(h,r.outDevIdx,true), r.framesPerCycle, channelCount(h,r.outDevIdx,false), r.framesPerCycle );
|
||||||
|
|
||||||
// setup the buffer for the input device
|
// setup the buffer for the input device
|
||||||
//if( r.inDevIdx != r.outDevIdx )
|
//if( r.inDevIdx != r.outDevIdx )
|
||||||
buf::setup( r.audioBufH, r.inDevIdx, r.srate, r.framesPerCycle, r.bufCnt, deviceChannelCount(h,r.inDevIdx,true), r.framesPerCycle, deviceChannelCount(h,r.inDevIdx,false), r.framesPerCycle );
|
buf::setup( r.audioBufH, r.inDevIdx, r.srate, r.framesPerCycle, r.bufCnt, channelCount(h,r.inDevIdx,true), r.framesPerCycle, channelCount(h,r.inDevIdx,false), r.framesPerCycle );
|
||||||
|
|
||||||
// setup an output device
|
// setup an output device
|
||||||
if(deviceSetup(h, r.outDevIdx,r.srate,r.framesPerCycle,_cmApPortCb2,&r) != kOkRC )
|
if(setup(h, r.outDevIdx,r.srate,r.framesPerCycle,_cmApPortCb2,&r) != kOkRC )
|
||||||
cwLogInfo("Out device setup failed.");
|
cwLogInfo("Out device setup failed.");
|
||||||
else
|
else
|
||||||
// setup an input device
|
// setup an input device
|
||||||
if( deviceSetup(h, r.inDevIdx,r.srate,r.framesPerCycle,_cmApPortCb2,&r) != kOkRC )
|
if( setup(h, r.inDevIdx,r.srate,r.framesPerCycle,_cmApPortCb2,&r) != kOkRC )
|
||||||
cwLogInfo("In device setup failed.");
|
cwLogInfo("In device setup failed.");
|
||||||
else
|
else
|
||||||
// start the input device
|
// start the input device
|
||||||
if( deviceStart(h, r.inDevIdx) != kOkRC )
|
if( start(h, r.inDevIdx) != kOkRC )
|
||||||
cwLogInfo("In device start failed.");
|
cwLogInfo("In device start failed.");
|
||||||
else
|
else
|
||||||
// start the output device
|
// start the output device
|
||||||
if( deviceStart(h, r.outDevIdx) != kOkRC )
|
if( start(h, r.outDevIdx) != kOkRC )
|
||||||
cwLogInfo("Out Device start failed.");
|
cwLogInfo("Out Device start failed.");
|
||||||
else
|
else
|
||||||
cwLogInfo("Setup complete!");
|
cwLogInfo("Setup complete!");
|
||||||
@ -208,7 +196,7 @@ cw::rc_t cw::audio::device::test( int argc, const char** argv )
|
|||||||
char c;
|
char c;
|
||||||
while((c=getchar()) != 'q')
|
while((c=getchar()) != 'q')
|
||||||
{
|
{
|
||||||
deviceRealTimeReport(h, r.outDevIdx );
|
realTimeReport(h, r.outDevIdx );
|
||||||
|
|
||||||
switch(c)
|
switch(c)
|
||||||
{
|
{
|
||||||
@ -241,13 +229,13 @@ cw::rc_t cw::audio::device::test( int argc, const char** argv )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// stop the input device
|
// stop the input device
|
||||||
if( deviceIsStarted(h,r.inDevIdx) )
|
if( isStarted(h,r.inDevIdx) )
|
||||||
if( deviceStop(h,r.inDevIdx) != kOkRC )
|
if( stop(h,r.inDevIdx) != kOkRC )
|
||||||
cwLogInfo("In device stop failed.");
|
cwLogInfo("In device stop failed.");
|
||||||
|
|
||||||
// stop the output device
|
// stop the output device
|
||||||
if( deviceIsStarted(h,r.outDevIdx) )
|
if( isStarted(h,r.outDevIdx) )
|
||||||
if( deviceStop(h,r.outDevIdx) != kOkRC )
|
if( stop(h,r.outDevIdx) != kOkRC )
|
||||||
cwLogInfo("Out device stop failed.");
|
cwLogInfo("Out device stop failed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
27
cwMidi.cpp
27
cwMidi.cpp
@ -2,6 +2,7 @@
|
|||||||
#include "cwLog.h"
|
#include "cwLog.h"
|
||||||
#include "cwCommonImpl.h"
|
#include "cwCommonImpl.h"
|
||||||
#include "cwMem.h"
|
#include "cwMem.h"
|
||||||
|
#include "cwTime.h"
|
||||||
#include "cwMidi.h"
|
#include "cwMidi.h"
|
||||||
|
|
||||||
namespace cw {
|
namespace cw {
|
||||||
@ -9,8 +10,8 @@ namespace cw {
|
|||||||
|
|
||||||
typedef struct statusDesc_str
|
typedef struct statusDesc_str
|
||||||
{
|
{
|
||||||
byte_t status;
|
uint8_t status;
|
||||||
byte_t byteCnt;
|
uint8_t byteCnt;
|
||||||
const char* label;
|
const char* label;
|
||||||
} statusDesc_t;
|
} statusDesc_t;
|
||||||
|
|
||||||
@ -84,7 +85,7 @@ namespace cw {
|
|||||||
|
|
||||||
//====================================================================================================
|
//====================================================================================================
|
||||||
|
|
||||||
const char* cw::midi::statusToLabel( byte_t status )
|
const char* cw::midi::statusToLabel( uint8_t status )
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
@ -102,7 +103,7 @@ const char* cw::midi::statusToLabel( byte_t status )
|
|||||||
return _statusDescArray[i].label;
|
return _statusDescArray[i].label;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* cw::midi::metaStatusToLabel( byte_t metaStatus )
|
const char* cw::midi::metaStatusToLabel( uint8_t metaStatus )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for(i=0; _metaStatusDescArray[i].status != kInvalidMetaMdId; ++i)
|
for(i=0; _metaStatusDescArray[i].status != kInvalidMetaMdId; ++i)
|
||||||
@ -112,7 +113,7 @@ const char* cw::midi::metaStatusToLabel( byte_t metaStatus )
|
|||||||
return _metaStatusDescArray[i].label;
|
return _metaStatusDescArray[i].label;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* cw::midi::pedalLabel( byte_t d0 )
|
const char* cw::midi::pedalLabel( uint8_t d0 )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for(i=0; _pedalLabel[i].status != kInvalidMidiByte; ++i)
|
for(i=0; _pedalLabel[i].status != kInvalidMidiByte; ++i)
|
||||||
@ -122,7 +123,7 @@ const char* cw::midi::pedalLabel( byte_t d0 )
|
|||||||
return _pedalLabel[i].label;
|
return _pedalLabel[i].label;
|
||||||
}
|
}
|
||||||
|
|
||||||
cw::midi::byte_t cw::midi::statusToByteCount( byte_t status )
|
uint8_t cw::midi::statusToByteCount( uint8_t status )
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
@ -142,7 +143,7 @@ cw::midi::byte_t cw::midi::statusToByteCount( byte_t status )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned cw::midi::to14Bits( byte_t d0, byte_t d1 )
|
unsigned cw::midi::to14Bits( uint8_t d0, uint8_t d1 )
|
||||||
{
|
{
|
||||||
unsigned val = d0;
|
unsigned val = d0;
|
||||||
val <<= 7;
|
val <<= 7;
|
||||||
@ -150,26 +151,26 @@ unsigned cw::midi::to14Bits( byte_t d0, byte_t d1 )
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cw::midi::split14Bits( unsigned v, byte_t& d0Ref, byte_t& d1Ref )
|
void cw::midi::split14Bits( unsigned v, uint8_t& d0Ref, uint8_t& d1Ref )
|
||||||
{
|
{
|
||||||
d0Ref = (v & 0x3f80) >> 7;
|
d0Ref = (v & 0x3f80) >> 7;
|
||||||
d1Ref = v & 0x7f;
|
d1Ref = v & 0x7f;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cw::midi::toPbend( byte_t d0, byte_t d1 )
|
int cw::midi::toPbend( uint8_t d0, uint8_t d1 )
|
||||||
{
|
{
|
||||||
int v = to14Bits(d0,d1);
|
int v = to14Bits(d0,d1);
|
||||||
return v - 8192;
|
return v - 8192;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cw::midi::splitPbend( int v, byte_t& d0Ref, byte_t& d1Ref )
|
void cw::midi::splitPbend( int v, uint8_t& d0Ref, uint8_t& d1Ref )
|
||||||
{
|
{
|
||||||
unsigned uv = v + 8192;
|
unsigned uv = v + 8192;
|
||||||
split14Bits(uv,d0Ref,d1Ref);
|
split14Bits(uv,d0Ref,d1Ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
//====================================================================================================
|
//====================================================================================================
|
||||||
const char* cw::midi::midiToSciPitch( byte_t pitch, char* label, unsigned labelCharCnt )
|
const char* cw::midi::midiToSciPitch( uint8_t pitch, char* label, unsigned labelCharCnt )
|
||||||
{
|
{
|
||||||
static char buf[ kMidiSciPitchCharCnt ];
|
static char buf[ kMidiSciPitchCharCnt ];
|
||||||
|
|
||||||
@ -214,7 +215,7 @@ const char* cw::midi::midiToSciPitch( byte_t pitch, char* label, unsigned la
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
cw::midi::byte_t cw::midi::sciPitchToMidiPitch( char pitch, int acc, int octave )
|
uint8_t cw::midi::sciPitchToMidiPitch( char pitch, int acc, int octave )
|
||||||
{
|
{
|
||||||
int idx = -1;
|
int idx = -1;
|
||||||
|
|
||||||
@ -240,7 +241,7 @@ cw::midi::byte_t cw::midi::sciPitchToMidiPitch( char pitch, int acc, int octa
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cw::midi::byte_t cw::midi::sciPitchToMidi( const char* sciPitchStr )
|
uint8_t cw::midi::sciPitchToMidi( const char* sciPitchStr )
|
||||||
{
|
{
|
||||||
const char* cp = sciPitchStr;
|
const char* cp = sciPitchStr;
|
||||||
bool sharpFl = false;
|
bool sharpFl = false;
|
||||||
|
44
cwMidi.h
44
cwMidi.h
@ -77,8 +77,6 @@ namespace cw
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef unsigned char byte_t;
|
|
||||||
typedef struct timespec timestamp_t;
|
|
||||||
|
|
||||||
//===============================================================================================
|
//===============================================================================================
|
||||||
// Utility Functions
|
// Utility Functions
|
||||||
@ -103,42 +101,24 @@ namespace cw
|
|||||||
template< typename T> bool isPedalDown( T s, T d0, T d1 ) { return ( cmMidiIsPedal(s,d0) && (d1)>=64 ); }
|
template< typename T> bool isPedalDown( T s, T d0, T d1 ) { return ( cmMidiIsPedal(s,d0) && (d1)>=64 ); }
|
||||||
template< typename T> bool isPedalUp( T s, T d0, T d1 ) { return ( cmMidiIsPedal(s,d0) && (d1)<64 ); }
|
template< typename T> bool isPedalUp( T s, T d0, T d1 ) { return ( cmMidiIsPedal(s,d0) && (d1)<64 ); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const char* statusToLabel( byte_t status );
|
const char* statusToLabel( uint8_t status );
|
||||||
const char* metaStatusToLabel( byte_t metaStatus );
|
const char* metaStatusToLabel( uint8_t metaStatus );
|
||||||
const char* pedalLabel( byte_t d0 );
|
const char* pedalLabel( uint8_t d0 );
|
||||||
|
|
||||||
// Returns kInvalidMidiByte if status is not a valid status byte
|
// Returns kInvalidMidiByte if status is not a valid status byte
|
||||||
byte_t statusToByteCount( byte_t status );
|
uint8_t statusToByteCount( uint8_t status );
|
||||||
|
|
||||||
unsigned to14Bits( byte_t d0, byte_t d1 );
|
unsigned to14Bits( uint8_t d0, uint8_t d1 );
|
||||||
void split14Bits( unsigned v, byte_t& d0Ref, byte_t& d1Ref );
|
void split14Bits( unsigned v, uint8_t& d0Ref, uint8_t& d1Ref );
|
||||||
int toPbend( byte_t d0, byte_t d1 );
|
int toPbend( uint8_t d0, uint8_t d1 );
|
||||||
void splitPbend( int v, byte_t& d0Ref, byte_t& d1Ref );
|
void splitPbend( int v, uint8_t& d0Ref, uint8_t& d1Ref );
|
||||||
|
|
||||||
//===============================================================================================
|
//===============================================================================================
|
||||||
// MIDI Communication data types
|
// MIDI Communication data types
|
||||||
//
|
//
|
||||||
|
|
||||||
typedef struct msg_str
|
|
||||||
{
|
|
||||||
//unsigned deltaUs; // time since last MIDI msg in microseconds
|
|
||||||
timestamp_t timeStamp;
|
|
||||||
byte_t status; // midi status byte
|
|
||||||
byte_t d0; // midi data byte 0
|
|
||||||
byte_t d1; // midi data byte 1
|
|
||||||
byte_t pad;
|
|
||||||
} msg_t;
|
|
||||||
|
|
||||||
typedef struct packet_str
|
|
||||||
{
|
|
||||||
void* cbDataPtr; // application supplied reference value from mdParserCreate()
|
|
||||||
unsigned devIdx; // the device the msg originated from
|
|
||||||
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
|
|
||||||
byte_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
|
|
||||||
} packet_t;
|
|
||||||
|
|
||||||
// Notes: If the sys-ex message can be contained in a single msg then
|
// Notes: If the sys-ex message can be contained in a single msg then
|
||||||
// then the first msg byte is kSysExMdId and the last is kSysComEoxMdId.
|
// then the first msg byte is kSysExMdId and the last is kSysComEoxMdId.
|
||||||
@ -150,12 +130,12 @@ namespace cw
|
|||||||
// buffer is returned. If label[] is given the it
|
// buffer is returned. If label[] is given the it
|
||||||
// should have at least 5 (kMidiPitchCharCnt) char's (including the terminating zero).
|
// should have at least 5 (kMidiPitchCharCnt) char's (including the terminating zero).
|
||||||
// If 'pitch' is outside of the range 0-127 then a blank string is returned.
|
// If 'pitch' is outside of the range 0-127 then a blank string is returned.
|
||||||
const char* midiToSciPitch( byte_t pitch, char* label, unsigned labelCharCnt );
|
const char* midiToSciPitch( uint8_t pitch, char* label, unsigned labelCharCnt );
|
||||||
|
|
||||||
// Convert a scientific pitch to MIDI pitch. acc == 1 == sharp, acc == -1 == flat.
|
// Convert a scientific pitch to MIDI pitch. acc == 1 == sharp, acc == -1 == flat.
|
||||||
// The pitch character must be in the range 'A' to 'G'. Upper or lower case is valid.
|
// The pitch character must be in the range 'A' to 'G'. Upper or lower case is valid.
|
||||||
// Return kInvalidMidiPitch if the arguments are not valid.
|
// Return kInvalidMidiPitch if the arguments are not valid.
|
||||||
byte_t sciPitchToMidiPitch( char pitch, int acc, int octave );
|
uint8_t sciPitchToMidiPitch( char pitch, int acc, int octave );
|
||||||
|
|
||||||
|
|
||||||
// Scientific pitch string: [A-Ga-g][#b][#] where # may be -1 to 9.
|
// Scientific pitch string: [A-Ga-g][#b][#] where # may be -1 to 9.
|
||||||
@ -163,7 +143,7 @@ namespace cw
|
|||||||
// scientific pitch string. This function will convert C-1 to G9 to
|
// scientific pitch string. This function will convert C-1 to G9 to
|
||||||
// valid MIDI pitch values 0 to 127. Scientific pitch strings outside
|
// valid MIDI pitch values 0 to 127. Scientific pitch strings outside
|
||||||
// of this range will be returned as kInvalidMidiPitch.
|
// of this range will be returned as kInvalidMidiPitch.
|
||||||
byte_t sciPitchToMidi( const char* sciPitchStr );
|
uint8_t sciPitchToMidi( const char* sciPitchStr );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#include "cwLog.h"
|
#include "cwLog.h"
|
||||||
#include "cwCommonImpl.h"
|
#include "cwCommonImpl.h"
|
||||||
#include "cwMem.h"
|
#include "cwMem.h"
|
||||||
#include "cwMidi.h"
|
|
||||||
#include "cwTime.h"
|
#include "cwTime.h"
|
||||||
|
#include "cwMidi.h"
|
||||||
#include "cwTextBuf.h"
|
#include "cwTextBuf.h"
|
||||||
#include "cwMidiPort.h"
|
#include "cwMidiPort.h"
|
||||||
#include "cwThread.h"
|
#include "cwThread.h"
|
||||||
@ -111,7 +111,7 @@ namespace cw
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void _cmMpSplit14Bits( unsigned v, byte_t* d0, byte_t* d1 )
|
void _cmMpSplit14Bits( unsigned v, uint8_t* d0, uint8_t* d1 )
|
||||||
{
|
{
|
||||||
*d0 = (v & 0x3f80) >> 7;
|
*d0 = (v & 0x3f80) >> 7;
|
||||||
*d1 = v & 0x7f;
|
*d1 = v & 0x7f;
|
||||||
@ -156,9 +156,9 @@ namespace cw
|
|||||||
|
|
||||||
unsigned microSecs1 = (ev->time.time.tv_sec * 1000000) + (ev->time.time.tv_nsec/1000);
|
unsigned microSecs1 = (ev->time.time.tv_sec * 1000000) + (ev->time.time.tv_nsec/1000);
|
||||||
//unsigned deltaMicroSecs = p->prvTimeMicroSecs==0 ? 0 : microSecs1 - p->prvTimeMicroSecs;
|
//unsigned deltaMicroSecs = p->prvTimeMicroSecs==0 ? 0 : microSecs1 - p->prvTimeMicroSecs;
|
||||||
byte_t d0 = 0xff;
|
uint8_t d0 = 0xff;
|
||||||
byte_t d1 = 0xff;
|
uint8_t d1 = 0xff;
|
||||||
byte_t status = 0;
|
uint8_t status = 0;
|
||||||
|
|
||||||
switch(ev->type)
|
switch(ev->type)
|
||||||
{
|
{
|
||||||
@ -244,7 +244,7 @@ namespace cw
|
|||||||
|
|
||||||
if( status != 0 )
|
if( status != 0 )
|
||||||
{
|
{
|
||||||
byte_t ch = ev->data.note.channel;
|
uint8_t ch = ev->data.note.channel;
|
||||||
time::spec_t ts;
|
time::spec_t ts;
|
||||||
ts.tv_sec = p->baseTimeStamp.tv_sec + ev->time.time.tv_sec;
|
ts.tv_sec = p->baseTimeStamp.tv_sec + ev->time.time.tv_sec;
|
||||||
ts.tv_nsec = p->baseTimeStamp.tv_nsec + ev->time.time.tv_nsec;
|
ts.tv_nsec = p->baseTimeStamp.tv_nsec + ev->time.time.tv_nsec;
|
||||||
@ -709,7 +709,7 @@ const char* cw::midi::device::portName( handle_t h, unsigned devIdx, unsign
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
cw::rc_t cw::midi::device::send( handle_t h, unsigned devIdx, unsigned portIdx, byte_t status, byte_t d0, byte_t d1 )
|
cw::rc_t cw::midi::device::send( handle_t h, unsigned devIdx, unsigned portIdx, uint8_t status, uint8_t d0, uint8_t d1 )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
snd_seq_event_t ev;
|
snd_seq_event_t ev;
|
||||||
@ -797,7 +797,7 @@ cw::rc_t cw::midi::device::send( handle_t h, unsigned devIdx, unsigned portIdx,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
cw::rc_t cw::midi::device::sendData( handle_t h, unsigned devIdx, unsigned portIdx, const byte_t* dataPtr, unsigned byteCnt )
|
cw::rc_t cw::midi::device::sendData( handle_t h, unsigned devIdx, unsigned portIdx, const uint8_t* dataPtr, unsigned byteCnt )
|
||||||
{
|
{
|
||||||
return cwLogError(kInvalidOpRC,"cmMpDeviceSendData() has not yet been implemented for ALSA.");
|
return cwLogError(kInvalidOpRC,"cmMpDeviceSendData() has not yet been implemented for ALSA.");
|
||||||
}
|
}
|
||||||
|
29
cwMidiDecls.h
Normal file
29
cwMidiDecls.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#ifndef cwMidiDecls_H
|
||||||
|
#define cwMidiDecls_H
|
||||||
|
|
||||||
|
namespace cw
|
||||||
|
{
|
||||||
|
namespace midi
|
||||||
|
{
|
||||||
|
typedef struct msg_str
|
||||||
|
{
|
||||||
|
//unsigned deltaUs; // time since last MIDI msg in microseconds
|
||||||
|
time::spec_t timeStamp;
|
||||||
|
uint8_t status; // midi status byte
|
||||||
|
uint8_t d0; // midi data byte 0
|
||||||
|
uint8_t d1; // midi data byte 1
|
||||||
|
uint8_t pad;
|
||||||
|
} msg_t;
|
||||||
|
|
||||||
|
typedef struct packet_str
|
||||||
|
{
|
||||||
|
void* cbDataPtr; // application supplied reference value from mdParserCreate()
|
||||||
|
unsigned devIdx; // the device the msg originated from
|
||||||
|
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
|
||||||
|
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
|
||||||
|
} packet_t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
@ -2,8 +2,8 @@
|
|||||||
#include "cwLog.h"
|
#include "cwLog.h"
|
||||||
#include "cwCommonImpl.h"
|
#include "cwCommonImpl.h"
|
||||||
#include "cwMem.h"
|
#include "cwMem.h"
|
||||||
#include "cwMidi.h"
|
|
||||||
#include "cwTime.h"
|
#include "cwTime.h"
|
||||||
|
#include "cwMidi.h"
|
||||||
#include "cwTextBuf.h"
|
#include "cwTextBuf.h"
|
||||||
|
|
||||||
#include "cwMidiPort.h"
|
#include "cwMidiPort.h"
|
||||||
@ -43,11 +43,11 @@ namespace cw
|
|||||||
|
|
||||||
unsigned state; // parser state id
|
unsigned state; // parser state id
|
||||||
unsigned errCnt; // accumlated error count
|
unsigned errCnt; // accumlated error count
|
||||||
byte_t status; // running status
|
uint8_t status; // running status
|
||||||
byte_t data0; // data byte 0
|
uint8_t data0; // data byte 0
|
||||||
unsigned dataCnt; // data byte cnt for current status
|
unsigned dataCnt; // data byte cnt for current status
|
||||||
unsigned dataIdx; // index (0 or 1) of next data byte
|
unsigned dataIdx; // index (0 or 1) of next data byte
|
||||||
byte_t* buf; // output buffer
|
uint8_t* buf; // output buffer
|
||||||
unsigned bufByteCnt; // output buffer byte cnt
|
unsigned bufByteCnt; // output buffer byte cnt
|
||||||
unsigned bufIdx; // next output buffer index
|
unsigned bufIdx; // next output buffer index
|
||||||
unsigned msgCnt; // count of channel messages in the buffer
|
unsigned msgCnt; // count of channel messages in the buffer
|
||||||
@ -95,7 +95,7 @@ namespace cw
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _cmMpParserStoreChMsg( parser_t* p, const time::spec_t* timeStamp, byte_t d )
|
void _cmMpParserStoreChMsg( parser_t* p, const time::spec_t* timeStamp, uint8_t d )
|
||||||
{
|
{
|
||||||
// if there is not enough room left in the buffer then transmit
|
// if there is not enough room left in the buffer then transmit
|
||||||
// the current messages
|
// the current messages
|
||||||
@ -176,7 +176,7 @@ cw::rc_t cw::midi::parser::create( handle_t& hRef, unsigned devIdx, unsigned por
|
|||||||
//p->cbChain->cbDataPtr = cbDataPtr;
|
//p->cbChain->cbDataPtr = cbDataPtr;
|
||||||
//p->cbChain->linkPtr = NULL;
|
//p->cbChain->linkPtr = NULL;
|
||||||
p->cbChain = NULL;
|
p->cbChain = NULL;
|
||||||
p->buf = mem::allocZ<byte_t>( bufByteCnt );
|
p->buf = mem::allocZ<uint8_t>( bufByteCnt );
|
||||||
p->bufByteCnt = bufByteCnt;
|
p->bufByteCnt = bufByteCnt;
|
||||||
p->bufIdx = 0;
|
p->bufIdx = 0;
|
||||||
p->msgCnt = 0;
|
p->msgCnt = 0;
|
||||||
@ -227,7 +227,7 @@ unsigned cw::midi::parser::errorCount( handle_t h )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void cw::midi::parser::parseMidiData( handle_t h, const time::spec_t* timeStamp, const byte_t* iBuf, unsigned iByteCnt )
|
void cw::midi::parser::parseMidiData( handle_t h, const time::spec_t* timeStamp, const uint8_t* iBuf, unsigned iByteCnt )
|
||||||
{
|
{
|
||||||
|
|
||||||
parser_t* p = _handleToPtr(h);
|
parser_t* p = _handleToPtr(h);
|
||||||
@ -235,8 +235,8 @@ void cw::midi::parser::parseMidiData( handle_t h, const time::spec_t* timeStamp,
|
|||||||
if( p == NULL )
|
if( p == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const byte_t* ip = iBuf;
|
const uint8_t* ip = iBuf;
|
||||||
const byte_t* ep = iBuf + iByteCnt;
|
const uint8_t* ep = iBuf + iByteCnt;
|
||||||
|
|
||||||
for(; ip < ep; ++ip )
|
for(; ip < ep; ++ip )
|
||||||
{
|
{
|
||||||
@ -354,11 +354,11 @@ void cw::midi::parser::parseMidiData( handle_t h, const time::spec_t* timeStamp,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cw::rc_t cw::midi::parser::midiTriple( handle_t h, const time::spec_t* timeStamp, byte_t status, byte_t d0, byte_t d1 )
|
cw::rc_t cw::midi::parser::midiTriple( handle_t h, const time::spec_t* timeStamp, uint8_t status, uint8_t d0, uint8_t d1 )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
parser_t* p = _handleToPtr(h);
|
parser_t* p = _handleToPtr(h);
|
||||||
byte_t mb = 0xff; // a midi triple may never have a status of 0xff
|
uint8_t mb = 0xff; // a midi triple may never have a status of 0xff
|
||||||
|
|
||||||
if( d0 == 0xff )
|
if( d0 == 0xff )
|
||||||
p->dataCnt = 0;
|
p->dataCnt = 0;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#ifndef cwMidiPort_H
|
#ifndef cwMidiPort_H
|
||||||
#define cwMidiPort_H
|
#define cwMidiPort_H
|
||||||
|
|
||||||
|
#include "cwMidiDecls.h"
|
||||||
|
|
||||||
namespace cw
|
namespace cw
|
||||||
{
|
{
|
||||||
@ -37,13 +38,13 @@ namespace cw
|
|||||||
rc_t create( handle_t& hRef, unsigned devIdx, unsigned portIdx, cbFunc_t cbFunc, void* cbArg, unsigned bufByteCnt );
|
rc_t create( handle_t& hRef, unsigned devIdx, unsigned portIdx, cbFunc_t cbFunc, void* cbArg, unsigned bufByteCnt );
|
||||||
rc_t destroy( handle_t& hRef );
|
rc_t destroy( handle_t& hRef );
|
||||||
unsigned errorCount( handle_t h );
|
unsigned errorCount( handle_t h );
|
||||||
void parseMidiData( handle_t h, const time::spec_t* timestamp, const byte_t* buf, unsigned bufByteCnt );
|
void parseMidiData( handle_t h, const time::spec_t* timestamp, const uint8_t* buf, unsigned bufByteCnt );
|
||||||
|
|
||||||
// The following two functions are intended to be used togetther.
|
// The following two functions are intended to be used togetther.
|
||||||
// Use midiTriple() to insert pre-parsed msg's to the output buffer,
|
// Use midiTriple() to insert pre-parsed msg's to the output buffer,
|
||||||
// and then use transmit() to send the buffer via the parsers callback function.
|
// and then use transmit() to send the buffer via the parsers callback function.
|
||||||
// Set the data bytes to 0xff if they are not used by the message.
|
// Set the data bytes to 0xff if they are not used by the message.
|
||||||
rc_t midiTriple( handle_t h, const time::spec_t* timestamp, byte_t status, byte_t d0, byte_t d1 );
|
rc_t midiTriple( handle_t h, const time::spec_t* timestamp, uint8_t status, uint8_t d0, uint8_t d1 );
|
||||||
rc_t transmit( handle_t h );
|
rc_t transmit( handle_t h );
|
||||||
|
|
||||||
// Install/Remove additional callbacks.
|
// Install/Remove additional callbacks.
|
||||||
@ -79,8 +80,8 @@ namespace cw
|
|||||||
unsigned portCount( handle_t h, unsigned devIdx, unsigned flags );
|
unsigned portCount( handle_t h, unsigned devIdx, unsigned flags );
|
||||||
const char* portName( handle_t h, unsigned devIdx, unsigned flags, unsigned portIdx );
|
const char* portName( handle_t h, unsigned devIdx, unsigned flags, unsigned portIdx );
|
||||||
unsigned portNameToIndex( handle_t h, unsigned devIdx, unsigned flags, const char* portName );
|
unsigned portNameToIndex( handle_t h, unsigned devIdx, unsigned flags, const char* portName );
|
||||||
rc_t send( handle_t h, unsigned devIdx, unsigned portIdx, byte_t st, byte_t d0, byte_t d1 );
|
rc_t send( handle_t h, unsigned devIdx, unsigned portIdx, uint8_t st, uint8_t d0, uint8_t d1 );
|
||||||
rc_t sendData( handle_t h, unsigned devIdx, unsigned portIdx, const byte_t* dataPtr, unsigned byteCnt );
|
rc_t sendData( handle_t h, unsigned devIdx, unsigned portIdx, const uint8_t* dataPtr, unsigned byteCnt );
|
||||||
|
|
||||||
// Set devIdx to -1 to assign the callback to all devices.
|
// Set devIdx to -1 to assign the callback to all devices.
|
||||||
// Set portIdx to -1 to assign the callback to all ports on the specified devices.
|
// Set portIdx to -1 to assign the callback to all ports on the specified devices.
|
||||||
|
@ -1,35 +1,12 @@
|
|||||||
#ifndef cwSerialPort_H
|
#ifndef cwSerialPort_H
|
||||||
#define cwSerialPort_H
|
#define cwSerialPort_H
|
||||||
|
|
||||||
|
#include "cwSerialPortDecls.h"
|
||||||
|
|
||||||
namespace cw
|
namespace cw
|
||||||
{
|
{
|
||||||
namespace serialPort
|
namespace serialPort
|
||||||
{
|
{
|
||||||
enum
|
|
||||||
{
|
|
||||||
kDataBits5Fl = 0x0001,
|
|
||||||
kDataBits6Fl = 0x0002,
|
|
||||||
kDataBits7Fl = 0x0004,
|
|
||||||
kDataBits8Fl = 0x0008,
|
|
||||||
kDataBitsMask = 0x000f,
|
|
||||||
|
|
||||||
k1StopBitFl = 0x0010,
|
|
||||||
k2StopBitFl = 0x0020,
|
|
||||||
|
|
||||||
kEvenParityFl = 0x0040,
|
|
||||||
kOddParityFl = 0x0080,
|
|
||||||
kNoParityFl = 0x0000,
|
|
||||||
/*
|
|
||||||
kCTS_OutFlowCtlFl = 0x0100,
|
|
||||||
kRTS_InFlowCtlFl = 0x0200,
|
|
||||||
kDTR_InFlowCtlFl = 0x0400,
|
|
||||||
kDSR_OutFlowCtlFl = 0x0800,
|
|
||||||
kDCD_OutFlowCtlFl = 0x1000
|
|
||||||
*/
|
|
||||||
|
|
||||||
kDefaultCfgFlags = kDataBits8Fl | k1StopBitFl | kNoParityFl
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
typedef handle<struct device_str> handle_t;
|
typedef handle<struct device_str> handle_t;
|
||||||
typedef void (*callbackFunc_t)( void* cbArg, unsigned userId, const void* byteA, unsigned byteN );
|
typedef void (*callbackFunc_t)( void* cbArg, unsigned userId, const void* byteA, unsigned byteN );
|
||||||
|
35
cwSerialPortDecls.h
Normal file
35
cwSerialPortDecls.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#ifndef cwSerialPortDecls_H
|
||||||
|
#define cwSerialPortDecls_H
|
||||||
|
|
||||||
|
namespace cw
|
||||||
|
{
|
||||||
|
namespace serialPort
|
||||||
|
{
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kDataBits5Fl = 0x0001,
|
||||||
|
kDataBits6Fl = 0x0002,
|
||||||
|
kDataBits7Fl = 0x0004,
|
||||||
|
kDataBits8Fl = 0x0008,
|
||||||
|
kDataBitsMask = 0x000f,
|
||||||
|
|
||||||
|
k1StopBitFl = 0x0010,
|
||||||
|
k2StopBitFl = 0x0020,
|
||||||
|
|
||||||
|
kEvenParityFl = 0x0040,
|
||||||
|
kOddParityFl = 0x0080,
|
||||||
|
kNoParityFl = 0x0000,
|
||||||
|
/*
|
||||||
|
kCTS_OutFlowCtlFl = 0x0100,
|
||||||
|
kRTS_InFlowCtlFl = 0x0200,
|
||||||
|
kDTR_InFlowCtlFl = 0x0400,
|
||||||
|
kDSR_OutFlowCtlFl = 0x0800,
|
||||||
|
kDCD_OutFlowCtlFl = 0x1000
|
||||||
|
*/
|
||||||
|
|
||||||
|
kDefaultCfgFlags = kDataBits8Fl | k1StopBitFl | kNoParityFl
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
31
cwSocket.h
31
cwSocket.h
@ -1,47 +1,18 @@
|
|||||||
#ifndef cwSocket_H
|
#ifndef cwSocket_H
|
||||||
#define cwSocket_H
|
#define cwSocket_H
|
||||||
|
|
||||||
|
#include "cwSocketDecls.h"
|
||||||
|
|
||||||
namespace cw
|
namespace cw
|
||||||
{
|
{
|
||||||
namespace sock
|
namespace sock
|
||||||
{
|
{
|
||||||
typedef handle< struct mgr_str > handle_t;
|
typedef handle< struct mgr_str > handle_t;
|
||||||
typedef uint16_t portNumber_t;
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
kReceiveCbId,
|
|
||||||
kConnectCbId,
|
|
||||||
kDisconnectCbId
|
|
||||||
} cbId_t;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// userId is the id assigned to the receiving socket
|
// userId is the id assigned to the receiving socket
|
||||||
// connId is an automatically assigned id which represents the remote endpoint which is connected to 'userId'.
|
// connId is an automatically assigned id which represents the remote endpoint which is connected to 'userId'.
|
||||||
typedef void (*callbackFunc_t)( void* cbArg, cbId_t cbId, unsigned userId, unsigned connId, const void* byteA, unsigned byteN, const struct sockaddr_in* srcAddr );
|
typedef void (*callbackFunc_t)( void* cbArg, cbId_t cbId, unsigned userId, unsigned connId, const void* byteA, unsigned byteN, const struct sockaddr_in* srcAddr );
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
kNonBlockingFl = 0x000, // Create a non-blocking socket.
|
|
||||||
kBlockingFl = 0x001, // Create a blocking socket.
|
|
||||||
kTcpFl = 0x002, // Create a TCP socket rather than a UDP socket.
|
|
||||||
kBroadcastFl = 0x004, //
|
|
||||||
kReuseAddrFl = 0x008, //
|
|
||||||
kReusePortFl = 0x010, //
|
|
||||||
kMultiCastTtlFl = 0x020, //
|
|
||||||
kMultiCastLoopFl = 0x040, //
|
|
||||||
kListenFl = 0x080, // Use this socket to listen for incoming connections
|
|
||||||
kStreamFl = 0x100, // Connected stream (not Datagram)
|
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
// port 0 is reserved by and is therefore a convenient invalid port number
|
|
||||||
kInvalidPortNumber = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
rc_t createMgr( handle_t& hRef, unsigned recvBufByteN, unsigned maxSocketN );
|
rc_t createMgr( handle_t& hRef, unsigned recvBufByteN, unsigned maxSocketN );
|
||||||
rc_t destroyMgr( handle_t& hRef );
|
rc_t destroyMgr( handle_t& hRef );
|
||||||
|
|
||||||
|
42
cwSocketDecls.h
Normal file
42
cwSocketDecls.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#ifndef cwSocketDecls_H
|
||||||
|
#define cwSocketDecls_H
|
||||||
|
|
||||||
|
namespace cw
|
||||||
|
{
|
||||||
|
namespace sock
|
||||||
|
{
|
||||||
|
typedef uint16_t portNumber_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
kReceiveCbId,
|
||||||
|
kConnectCbId,
|
||||||
|
kDisconnectCbId
|
||||||
|
} cbId_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kNonBlockingFl = 0x000, // Create a non-blocking socket.
|
||||||
|
kBlockingFl = 0x001, // Create a blocking socket.
|
||||||
|
kTcpFl = 0x002, // Create a TCP socket rather than a UDP socket.
|
||||||
|
kBroadcastFl = 0x004, //
|
||||||
|
kReuseAddrFl = 0x008, //
|
||||||
|
kReusePortFl = 0x010, //
|
||||||
|
kMultiCastTtlFl = 0x020, //
|
||||||
|
kMultiCastLoopFl = 0x040, //
|
||||||
|
kListenFl = 0x080, // Use this socket to listen for incoming connections
|
||||||
|
kStreamFl = 0x100, // Connected stream (not Datagram)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
// port 0 is reserved by and is therefore a convenient invalid port number
|
||||||
|
kInvalidPortNumber = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -25,19 +25,20 @@ namespace cw
|
|||||||
|
|
||||||
typedef struct websock_str
|
typedef struct websock_str
|
||||||
{
|
{
|
||||||
cbFunc_t _cbFunc;
|
cbFunc_t _cbFunc; //
|
||||||
void* _cbArg;
|
void* _cbArg; //
|
||||||
struct lws_context* _ctx = nullptr; //
|
struct lws_context* _ctx = nullptr; //
|
||||||
struct lws_protocols* _protocolA = nullptr; // Websocket internal protocol state array
|
struct lws_protocols* _protocolA = nullptr; // Websocket internal protocol state array
|
||||||
unsigned _protocolN = 0; // Count of protocol records in _protocolA[].
|
unsigned _protocolN = 0; // Count of protocol records in _protocolA[].
|
||||||
unsigned _nextSessionId = 0; // Next session id.
|
unsigned _nextSessionId = 0; // Next session id.
|
||||||
unsigned _connSessionN = 0; // Count of connected sessions.
|
unsigned _connSessionN = 0; // Count of connected sessions.
|
||||||
struct lws_http_mount* _mount = nullptr; //
|
struct lws_http_mount* _mount = nullptr; //
|
||||||
MpScNbQueue<msg_t>* _q; // Thread safe, non-blocking, protocol independent msg queue.
|
MpScNbQueue<msg_t>* _q; // Thread safe, non-blocking, protocol independent msg queue.
|
||||||
|
|
||||||
} websock_t;
|
} websock_t;
|
||||||
|
|
||||||
inline websock_t* _handleToPtr(handle_t h){ return handleToPtr<handle_t,websock_t>(h); }
|
inline websock_t* _handleToPtr(handle_t h)
|
||||||
|
{ return handleToPtr<handle_t,websock_t>(h); }
|
||||||
|
|
||||||
|
|
||||||
// Internal session record.
|
// Internal session record.
|
||||||
|
19
cwWebSock.h
19
cwWebSock.h
@ -26,29 +26,14 @@ need to make the protocol state queue thread-safe.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "cwWebSockDecls.h"
|
||||||
|
|
||||||
namespace cw
|
namespace cw
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace websock
|
namespace websock
|
||||||
{
|
{
|
||||||
typedef handle<struct websock_str> handle_t;
|
typedef handle<struct websock_str> handle_t;
|
||||||
|
|
||||||
typedef struct protocol_str
|
|
||||||
{
|
|
||||||
const char* label; // unique label identifying this protocol
|
|
||||||
unsigned id; // unique id identifying this protocol
|
|
||||||
unsigned rcvBufByteN; // larger rcv'd packages will be broken into multiple parts
|
|
||||||
unsigned xmtBufByteN; // larger xmt'd packages are broken into multiple parts
|
|
||||||
} protocol_t;
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
kConnectTId,
|
|
||||||
kDisconnectTId,
|
|
||||||
kMessageTId
|
|
||||||
} msgTypeId_t;
|
|
||||||
|
|
||||||
|
|
||||||
typedef void (*cbFunc_t)( void* cbArg, unsigned protocolId, unsigned connectionId, msgTypeId_t msg_type, const void* msg, unsigned byteN );
|
typedef void (*cbFunc_t)( void* cbArg, unsigned protocolId, unsigned connectionId, msgTypeId_t msg_type, const void* msg, unsigned byteN );
|
||||||
|
|
||||||
|
26
cwWebSockDecls.h
Normal file
26
cwWebSockDecls.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef cwWebSockDecls_H
|
||||||
|
#define cwWebSockDecls_H
|
||||||
|
|
||||||
|
namespace cw
|
||||||
|
{
|
||||||
|
namespace websock
|
||||||
|
{
|
||||||
|
typedef struct protocol_str
|
||||||
|
{
|
||||||
|
const char* label; // unique label identifying this protocol
|
||||||
|
unsigned id; // unique id identifying this protocol
|
||||||
|
unsigned rcvBufByteN; // larger rcv'd packages will be broken into multiple parts
|
||||||
|
unsigned xmtBufByteN; // larger xmt'd packages are broken into multiple parts
|
||||||
|
} protocol_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
kConnectTId,
|
||||||
|
kDisconnectTId,
|
||||||
|
kMessageTId
|
||||||
|
} msgTypeId_t;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user