1 /* 2 * Carla Bridge definitions 3 * Copyright (C) 2013-2020 Filipe Coelho <falktx@falktx.com> 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation; either version 2 of 8 * the License, or any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * For a full copy of the GNU General Public License see the doc/GPL.txt file. 16 */ 17 18 #ifndef CARLA_BRIDGE_DEFINES_HPP_INCLUDED 19 #define CARLA_BRIDGE_DEFINES_HPP_INCLUDED 20 21 #include "CarlaDefines.h" 22 23 // how much backwards compatible we are 24 #define CARLA_PLUGIN_BRIDGE_API_VERSION_MINIMUM 6 25 26 // current API version, bumped when something is added 27 #define CARLA_PLUGIN_BRIDGE_API_VERSION_CURRENT 8 28 29 // ------------------------------------------------------------------------------------------------------------------- 30 31 // Server sends these to client during RT 32 enum PluginBridgeRtClientOpcode { 33 kPluginBridgeRtClientNull = 0, 34 kPluginBridgeRtClientSetAudioPool, // ulong/ptr 35 kPluginBridgeRtClientSetBufferSize, // uint 36 kPluginBridgeRtClientSetSampleRate, // double 37 kPluginBridgeRtClientSetOnline, // bool 38 kPluginBridgeRtClientControlEventParameter, // uint/frame, byte/chan, ushort, float 39 kPluginBridgeRtClientControlEventMidiBank, // uint/frame, byte/chan, ushort 40 kPluginBridgeRtClientControlEventMidiProgram, // uint/frame, byte/chan, ushort 41 kPluginBridgeRtClientControlEventAllSoundOff, // uint/frame, byte/chan 42 kPluginBridgeRtClientControlEventAllNotesOff, // uint/frame, byte/chan 43 kPluginBridgeRtClientMidiEvent, // uint/frame, byte/port, byte/size, byte[]/data 44 kPluginBridgeRtClientProcess, // uint/frames 45 kPluginBridgeRtClientQuit 46 }; 47 48 // Server sends these to client during non-RT 49 enum PluginBridgeNonRtClientOpcode { 50 kPluginBridgeNonRtClientNull = 0, 51 kPluginBridgeNonRtClientVersion, // uint 52 kPluginBridgeNonRtClientPing, 53 kPluginBridgeNonRtClientPingOnOff, // bool 54 kPluginBridgeNonRtClientActivate, 55 kPluginBridgeNonRtClientDeactivate, 56 kPluginBridgeNonRtClientInitialSetup, // uint, double 57 kPluginBridgeNonRtClientSetParameterValue, // uint, float 58 kPluginBridgeNonRtClientSetParameterMidiChannel, // uint, byte 59 kPluginBridgeNonRtClientSetParameterMappedControlIndex, // uint, short 60 kPluginBridgeNonRtClientSetProgram, // int 61 kPluginBridgeNonRtClientSetMidiProgram, // int 62 kPluginBridgeNonRtClientSetCustomData, // uint/size, str[], uint/size, str[], uint/size, str[] 63 kPluginBridgeNonRtClientSetChunkDataFile, // uint/size, str[] (filename, base64 content) 64 kPluginBridgeNonRtClientSetCtrlChannel, // short 65 kPluginBridgeNonRtClientSetOption, // uint/option, bool 66 kPluginBridgeNonRtClientGetParameterText, // uint 67 kPluginBridgeNonRtClientPrepareForSave, 68 kPluginBridgeNonRtClientRestoreLV2State, 69 kPluginBridgeNonRtClientShowUI, 70 kPluginBridgeNonRtClientHideUI, 71 kPluginBridgeNonRtClientUiParameterChange, // uint, float 72 kPluginBridgeNonRtClientUiProgramChange, // uint 73 kPluginBridgeNonRtClientUiMidiProgramChange, // uint 74 kPluginBridgeNonRtClientUiNoteOn, // byte, byte, byte 75 kPluginBridgeNonRtClientUiNoteOff, // byte, byte 76 kPluginBridgeNonRtClientQuit, 77 // stuff added in API 7 78 kPluginBridgeNonRtClientSetParameterMappedRange, // uint, float, float 79 kPluginBridgeNonRtClientSetOptions, // uint 80 // stuff added in API 8 81 kPluginBridgeNonRtClientSetWindowTitle, // uint/size, str[] 82 }; 83 84 // Client sends these to server during non-RT 85 enum PluginBridgeNonRtServerOpcode { 86 kPluginBridgeNonRtServerNull = 0, 87 kPluginBridgeNonRtServerPong, 88 kPluginBridgeNonRtServerPluginInfo1, // uint/category, uint/hints, uint/optionsAvailable, uint/optionsEnabled, long/uniqueId 89 kPluginBridgeNonRtServerPluginInfo2, // uint/size, str[] (realName), uint/size, str[] (label), uint/size, str[] (maker), uint/size, str[] (copyright) 90 kPluginBridgeNonRtServerAudioCount, // uint/ins, uint/outs 91 kPluginBridgeNonRtServerMidiCount, // uint/ins, uint/outs 92 kPluginBridgeNonRtServerCvCount, // uint/ins, uint/outs 93 kPluginBridgeNonRtServerParameterCount, // uint/count 94 kPluginBridgeNonRtServerProgramCount, // uint/count 95 kPluginBridgeNonRtServerMidiProgramCount, // uint/count 96 kPluginBridgeNonRtServerPortName, // byte/type, uint/index, uint/size, str[] (name) 97 kPluginBridgeNonRtServerParameterData1, // uint/index, int/rindex, uint/type, uint/hints, short/cc 98 kPluginBridgeNonRtServerParameterData2, // uint/index, uint/size, str[] (name), uint/size, str[] (symbol), uint/size, str[] (unit) 99 kPluginBridgeNonRtServerParameterRanges, // uint/index, float/def, float/min, float/max, float/step, float/stepSmall, float/stepLarge 100 kPluginBridgeNonRtServerParameterValue, // uint/index, float/value 101 kPluginBridgeNonRtServerParameterValue2, // uint/index, float/value (used for init/output parameters only, don't resend values) 102 kPluginBridgeNonRtServerParameterTouch, // uint/index, bool/touch 103 kPluginBridgeNonRtServerDefaultValue, // uint/index, float/value 104 kPluginBridgeNonRtServerCurrentProgram, // int/index 105 kPluginBridgeNonRtServerCurrentMidiProgram, // int/index 106 kPluginBridgeNonRtServerProgramName, // uint/index, uint/size, str[] (name) 107 kPluginBridgeNonRtServerMidiProgramData, // uint/index, uint/bank, uint/program, uint/size, str[] (name) 108 kPluginBridgeNonRtServerSetCustomData, // uint/size, str[], uint/size, str[], uint/size, str[] 109 kPluginBridgeNonRtServerSetChunkDataFile, // uint/size, str[] (filename, base64 content) 110 kPluginBridgeNonRtServerSetLatency, // uint 111 kPluginBridgeNonRtServerSetParameterText, // uint/index, uint/size, str[] (name) 112 kPluginBridgeNonRtServerReady, 113 kPluginBridgeNonRtServerSaved, 114 kPluginBridgeNonRtServerUiClosed, 115 kPluginBridgeNonRtServerError, // uint/size, str[] 116 // stuff added in API 7 117 kPluginBridgeNonRtServerVersion // uint 118 }; 119 120 // used for kPluginBridgeNonRtServerPortName 121 enum PluginBridgePortType { 122 kPluginBridgePortNull = 0, 123 kPluginBridgePortAudioInput, 124 kPluginBridgePortAudioOutput, 125 kPluginBridgePortCvInput, 126 kPluginBridgePortCvOutput, 127 kPluginBridgePortMidiInput, 128 kPluginBridgePortMidiOutput, 129 kPluginBridgePortTypeCount 130 }; 131 132 enum PluginBridgeTimeInfoFlags { 133 kPluginBridgeTimeInfoValidBBT = 0x1 134 }; 135 136 // ------------------------------------------------------------------------------------------------------------------- 137 138 struct BridgeSemaphore { 139 union { 140 void* server; 141 char _padServer[64]; 142 }; 143 union { 144 void* client; 145 char _padClient[64]; 146 }; 147 }; 148 149 // NOTE: needs to be 64bit aligned 150 struct BridgeTimeInfo { 151 uint64_t playing; 152 uint64_t frame; 153 uint64_t usecs; 154 uint32_t validFlags; 155 uint32_t unused; 156 // bbt 157 int32_t bar, beat; 158 float beatsPerBar, beatType; 159 double tick, barStartTick, ticksPerBeat, beatsPerMinute; 160 }; 161 162 // ------------------------------------------------------------------------------------------------------------------- 163 164 #endif // CARLA_BRIDGE_DEFINES_HPP_INCLUDED 165