libcm is a C development framework with an emphasis on audio signal processing applications.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

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