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 6.0KB

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