libcm is a C development framework with an emphasis on audio signal processing applications.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

cmMsgProtocol.h 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #ifndef cmMsgProtocol_h
  2. #define cmMsgProtocol_h
  3. #include "cmAudioSysMsg.h"
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. #define cmAudDspSys_FILENAME "aud_dsp.js"
  8. // UI seletor id's used in the cmDspUiHdr_t selId field
  9. enum
  10. {
  11. kPrintDuiId, // ui<--eng print the value to the console
  12. kSliderDuiId, // ui<--eng create a slider control
  13. kButtonDuiId, // ui<--eng create button control
  14. kCheckDuiId, // ui<--eng create a check box control
  15. kLabelDuiId, // ui<--eng create a label control
  16. kTimeLineDuiId, // ui<--eng create a time-line control
  17. kScoreDuiId, // ui<--eng create a score control
  18. kTakeSeqBldrDuiId, // ui<--eng create a take sequence builder
  19. kTakeSeqRendDuiId, // ui<--eng create a take sequence renderer
  20. kNumberDuiId, // ui<--eng create a number box
  21. kTextDuiId, // ui<--eng create a text entry control
  22. kFnameDuiId, // ui<--eng create a file/directory picker control
  23. kMsgListDuiId, // ui<--eng create a msg list control
  24. kMeterDuiId, // ui<--eng create a meter display
  25. kValueDuiId, // ui<->eng a control changed values
  26. kColumnDuiId, // ui<--eng start a new column
  27. kHBorderDuiId, // ui<--eng insert a vertical border
  28. kPageDuiId, // ui<--eng insert a new control page
  29. kAudioSysCfgDuiId, // ui<--audio system cfg label
  30. kSubSysCntDuiId, // ui<--eng audio sub-system count
  31. kDeviceDuiId, // ui<--eng device label
  32. kProgramDuiId, // ui<--eng program label
  33. // The following selId's are used by cmAudDsp to indicate various commands.
  34. kSetAudioCfgDuiId, // 1) select an audio system setup
  35. kSetAudioDevDuiId, // 2) (optional) set an audio device on an audio sub-system
  36. kSetSampleRateDuiId, // 3) (optional) set the sample rate of an audio sub-system
  37. kSetPgmDuiId, // 4) select a program
  38. kEnableDuiId, // 5) enable/disable the audio system (also resets the DSP system)
  39. kSyncDuiId, // 6) sent by cmAudDsp to client to indicate sync success or failure.
  40. kSetNotifyEnableDuiId, // enable/disable periodic status notification from the audio system.
  41. kClientMsgPollDuiId, // Periodic check for and deliver messages waiting in the audio system for delivery to the client.
  42. kSendMsgDuiId, // forward msg to the audio system
  43. kDevReportDuiId, // print a device report
  44. kPrintPgmDuiId, // write the currently loaded pgm as a JSON file
  45. kRightAlignDuiId = 0, // label alignment id used by kLabelDuiId
  46. kLeftAlignDuiId,
  47. kCenterAlignDuiId
  48. };
  49. enum
  50. {
  51. kDuplexDuiFl = 0x01
  52. };
  53. // Header record for all messages between the host and the DSP controllers.
  54. typedef struct
  55. {
  56. unsigned asSubIdx; // the audio sub-system this UI belongs to
  57. unsigned uiId; // msg type kXXXAsId
  58. unsigned selId; // action to perform see above
  59. unsigned flags; //
  60. unsigned instId; // DSP instance id
  61. unsigned instVarId; // DSP instance var id
  62. // The cmDspValue_t field must come last in the structure in
  63. // order for the cmDsvSerialize() to work in cmDspUI.c:_cmDspUiMsg().
  64. cmDspValue_t value; // Data value associated with this msg.
  65. } cmDspUiHdr_t;
  66. // cmDspNetMsg_t sub-selector id's
  67. enum {
  68. kNetHelloSelAsId, // node->node awake msg
  69. kNetDstIdReqSelAsId, // src->dst request a dst id
  70. kNetDstIdReqDoneAsId, // src->dst all requests have been sent
  71. kNetDstIdSelAsId, // dst->src provide dst id
  72. kNetDoneSelAsId, // node->node sync done
  73. kNetErrSelAsId, // node->node sync error
  74. kNetEvtSelAsId // src->dst send cmDspEvnt_t
  75. };
  76. // Message Layout [ cmDspNetMsg_t dstInstLabel[] dstVarLabel[] ]
  77. typedef struct
  78. {
  79. unsigned asSubIdx;
  80. unsigned selId; // kNetSyncSelAsId
  81. unsigned subSelId; // see above kNetXXXSelAsId
  82. unsigned srcId;
  83. unsigned dstId;
  84. cmDspValue_t value;
  85. // char dstInstLabel[] - with kNetSyncSelAsId only
  86. // char dstVarLabel[] - with kNetSyncSelAsId only
  87. } cmDspNetMsg_t;
  88. enum
  89. {
  90. kOkMsgRC = cmOkRC,
  91. kSerializeFailMsgRC,
  92. kSendFailMsgRC,
  93. kDecodeFailMsgRC
  94. };
  95. typedef cmRC_t cmMsgRC_t;
  96. typedef cmMsgRC_t (*cmMsgSendFuncPtr_t)(void* cbDataPtr, unsigned msgByteCnt, const void* msg );
  97. cmMsgRC_t cmMsgSend(
  98. cmErr_t* err,
  99. unsigned asSubIdx,
  100. unsigned msgTypeId,
  101. unsigned selId,
  102. unsigned flags,
  103. unsigned instId,
  104. unsigned instVarId,
  105. const cmDspValue_t* valPtr,
  106. cmMsgSendFuncPtr_t sendFunc,
  107. void* cbDataPtr );
  108. cmMsgRC_t cmMsgPeekAsSubIndex( const void* msgArray[], unsigned msgByteCntArray[], unsigned segCnt, unsigned* retValPtr );
  109. cmMsgRC_t cmMsgPeekMsgTypeId( const void* msgArray[], unsigned msgByteCntArray[], unsigned segCnt, unsigned* retValPtr );
  110. cmMsgRC_t cmMsgPeekSelId( const void* msgArray[], unsigned msgByteCntArray[], unsigned segCnt, unsigned* retValPtr );
  111. cmMsgRC_t cmMsgPeekFlags( const void* msgArray[], unsigned msgByteCntArray[], unsigned segCnt, unsigned* retValPtr );
  112. cmMsgRC_t cmMsgPeekInstId( const void* msgArray[], unsigned msgByteCntArray[], unsigned segCnt, unsigned* retValPtr );
  113. cmMsgRC_t cmMsgPeekInstVarId( const void* msgArray[], unsigned msgByteCntArray[], unsigned segCnt, unsigned* retValPtr );
  114. #ifdef __cplusplus
  115. }
  116. #endif
  117. #endif