128 lines
4.2 KiB
C
128 lines
4.2 KiB
C
|
#ifndef cmDevCfg_h
|
||
|
#define cmDevCfg_h
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
/*
|
||
|
IMPLEMENTATION:
|
||
|
1) A 'cfg' record is a device reference with a 'cfg label'.
|
||
|
There are three kinds of cfg records MIDI,Audio,Net.
|
||
|
The device record identifies a particlar device
|
||
|
end-point or pre-configured setup. The 'cfg label'
|
||
|
associated with this setup allows an application
|
||
|
to refer to the setup by name. This releives the
|
||
|
application from having to handle the details of
|
||
|
forming, storing, and maintaining device configurations.
|
||
|
|
||
|
2) A 'map' record is a record which links an
|
||
|
application and reference id to a cfg record.
|
||
|
|
||
|
The goal of this is to allow applications to refer to
|
||
|
pre-configured device setups by name and then to
|
||
|
associate a numeric id with this setup.
|
||
|
The application can then send data to the device using
|
||
|
only the numeric id. Likewise data arriving from the
|
||
|
device to the application is tagged with
|
||
|
id of the of the device.
|
||
|
|
||
|
NOTES:
|
||
|
1) usrAppId's must be unique among all app.s'.
|
||
|
2) usrDevId's must be unique among all usrDevId's for particular app.
|
||
|
In other words the same 'usrDevId' may not be used by devices
|
||
|
of different types.
|
||
|
3) The usrAppId's and usrDevIds' are used internally as index
|
||
|
locations. They should therefore be low numbers and
|
||
|
densely packed.
|
||
|
*/
|
||
|
|
||
|
|
||
|
struct cmAudioSysArgs_t;
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
kOkDcRC = cmOkRC,
|
||
|
cmLabelNotFoundDcRC,
|
||
|
cmIdNotFoundDcRC,
|
||
|
kInvalidDevArgDcRC
|
||
|
};
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
kInvalidDcmTId,
|
||
|
kMidiDcmTId,
|
||
|
kAudioDcmTId,
|
||
|
kNetDcmTId
|
||
|
} cmTypeDcmId_t;
|
||
|
|
||
|
typedef cmRC_t cmDcRC_t;
|
||
|
typedef cmHandle_t cmDevCfgH_t;
|
||
|
|
||
|
extern cmDevCfgH_t cmDevCfgNullHandle;
|
||
|
|
||
|
cmDcRC_t cmDevCfgMgrAlloc( cmCtx_t* c, cmDevCfgH_t* hp, cmJsonH_t jsH );
|
||
|
cmDcRC_t cmDevCfgMgrFree( cmDevCfgH_t* hp );
|
||
|
cmDcRC_t cmDevCfgIsValid( cmDevCfgH_t h );
|
||
|
|
||
|
|
||
|
// Delete a cfg record created by cmDevCfgNameMidiPort(), cmDevCfgNameAudioPort(), etc.
|
||
|
cmDcRC_t cmDevCfgDeleteCfg( cmDevCfgH_t h, cmTypeDcmId_t typeId, const cmChar_t* dcLabelStr );
|
||
|
|
||
|
// Create a map record to associate a app/dev id with a cfg. record.
|
||
|
// Note that multiple app/dev id's may be assoc'd with the same cfg. record.
|
||
|
cmDcRC_t cmDevCfgCreateMap( cmDevCfgH_t h, cmTypeDcmId_t typeId, const cmChar_t* dcLabelStr, unsigned usrAppId, unsigned usrDevId );
|
||
|
|
||
|
// Delete a map record created by cmDevCfgCreateMap().
|
||
|
cmDcRC_t cmDevCfgDeleteMap( cmDevCfgH_t h, cmTypeDcmId_t typeId, unsigned usrAppId, unsigned usrDevId );
|
||
|
|
||
|
// Create a MIDI cfg. record.
|
||
|
cmDcRC_t cmDevCfgNameMidiPort(
|
||
|
cmDevCfgH_t h,
|
||
|
const cmChar_t* dcLabelStr,
|
||
|
const cmChar_t* devNameStr,
|
||
|
const cmChar_t* portNameStr,
|
||
|
bool inputFl );
|
||
|
|
||
|
cmDcRC_t cmDevCfgMidiDevIdx( cmDevCfgH_t h, unsigned usrAppId, unsigned usrDevId, unsigned* midiDevIdxRef, unsigned* midiPortIdxRef );
|
||
|
|
||
|
|
||
|
cmDcRC_t cmDevCfgNameAudioPort(
|
||
|
cmDevCfgH_t h,
|
||
|
const cmChar_t* dcLabelStr,
|
||
|
const cmChar_t* inDevNameStr,
|
||
|
const cmChar_t* outDevNameStr,
|
||
|
bool syncInputFl,
|
||
|
unsigned msgQueueByteCnt,
|
||
|
unsigned devFramesPerCycle,
|
||
|
unsigned dspFramesPerCycle,
|
||
|
unsigned audioBufCnt,
|
||
|
double srate );
|
||
|
|
||
|
const struct cmAudioSysArgs_str* cmDevCfgAudioSysArgs( cmDevCfgH_t h, unsigned usrAppId, unsigned usrDevId );
|
||
|
|
||
|
cmDcRC_t cmDevCfgNetPort(
|
||
|
cmDevCfgH_t h,
|
||
|
const cmChar_t* dcLabelStr,
|
||
|
const cmChar_t* sockAddr,
|
||
|
unsigned portNumber );
|
||
|
|
||
|
unsigned cmDevCfgNetNodeId( cmDevCfgH_t h, unsigned usrAppId, unsigned usrDevId );
|
||
|
|
||
|
// Preset Management Functions:
|
||
|
// Store and recall groups cfg records.
|
||
|
|
||
|
unsigned cmDevCfgPresetCount( cmDevCfgH_t h );
|
||
|
const cmChar_t* cmDevCfgPresetLabel( cmDevCfgH_t h, unsigned presetIdx );
|
||
|
cmDcRC_t cmDevCfgStore( cmDevCfgH_t h, const cmChar_t* presetLabelStr );
|
||
|
cmDcRC_t cmDevCfgRecall( cmDevCfgH_t h, const cmChar_t* presetLabelStr );
|
||
|
cmDcRC_t cmDevCfgDelete( cmDevCfgH_t h, const cmChar_t* presetLabelStr );
|
||
|
|
||
|
cmDcRC_t cmDevCfgWrite( cmDevCfgH_t h );
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|