| @@ -15,37 +15,167 @@ | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | * For a full copy of the GNU General Public License see the doc/GPL.txt file. | ||||
| */ | */ | ||||
| #include "CarlaUtils.hpp" | |||||
| #include "CarlaString.hpp" | |||||
| #include "rewire/ReWirePanelAPI.h" | #include "rewire/ReWirePanelAPI.h" | ||||
| int main(/*int argc, char* argv[]*/) | |||||
| { | |||||
| ReWire::ReWireError result; | |||||
| // ----------------------------------------------------------------------- | |||||
| // remove this | |||||
| namespace ReWire { | |||||
| extern "C" { | |||||
| typedef const char* TReWireFileSpec; | |||||
| } | |||||
| } | |||||
| result = ReWire::RWPOpen(); | |||||
| ReWire::TReWireFileSpec kDeviceSpec = "/home/falktx/.wine32/drive_c/Program Files/Image-Line/FL Studio 11/System/Plugin/ReWire/FLReWire.dll"; | |||||
| if (result == ReWire::kReWireError_NoError) | |||||
| // ----------------------------------------------------------------------- | |||||
| class RewireThing | |||||
| { | |||||
| public: | |||||
| RewireThing() | |||||
| : fIsOpen(false), | |||||
| fIsRegistered(false), | |||||
| fIsLoaded(false), | |||||
| fHandle(0) | |||||
| { | { | ||||
| carla_stdout("opened ok"); | |||||
| fDevName = ""; | |||||
| } | } | ||||
| else | |||||
| ~RewireThing() | |||||
| { | { | ||||
| carla_stdout("opened failed"); | |||||
| return 1; | |||||
| close(); | |||||
| } | } | ||||
| result = ReWire::RWPClose(); | |||||
| bool open() | |||||
| { | |||||
| CARLA_SAFE_ASSERT_RETURN(! fIsOpen, true); | |||||
| const ReWire::ReWireError result(ReWire::RWPOpen()); | |||||
| if (result == ReWire::kReWireError_NoError) | |||||
| { | |||||
| fIsOpen = true; | |||||
| carla_stderr("rewire open ok"); | |||||
| } | |||||
| else | |||||
| { | |||||
| carla_stderr2("rewire open failed"); | |||||
| } | |||||
| if (result == ReWire::kReWireError_NoError) | |||||
| return fIsOpen; | |||||
| } | |||||
| bool start() | |||||
| { | { | ||||
| carla_stdout("closed ok"); | |||||
| char isRunningFlag = 0; | |||||
| ReWire::ReWireError result = ReWire::RWPIsReWireMixerAppRunning(&isRunningFlag); | |||||
| if (isRunningFlag == 0) | |||||
| { | |||||
| carla_stderr("rewire mixer is NOT running"); | |||||
| result = ReWire::RWPRegisterDevice(kDeviceSpec); | |||||
| if (result == ReWire::kReWireError_NoError) | |||||
| { | |||||
| fIsRegistered = true; | |||||
| carla_stderr("rewire register ok"); | |||||
| } | |||||
| else if (result == ReWire::kReWireError_AlreadyExists) | |||||
| { | |||||
| fIsRegistered = true; | |||||
| carla_stderr("rewire register already in place"); | |||||
| } | |||||
| else | |||||
| { | |||||
| carla_stderr2("rewire register failed %i", result); | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| carla_stderr("rewire mixer is running"); | |||||
| } | |||||
| return false; | |||||
| } | } | ||||
| else | |||||
| void close() | |||||
| { | { | ||||
| carla_stdout("closed failed"); | |||||
| return 1; | |||||
| if (! fIsOpen) | |||||
| { | |||||
| CARLA_SAFE_ASSERT(! fIsLoaded); | |||||
| CARLA_SAFE_ASSERT(fHandle == 0); | |||||
| return; | |||||
| } | |||||
| if (fHandle != 0) | |||||
| { | |||||
| const ReWire::ReWireError result(ReWire::RWPComDisconnect(fHandle)); | |||||
| fHandle = 0; | |||||
| if (result == ReWire::kReWireError_NoError) | |||||
| carla_stderr("rewire disconnect ok"); | |||||
| else | |||||
| carla_stderr2("rewire disconnect failed"); | |||||
| } | |||||
| if (fIsLoaded) | |||||
| { | |||||
| const ReWire::ReWireError result(ReWire::RWPUnloadDevice(fDevName.getBuffer())); | |||||
| fIsLoaded = false; | |||||
| if (result == ReWire::kReWireError_NoError) | |||||
| carla_stderr("rewire unload ok"); | |||||
| else | |||||
| carla_stderr2("rewire unload failed"); | |||||
| } | |||||
| if (fIsRegistered) | |||||
| { | |||||
| const ReWire::ReWireError result(ReWire::RWPUnregisterDevice(kDeviceSpec)); | |||||
| fIsRegistered = false; | |||||
| if (result == ReWire::kReWireError_NoError) | |||||
| carla_stderr("rewire unregister ok"); | |||||
| else | |||||
| carla_stderr2("rewire unregister failed"); | |||||
| } | |||||
| const ReWire::ReWireError result(ReWire::RWPClose()); | |||||
| if (result == ReWire::kReWireError_NoError) | |||||
| carla_stderr("rewire close ok"); | |||||
| else | |||||
| carla_stderr2("rewire close failed"); | |||||
| fIsOpen = false; | |||||
| } | } | ||||
| private: | |||||
| bool fIsOpen; | |||||
| bool fIsRegistered; | |||||
| bool fIsLoaded; | |||||
| ReWire::TRWPPortHandle fHandle; | |||||
| CarlaString fDevName; | |||||
| }; | |||||
| // ----------------------------------------------------------------------- | |||||
| int main(/*int argc, char* argv[]*/) | |||||
| { | |||||
| RewireThing re; | |||||
| if (! re.open()) | |||||
| return 1; | |||||
| re.start(); | |||||
| re.close(); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| // ----------------------------------------------------------------------- | |||||