| @@ -463,6 +463,50 @@ public: | |||
| break; | |||
| } | |||
| case kPluginBridgeOpcodePrepareForSave: { | |||
| carla_prepare_for_save(0); | |||
| for (uint32_t i=0, count=carla_get_custom_data_count(0); i<count; ++i) | |||
| { | |||
| const CarlaBackend::CustomData* const cdata(carla_get_custom_data(0, i)); | |||
| CARLA_SAFE_ASSERT_CONTINUE(cdata != nullptr); | |||
| oscSend_bridge_set_custom_data(cdata->type, cdata->key, cdata->value); | |||
| } | |||
| //if (fPlugin->getOptionsEnabled() & CarlaBackend::PLUGIN_OPTION_USE_CHUNKS) | |||
| { | |||
| //if (const char* const chunkData = carla_get_chunk_data(0)) | |||
| { | |||
| #if 0 | |||
| QString filePath; | |||
| filePath = QDir::tempPath(); | |||
| #ifdef Q_OS_WIN | |||
| filePath += "\\.CarlaChunk_"; | |||
| #else | |||
| filePath += "/.CarlaChunk_"; | |||
| #endif | |||
| filePath += fPlugin->getName(); | |||
| QFile file(filePath); | |||
| if (file.open(QIODevice::WriteOnly)) | |||
| { | |||
| QByteArray chunk((const char*)data, dataSize); | |||
| file.write(chunk); | |||
| file.close(); | |||
| fEngine->oscSend_bridge_set_chunk_data(filePath.toUtf8().constData()); | |||
| } | |||
| #endif | |||
| } | |||
| } | |||
| carla_stdout("-----------------------------------------------------, got prepare for save"); | |||
| oscSend_bridge_configure(CARLA_BRIDGE_MSG_SAVED, ""); | |||
| break; | |||
| } | |||
| case kPluginBridgeOpcodeMidiEvent: { | |||
| const int64_t time(fShmControl.readLong()); | |||
| const int32_t size(fShmControl.readInt()); | |||
| @@ -543,10 +587,26 @@ public: | |||
| break; | |||
| } | |||
| case kPluginBridgeOpcodeShowUI: | |||
| carla_stdout("-----------------------------------------------------, got SHOW UI"); | |||
| carla_show_custom_ui(0, true); | |||
| break; | |||
| case kPluginBridgeOpcodeHideUI: | |||
| carla_stdout("-----------------------------------------------------, got HIDE UI"); | |||
| carla_show_custom_ui(0, false); | |||
| break; | |||
| case kPluginBridgeOpcodeQuit: | |||
| signalThreadShouldExit(); | |||
| fIsRunning = false; | |||
| break; | |||
| default: | |||
| carla_stderr2("Unhandled Plugin opcode %i", opcode); | |||
| break; | |||
| } | |||
| } | |||
| @@ -279,12 +279,17 @@ int CarlaEngineOsc::handleMessage(const bool isTCP, const char* const path, cons | |||
| return 0; | |||
| } | |||
| // Common OSC methods (DSSI and bridge UIs) | |||
| // Common OSC methods (all bridges) | |||
| if (std::strcmp(method, "update") == 0) | |||
| { | |||
| const lo_address source(lo_message_get_source(msg)); | |||
| return handleMsgUpdate(plugin, argc, argv, types, source); | |||
| } | |||
| if (std::strcmp(method, "exiting") == 0) | |||
| return handleMsgExiting(plugin); | |||
| #ifndef BUILD_BRIDGE | |||
| // Common OSC methods (DSSI and bridge UIs) | |||
| if (std::strcmp(method, "configure") == 0) | |||
| return handleMsgConfigure(plugin, argc, argv, types); | |||
| if (std::strcmp(method, "control") == 0) | |||
| @@ -293,10 +298,7 @@ int CarlaEngineOsc::handleMessage(const bool isTCP, const char* const path, cons | |||
| return handleMsgProgram(plugin, argc, argv, types); | |||
| if (std::strcmp(method, "midi") == 0) | |||
| return handleMsgMidi(plugin, argc, argv, types); | |||
| if (std::strcmp(method, "exiting") == 0) | |||
| return handleMsgExiting(plugin); | |||
| #ifndef BUILD_BRIDGE | |||
| // Internal methods | |||
| if (std::strcmp(method, "set_active") == 0) | |||
| return handleMsgSetActive(plugin, argc, argv, types); | |||
| @@ -379,13 +381,13 @@ int CarlaEngineOsc::handleMessage(const bool isTCP, const char* const path, cons | |||
| if (std::strcmp(bmethod, "error") == 0) | |||
| return CarlaPluginSetOscBridgeInfo(plugin, kPluginBridgeError, argc, argv, types); | |||
| } | |||
| #endif | |||
| // Plugin-specific methods | |||
| if (std::strcmp(method, "lv2_atom_transfer") == 0) | |||
| return handleMsgLv2AtomTransfer(plugin, argc, argv, types); | |||
| if (std::strcmp(method, "lv2_urid_map") == 0) | |||
| return handleMsgLv2UridMap(plugin, argc, argv, types); | |||
| #endif | |||
| carla_stderr("CarlaEngineOsc::handleMessage() - unsupported OSC method '%s'", method); | |||
| return 1; | |||
| @@ -393,6 +395,30 @@ int CarlaEngineOsc::handleMessage(const bool isTCP, const char* const path, cons | |||
| // ----------------------------------------------------------------------- | |||
| int CarlaEngineOsc::handleMsgUpdate(CARLA_ENGINE_OSC_HANDLE_ARGS2, const lo_address source) | |||
| { | |||
| carla_debug("CarlaEngineOsc::handleMsgUpdate()"); | |||
| CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "s"); | |||
| const char* const url = (const char*)&argv[0]->s; | |||
| plugin->updateOscData(source, url); | |||
| return 0; | |||
| } | |||
| int CarlaEngineOsc::handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1) | |||
| { | |||
| carla_debug("CarlaEngineOsc::handleMsgExiting()"); | |||
| // TODO - check for non-UIs (dssi-vst) and set to -1 instead | |||
| fEngine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, plugin->getId(), 0, 0, 0.0f, nullptr); | |||
| plugin->showCustomUI(false); | |||
| return 0; | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| #ifndef BUILD_BRIDGE | |||
| int CarlaEngineOsc::handleMsgRegister(const bool isTCP, const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source) | |||
| { | |||
| @@ -449,21 +475,9 @@ int CarlaEngineOsc::handleMsgUnregister() | |||
| fControlData.clear(); | |||
| return 0; | |||
| } | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| int CarlaEngineOsc::handleMsgUpdate(CARLA_ENGINE_OSC_HANDLE_ARGS2, const lo_address source) | |||
| { | |||
| carla_debug("CarlaEngineOsc::handleMsgUpdate()"); | |||
| CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "s"); | |||
| const char* const url = (const char*)&argv[0]->s; | |||
| plugin->updateOscData(source, url); | |||
| return 0; | |||
| } | |||
| int CarlaEngineOsc::handleMsgConfigure(CARLA_ENGINE_OSC_HANDLE_ARGS2) | |||
| { | |||
| carla_debug("CarlaEngineOsc::handleMsgConfigure()"); | |||
| @@ -569,20 +583,8 @@ int CarlaEngineOsc::handleMsgMidi(CARLA_ENGINE_OSC_HANDLE_ARGS2) | |||
| #endif | |||
| } | |||
| int CarlaEngineOsc::handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1) | |||
| { | |||
| carla_debug("CarlaEngineOsc::handleMsgExiting()"); | |||
| // TODO - check for non-UIs (dssi-vst) and set to -1 instead | |||
| fEngine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, plugin->getId(), 0, 0, 0.0f, nullptr); | |||
| plugin->showCustomUI(false); | |||
| return 0; | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| #ifndef BUILD_BRIDGE | |||
| int CarlaEngineOsc::handleMsgSetActive(CARLA_ENGINE_OSC_HANDLE_ARGS2) | |||
| { | |||
| carla_debug("CarlaEngineOsc::handleMsgSetActive()"); | |||
| @@ -750,7 +752,7 @@ int CarlaEngineOsc::handleMsgNoteOff(CARLA_ENGINE_OSC_HANDLE_ARGS2) | |||
| plugin->sendMidiSingleNote(static_cast<uint8_t>(channel), static_cast<uint8_t>(note), 0, true, false, true); | |||
| return 0; | |||
| } | |||
| #endif | |||
| #endif // ! BUILD_BRIDGE | |||
| // ----------------------------------------------------------------------- | |||
| @@ -108,19 +108,18 @@ private: | |||
| int handleMessage(const bool isTCP, const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg); | |||
| int handleMsgUpdate(CARLA_ENGINE_OSC_HANDLE_ARGS2, const lo_address source); | |||
| int handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1); | |||
| #ifndef BUILD_BRIDGE | |||
| int handleMsgRegister(const bool isTCP, const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source); | |||
| int handleMsgUnregister(); | |||
| #endif | |||
| int handleMsgUpdate(CARLA_ENGINE_OSC_HANDLE_ARGS2, const lo_address source); | |||
| int handleMsgConfigure(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgControl(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgMidi(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1); | |||
| #ifndef BUILD_BRIDGE | |||
| int handleMsgSetActive(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgSetDryWet(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgSetVolume(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| @@ -134,10 +133,10 @@ private: | |||
| int handleMsgSetMidiProgram(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgNoteOn(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgNoteOff(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| #endif | |||
| int handleMsgLv2AtomTransfer(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| int handleMsgLv2UridMap(CARLA_ENGINE_OSC_HANDLE_ARGS2); | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| @@ -347,12 +347,6 @@ public: | |||
| fShmControl.waitForServer(3); | |||
| } | |||
| if (pData->osc.data.target != nullptr) | |||
| { | |||
| osc_send_hide(pData->osc.data); | |||
| osc_send_quit(pData->osc.data); | |||
| } | |||
| pData->osc.data.clear(); | |||
| pData->osc.thread.stopThread(3000); | |||
| @@ -490,22 +484,30 @@ public: | |||
| void prepareForSave() override | |||
| { | |||
| #if 0 | |||
| m_saved = false; | |||
| osc_send_configure(&osc.data, CARLA_BRIDGE_MSG_SAVE_NOW, ""); | |||
| fSaved = false; | |||
| { | |||
| const CarlaMutexLocker _cml(fShmControl.lock); | |||
| fShmControl.writeOpcode(kPluginBridgeOpcodePrepareForSave); | |||
| fShmControl.commitWrite(); | |||
| } | |||
| carla_stdout("BridgePlugin::prepareForSave() - sent, now waiting..."); | |||
| for (int i=0; i < 200; ++i) | |||
| { | |||
| if (m_saved) | |||
| if (fSaved) | |||
| break; | |||
| carla_msleep(50); | |||
| carla_msleep(30); | |||
| pData->engine->callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr); | |||
| pData->engine->idle(); | |||
| } | |||
| if (! m_saved) | |||
| if (! fSaved) | |||
| carla_stderr("BridgePlugin::prepareForSave() - Timeout while requesting save state"); | |||
| else | |||
| carla_debug("BridgePlugin::prepareForSave() - success!"); | |||
| #endif | |||
| carla_stdout("BridgePlugin::prepareForSave() - success!"); | |||
| } | |||
| // ------------------------------------------------------------------- | |||
| @@ -618,17 +620,20 @@ public: | |||
| void showCustomUI(const bool yesNo) override | |||
| { | |||
| if (yesNo) | |||
| { | |||
| osc_send_show(pData->osc.data); | |||
| const CarlaMutexLocker _cml(fShmControl.lock); | |||
| fShmControl.writeOpcode(yesNo ? kPluginBridgeOpcodeShowUI : kPluginBridgeOpcodeHideUI); | |||
| fShmControl.commitWrite(); | |||
| } | |||
| if (yesNo) | |||
| { | |||
| pData->tryTransient(); | |||
| } | |||
| else | |||
| { | |||
| pData->transientTryCounter = 0; | |||
| osc_send_hide(pData->osc.data); | |||
| } | |||
| } | |||
| @@ -490,7 +490,6 @@ const StateSave& CarlaPlugin::getStateSave() | |||
| pData->stateSave.label = carla_strdup(strBuf); | |||
| pData->stateSave.uniqueId = getUniqueId(); | |||
| pData->stateSave.options = pData->options; | |||
| carla_stdout("Options: 0x%x | 0x%x", pData->options, pData->stateSave.options); | |||
| if (pData->filename != nullptr) | |||
| pData->stateSave.binary = carla_strdup(pData->filename); | |||
| @@ -5780,6 +5780,7 @@ private: | |||
| #define lv2PluginPtr ((Lv2Plugin*)plugin) | |||
| #ifndef BUILD_BRIDGE | |||
| int CarlaEngineOsc::handleMsgLv2AtomTransfer(CARLA_ENGINE_OSC_HANDLE_ARGS2) | |||
| { | |||
| CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "is"); | |||
| @@ -5811,6 +5812,7 @@ int CarlaEngineOsc::handleMsgLv2UridMap(CARLA_ENGINE_OSC_HANDLE_ARGS2) | |||
| lv2PluginPtr->handleUridMap(static_cast<LV2_URID>(urid), uri); | |||
| return 0; | |||
| } | |||
| #endif | |||
| #undef lv2PluginPtr | |||
| @@ -154,6 +154,8 @@ void CarlaBridgeClient::sendOscUpdate() const | |||
| osc_send_update(fOscData, fOsc.getServerPath()); | |||
| } | |||
| // --------------------------------------------------------------------- | |||
| #ifdef BUILD_BRIDGE_PLUGIN | |||
| void CarlaBridgeClient::sendOscBridgeUpdate() const | |||
| { | |||
| @@ -174,6 +176,7 @@ void CarlaBridgeClient::sendOscBridgeError(const char* const error) const | |||
| // --------------------------------------------------------------------- | |||
| #ifdef BUILD_BRIDGE_UI | |||
| void CarlaBridgeClient::sendOscConfigure(const char* const key, const char* const value) const | |||
| { | |||
| carla_debug("CarlaBridgeClient::sendOscConfigure(\"%s\", \"%s\")", key, value); | |||
| @@ -242,7 +245,6 @@ void CarlaBridgeClient::sendOscLv2UridMap(const uint32_t urid, const char* const | |||
| // --------------------------------------------------------------------- | |||
| #ifdef BUILD_BRIDGE_UI | |||
| void* CarlaBridgeClient::getContainerId() | |||
| { | |||
| carla_debug("CarlaBridgeClient::getContainerId()"); | |||
| @@ -285,6 +287,8 @@ const char* CarlaBridgeClient::uiLibError() | |||
| return lib_error(fUI.filename); | |||
| } | |||
| #endif | |||
| #endif // BUILD_BRIDGE_UI | |||
| // --------------------------------------------------------------------- | |||
| CARLA_BRIDGE_END_NAMESPACE | |||
| @@ -86,6 +86,7 @@ public: | |||
| // --------------------------------------------------------------------- | |||
| protected: | |||
| #ifdef BUILD_BRIDGE_UI | |||
| void sendOscConfigure(const char* const key, const char* const value) const; | |||
| void sendOscControl(const int32_t index, const float value) const; | |||
| void sendOscProgram(const uint32_t index) const; | |||
| @@ -93,14 +94,13 @@ protected: | |||
| void sendOscMidi(const uint8_t midiBuf[4]) const; | |||
| void sendOscExiting() const; | |||
| #ifdef BRIDGE_LV2 | |||
| # ifdef BRIDGE_LV2 | |||
| void sendOscLv2AtomTransfer(const int32_t portIndex, const char* const atomBuf) const; | |||
| void sendOscLv2UridMap(const uint32_t urid, const char* const uri) const; | |||
| #endif | |||
| # endif | |||
| // --------------------------------------------------------------------- | |||
| #ifdef BUILD_BRIDGE_UI | |||
| void* getContainerId(); | |||
| bool uiLibOpen(const char* const filename); | |||
| bool uiLibClose(); | |||
| @@ -155,7 +155,6 @@ private: | |||
| } fUI; | |||
| #else | |||
| friend class CarlaPluginClient; | |||
| friend class JackBridgeClient; | |||
| #endif | |||
| CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaBridgeClient) | |||
| @@ -20,10 +20,6 @@ | |||
| CARLA_BRIDGE_START_NAMESPACE | |||
| #if 0 | |||
| } // Fix editor indentation | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| CarlaBridgeOsc::CarlaBridgeOsc(CarlaBridgeClient* const client) | |||
| @@ -160,42 +156,28 @@ int CarlaBridgeOsc::handleMessage(const char* const path, const int argc, const | |||
| if (std::strcmp(method, "quit") == 0) | |||
| return handleMsgQuit(); | |||
| #ifdef BRIDGE_LV2 | |||
| // LV2 methods | |||
| if (std::strcmp(method, "lv2_atom_transfer") == 0) | |||
| return handleMsgLv2AtomTransfer(argc, argv, types); | |||
| if (std::strcmp(method, "lv2_urid_map") == 0) | |||
| return handleMsgLv2UridMap(argc, argv, types); | |||
| #endif | |||
| #ifdef BUILD_BRIDGE_UI | |||
| // UI methods | |||
| if (std::strcmp(method, "configure") == 0) | |||
| return handleMsgConfigure(argc, argv, types); | |||
| return handleMsgUiConfigure(argc, argv, types); | |||
| if (std::strcmp(method, "control") == 0) | |||
| return handleMsgControl(argc, argv, types); | |||
| return handleMsgUiControl(argc, argv, types); | |||
| if (std::strcmp(method, "program") == 0) | |||
| return handleMsgProgram(argc, argv, types); | |||
| return handleMsgUiProgram(argc, argv, types); | |||
| if (std::strcmp(method, "midi-program") == 0) | |||
| return handleMsgMidiProgram(argc, argv, types); | |||
| return handleMsgUiMidiProgram(argc, argv, types); | |||
| if (std::strcmp(method, "midi") == 0) | |||
| return handleMsgMidi(argc, argv, types); | |||
| return handleMsgUiMidi(argc, argv, types); | |||
| if (std::strcmp(method, "sample-rate") == 0) | |||
| return 0; // unused | |||
| #endif | |||
| #if defined(BUILD_BRIDGE_PLUGIN) && ! defined(BRIDGE_JACK) | |||
| // Plugin methods | |||
| if (std::strcmp(method, "plugin_save_now") == 0) | |||
| return handleMsgPluginSaveNow(); | |||
| if (std::strcmp(method, "plugin_set_parameter_midi_channel") == 0) | |||
| return handleMsgPluginSetParameterMidiChannel(argc, argv, types); | |||
| if (std::strcmp(method, "plugin_set_parameter_midi_cc") == 0) | |||
| return handleMsgPluginSetParameterMidiCC(argc, argv, types); | |||
| if (std::strcmp(method, "plugin_set_chunk") == 0) | |||
| return handleMsgPluginSetChunk(argc, argv, types); | |||
| if (std::strcmp(method, "plugin_set_custom_data") == 0) | |||
| return handleMsgPluginSetCustomData(argc, argv, types); | |||
| # ifdef BRIDGE_LV2 | |||
| // LV2 methods | |||
| if (std::strcmp(method, "lv2_atom_transfer") == 0) | |||
| return handleMsgLv2UiAtomTransfer(argc, argv, types); | |||
| if (std::strcmp(method, "lv2_urid_map") == 0) | |||
| return handleMsgLv2UiUridMap(argc, argv, types); | |||
| # endif | |||
| #endif | |||
| carla_stderr("CarlaBridgeOsc::handleMessage(\"%s\", ...) - received unsupported OSC method '%s'", path, method); | |||
| @@ -233,7 +215,7 @@ int CarlaBridgeOsc::handleMsgQuit() | |||
| return 0; | |||
| } | |||
| int CarlaBridgeOsc::handleMsgConfigure(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| int CarlaBridgeOsc::handleMsgUiConfigure(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| { | |||
| CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "ss"); | |||
| CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, 1); | |||
| @@ -246,7 +228,7 @@ int CarlaBridgeOsc::handleMsgConfigure(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| (void)argv; | |||
| } | |||
| int CarlaBridgeOsc::handleMsgControl(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| int CarlaBridgeOsc::handleMsgUiControl(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| { | |||
| CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "if"); | |||
| CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, 1); | |||
| @@ -262,7 +244,7 @@ int CarlaBridgeOsc::handleMsgControl(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| return 0; | |||
| } | |||
| int CarlaBridgeOsc::handleMsgProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| int CarlaBridgeOsc::handleMsgUiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| { | |||
| CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(1, "i"); | |||
| CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, 1); | |||
| @@ -277,7 +259,7 @@ int CarlaBridgeOsc::handleMsgProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| return 0; | |||
| } | |||
| int CarlaBridgeOsc::handleMsgMidiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| int CarlaBridgeOsc::handleMsgUiMidiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| { | |||
| CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "ii"); | |||
| CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, 1); | |||
| @@ -294,7 +276,7 @@ int CarlaBridgeOsc::handleMsgMidiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| return 0; | |||
| } | |||
| int CarlaBridgeOsc::handleMsgMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| int CarlaBridgeOsc::handleMsgUiMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| { | |||
| CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(1, "m"); | |||
| CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, 1); | |||
| @@ -329,6 +311,9 @@ int CarlaBridgeOsc::handleMsgMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| return 0; | |||
| } | |||
| #endif // BUILD_BRIDGE_UI | |||
| // ----------------------------------------------------------------------- | |||
| CARLA_BRIDGE_END_NAMESPACE | |||
| @@ -94,29 +94,21 @@ private: | |||
| int handleMessage(const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg); | |||
| #ifdef BUILD_BRIDGE_UI | |||
| int handleMsgConfigure(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgControl(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgMidiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| #endif | |||
| int handleMsgShow(); | |||
| int handleMsgHide(); | |||
| int handleMsgQuit(); | |||
| #ifdef BRIDGE_LV2 | |||
| int handleMsgLv2AtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgLv2UridMap(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| #endif | |||
| #ifdef BUILD_BRIDGE_PLUGIN | |||
| int handleMsgPluginSaveNow(); | |||
| int handleMsgPluginSetParameterMidiChannel(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgPluginSetParameterMidiCC(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgPluginSetCustomData(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgPluginSetChunk(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| #ifdef BUILD_BRIDGE_UI | |||
| int handleMsgUiConfigure(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgUiControl(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgUiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgUiMidiProgram(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgUiMidi(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| # ifdef BRIDGE_LV2 | |||
| int handleMsgLv2UiAtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| int handleMsgLv2UiUridMap(CARLA_BRIDGE_OSC_HANDLE_ARGS); | |||
| # endif | |||
| #endif | |||
| // ------------------------------------------------------------------- | |||
| @@ -254,54 +254,6 @@ public: | |||
| } | |||
| // --------------------------------------------------------------------- | |||
| // plugin management | |||
| void prepareForSave() | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fEngine != nullptr,); | |||
| carla_debug("CarlaPluginClient::prepareForSave()"); | |||
| carla_prepare_for_save(0); | |||
| for (uint32_t i=0, count=carla_get_custom_data_count(0); i<count; ++i) | |||
| { | |||
| const CarlaBackend::CustomData* const cdata(carla_get_custom_data(0, i)); | |||
| CARLA_SAFE_ASSERT_CONTINUE(cdata != nullptr); | |||
| fEngine->oscSend_bridge_set_custom_data(cdata->type, cdata->key, cdata->value); | |||
| } | |||
| //if (fPlugin->getOptionsEnabled() & CarlaBackend::PLUGIN_OPTION_USE_CHUNKS) | |||
| { | |||
| //if (const char* const chunkData = carla_get_chunk_data(0)) | |||
| { | |||
| #if 0 | |||
| QString filePath; | |||
| filePath = QDir::tempPath(); | |||
| #ifdef Q_OS_WIN | |||
| filePath += "\\.CarlaChunk_"; | |||
| #else | |||
| filePath += "/.CarlaChunk_"; | |||
| #endif | |||
| filePath += fPlugin->getName(); | |||
| QFile file(filePath); | |||
| if (file.open(QIODevice::WriteOnly)) | |||
| { | |||
| QByteArray chunk((const char*)data, dataSize); | |||
| file.write(chunk); | |||
| file.close(); | |||
| fEngine->oscSend_bridge_set_chunk_data(filePath.toUtf8().constData()); | |||
| } | |||
| #endif | |||
| } | |||
| } | |||
| fEngine->oscSend_bridge_configure(CARLA_BRIDGE_MSG_SAVED, ""); | |||
| } | |||
| // --------------------------------------------------------------------- | |||
| protected: | |||
| void handleCallback(const EngineCallbackOpcode action, const int value1, const int value2, const float value3, const char* const valueStr) | |||
| @@ -386,17 +338,9 @@ int CarlaBridgeOsc::handleMsgQuit() | |||
| return 0; | |||
| } | |||
| #if 0 | |||
| // ------------------------------------------------------------------------- | |||
| int CarlaBridgeOsc::handleMsgPluginSaveNow() | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, 1); | |||
| carla_debug("CarlaBridgeOsc::handleMsgPluginSaveNow()"); | |||
| ((CarlaPluginClient*)fClient)->prepareForSave(); | |||
| return 0; | |||
| } | |||
| int CarlaBridgeOsc::handleMsgPluginSetParameterMidiChannel(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| { | |||
| CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "ii"); | |||
| @@ -474,6 +418,7 @@ int CarlaBridgeOsc::handleMsgPluginSetChunk(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| carla_set_chunk_data(0, chunkData.toRawUTF8()); | |||
| return 0; | |||
| } | |||
| #endif | |||
| CARLA_BRIDGE_END_NAMESPACE | |||
| @@ -1156,7 +1156,7 @@ private: | |||
| #define lv2ClientPtr ((CarlaLv2Client*)fClient) | |||
| int CarlaBridgeOsc::handleMsgLv2AtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| int CarlaBridgeOsc::handleMsgLv2UiAtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| { | |||
| CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "is"); | |||
| carla_debug("CarlaBridgeOsc::handleMsgLv2AtomTransfer()"); | |||
| @@ -1178,7 +1178,7 @@ int CarlaBridgeOsc::handleMsgLv2AtomTransfer(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| return 0; | |||
| } | |||
| int CarlaBridgeOsc::handleMsgLv2UridMap(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| int CarlaBridgeOsc::handleMsgLv2UiUridMap(CARLA_BRIDGE_OSC_HANDLE_ARGS) | |||
| { | |||
| CARLA_BRIDGE_OSC_CHECK_OSC_TYPES(2, "is"); | |||
| carla_debug("CarlaBridgeOsc::handleMsgLv2UridMap()"); | |||
| @@ -50,27 +50,28 @@ enum PluginBridgeInfoType { | |||
| }; | |||
| enum PluginBridgeOpcode { | |||
| kPluginBridgeOpcodeNull = 0, | |||
| kPluginBridgeOpcodeSetAudioPool = 1, // long | |||
| kPluginBridgeOpcodeSetBufferSize = 2, // int | |||
| kPluginBridgeOpcodeSetSampleRate = 3, // float | |||
| kPluginBridgeOpcodeSetParameterRt = 4, // int, float | |||
| kPluginBridgeOpcodeSetParameterNonRt = 5, // int, float | |||
| kPluginBridgeOpcodeSetProgram = 6, // int | |||
| kPluginBridgeOpcodeSetMidiProgram = 7, // int | |||
| kPluginBridgeOpcodeMidiEvent = 8, // long, int, char[] (long = timeFrame, int = size max 4) | |||
| kPluginBridgeOpcodeProcess = 9, | |||
| kPluginBridgeOpcodeQuit = 10 | |||
| kPluginBridgeOpcodeNull = 0, | |||
| kPluginBridgeOpcodeSetAudioPool = 1, // long | |||
| kPluginBridgeOpcodeSetBufferSize = 2, // int | |||
| kPluginBridgeOpcodeSetSampleRate = 3, // float | |||
| kPluginBridgeOpcodeSetParameterRt = 4, // int, float | |||
| kPluginBridgeOpcodeSetParameterNonRt = 5, // int, float | |||
| kPluginBridgeOpcodeSetParameterMidiChannel = 6, // int, float | |||
| kPluginBridgeOpcodeSetParameterMidiCC = 7, // int, float | |||
| kPluginBridgeOpcodeSetProgram = 8, // int | |||
| kPluginBridgeOpcodeSetMidiProgram = 9, // int | |||
| kPluginBridgeOpcodeSetCustomData = 10, // str, str, str | |||
| kPluginBridgeOpcodeSetChunkFile = 11, // str | |||
| kPluginBridgeOpcodePrepareForSave = 12, | |||
| kPluginBridgeOpcodeMidiEvent = 13, // long, int, char[] (long = timeFrame, int = size max 4) | |||
| kPluginBridgeOpcodeProcess = 14, | |||
| kPluginBridgeOpcodeShowUI = 15, | |||
| kPluginBridgeOpcodeHideUI = 16, | |||
| kPluginBridgeOpcodeQuit = 17 | |||
| }; | |||
| const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden | |||
| const char* const CARLA_BRIDGE_MSG_SAVED = "CarlaBridgeSaved"; //!< Plugin -> Host call, tells host state is saved | |||
| #if 0 | |||
| const char* const CARLA_BRIDGE_MSG_SAVE_NOW = "CarlaBridgeSaveNow"; //!< Host -> Plugin call, tells plugin to save state now | |||
| const char* const CARLA_BRIDGE_MSG_SET_CHUNK = "CarlaBridgeSetChunk"; //!< Host -> Plugin call, tells plugin to set chunk in file \a value | |||
| const char* const CARLA_BRIDGE_MSG_SET_CUSTOM = "CarlaBridgeSetCustom"; //!< Host -> Plugin call, tells plugin to set a custom data set using \a value ("type·key·rvalue"). | |||
| //If \a type is 'chunk' or 'binary' \a rvalue refers to chunk file. | |||
| #endif | |||
| const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden | |||
| const char* const CARLA_BRIDGE_MSG_SAVED = "CarlaBridgeSaved"; //!< Plugin -> Host call, tells host state is saved | |||
| // ----------------------------------------------------------------------- | |||