From 10c304a80df44bb931814746be07e4b7e66772d9 Mon Sep 17 00:00:00 2001 From: Kyzentun Keeslala Date: Sat, 13 Feb 2016 17:53:39 -0700 Subject: [PATCH 1/4] Add libmmmagic lights support to linux. Mostly copy paste of windows driver. --- CMake/DefineOptions.cmake | 1 + extern/CMakeLists.txt | 3 + extern/libmmmagic/linux-32bit/libmmmagic.a | Bin 0 -> 15026 bytes extern/libmmmagic/linux-64bit/libmmmagic.a | Bin 0 -> 21594 bytes src/CMakeData-arch.cmake | 8 ++ src/arch/Lights/LightsDriver.h | 4 +- src/arch/Lights/LightsDriver_Export.cpp | 2 +- .../Lights/LightsDriver_LinuxMinimaid.cpp | 96 ++++++++++++++++++ src/arch/Lights/LightsDriver_LinuxMinimaid.h | 74 ++++++++++++++ .../Lights/LightsDriver_LinuxParallel.cpp | 2 +- .../Lights/LightsDriver_LinuxWeedTech.cpp | 2 +- src/arch/Lights/LightsDriver_Linux_PIUIO.cpp | 2 +- .../Lights/LightsDriver_Linux_PIUIO_Leds.cpp | 2 +- src/arch/Lights/LightsDriver_SextetStream.cpp | 2 +- .../Lights/LightsDriver_SystemMessage.cpp | 2 +- .../Lights/LightsDriver_Win32Minimaid.cpp | 2 +- .../Lights/LightsDriver_Win32Parallel.cpp | 2 +- 17 files changed, 193 insertions(+), 11 deletions(-) create mode 100644 extern/libmmmagic/linux-32bit/libmmmagic.a create mode 100644 extern/libmmmagic/linux-64bit/libmmmagic.a create mode 100644 src/arch/Lights/LightsDriver_LinuxMinimaid.cpp create mode 100644 src/arch/Lights/LightsDriver_LinuxMinimaid.h diff --git a/CMake/DefineOptions.cmake b/CMake/DefineOptions.cmake index 677d6000eb..0a3240587a 100644 --- a/CMake/DefineOptions.cmake +++ b/CMake/DefineOptions.cmake @@ -61,6 +61,7 @@ elseif(LINUX) # Builder beware: later versions of ffmpeg may break! option(WITH_SYSTEM_FFMPEG "Build with the system's FFMPEG, disabled build with bundled's FFMPEG" OFF) option(WITH_CRYSTALHD_DISABLED "Build FFMPEG without Crystal HD support." OFF) + option(WITH_MINIMAID "Build with Minimaid Lights Support." ON) option(WITH_TTY "Build with Linux TTY Input Support." OFF) option(WITH_PROFILING "Build with Profiling Support." OFF) option(WITH_GLES2 "Build with OpenGL ES 2.0 Support." ON) diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt index 46284d6fcc..debf46856b 100644 --- a/extern/CMakeLists.txt +++ b/extern/CMakeLists.txt @@ -14,6 +14,9 @@ endif() if (NOT SYSTEM_PCRE_FOUND) include(CMakeProject-pcre.cmake) endif() +if (LINUX) + include(CMakeProject-mmmagic.cmake) +endif() include(CMakeProject-tomcrypt.cmake) include(CMakeProject-tommath.cmake) include(CMakeProject-png.cmake) diff --git a/extern/libmmmagic/linux-32bit/libmmmagic.a b/extern/libmmmagic/linux-32bit/libmmmagic.a new file mode 100644 index 0000000000000000000000000000000000000000..7ed07034f97a86e65cbed2a6bf4960921cef8401 GIT binary patch literal 15026 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 I-u2A?0VRpBjQ{`u literal 0 HcmV?d00001 diff --git a/extern/libmmmagic/linux-64bit/libmmmagic.a b/extern/libmmmagic/linux-64bit/libmmmagic.a new file mode 100644 index 0000000000000000000000000000000000000000..c90874f6eaf1ebe770750cc83267c160a1c377b1 GIT binary patch literal 21594 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 BzxMzD literal 0 HcmV?d00001 diff --git a/src/CMakeData-arch.cmake b/src/CMakeData-arch.cmake index f99120e3b3..e23e5036e7 100644 --- a/src/CMakeData-arch.cmake +++ b/src/CMakeData-arch.cmake @@ -319,6 +319,14 @@ if(NOT APPLE) "arch/Lights/LightsDriver_LinuxParallel.h" ) endif() + if (WITH_MINIMAID) + list(APPEND SMDATA_ARCH_LIGHTS_SRC + "arch/Lights/LightsDriver_LinuxMinimaid.cpp" + ) + list(APPEND SMDATA_ARCH_LIGHTS_HPP + "arch/Lights/LightsDriver_LinuxMinimaid.h" + ) + endif() endif() endif(WIN32) endif(NOT APPLE) diff --git a/src/arch/Lights/LightsDriver.h b/src/arch/Lights/LightsDriver.h index 5420f25cf5..b785fd3676 100644 --- a/src/arch/Lights/LightsDriver.h +++ b/src/arch/Lights/LightsDriver.h @@ -18,9 +18,9 @@ public: virtual void Set( const LightsState *ls ) = 0; }; -#define REGISTER_SOUND_DRIVER_CLASS2( name, x ) \ +#define REGISTER_LIGHTS_DRIVER_CLASS2( name, x ) \ static RegisterRageDriver register_##x( &LightsDriver::m_pDriverList, #name, CreateClass ) -#define REGISTER_SOUND_DRIVER_CLASS( name ) REGISTER_SOUND_DRIVER_CLASS2( name, name ) +#define REGISTER_LIGHTS_DRIVER_CLASS( name ) REGISTER_LIGHTS_DRIVER_CLASS2( name, name ) #endif diff --git a/src/arch/Lights/LightsDriver_Export.cpp b/src/arch/Lights/LightsDriver_Export.cpp index 17e70356ee..9d0e3a4dee 100644 --- a/src/arch/Lights/LightsDriver_Export.cpp +++ b/src/arch/Lights/LightsDriver_Export.cpp @@ -1,7 +1,7 @@ #include "global.h" #include "LightsDriver_Export.h" -REGISTER_SOUND_DRIVER_CLASS(Export); +REGISTER_LIGHTS_DRIVER_CLASS(Export); RageMutex LightsDriver_Export::m_Lock( "LightsDriver_Export"); LightsState LightsDriver_Export::m_State; diff --git a/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp b/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp new file mode 100644 index 0000000000..ab49256f2c --- /dev/null +++ b/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp @@ -0,0 +1,96 @@ +// LightsDriver_Win32Minimaid - driver for lights on the Minimaid with libmmmagic +/* To use, StepMania must be run with root permissions, or udev rule for the + * device must be made something like this (but it's not quite right): + * echo SUBSYSTEM==\"usb\", ATTR{idVendor}==\"beef\", ATTR{idProduct}==\"5730\", MODE=\"0666\" > /etc/udev/rules.d/50-minimaid + */ + +#include "global.h" +#include "LightsDriver_LinuxMinimaid.h" + +REGISTER_LIGHTS_DRIVER_CLASS( LinuxMinimaid ); + +LightsDriver_LinuxMinimaid::LightsDriver_LinuxMinimaid() +{ + _mmmagic_loaded= true; + mm_connect_minimaid(); + mm_setKB(true); +} + +LightsDriver_LinuxMinimaid::~LightsDriver_LinuxMinimaid() +{ + +} + +void LightsDriver_LinuxMinimaid::Set(LightsState const* ls) +{ + if(_mmmagic_loaded) + { + mm_setDDRAllOff(); + + // Set the cabinet light values + if(ls->m_bCabinetLights[LIGHT_MARQUEE_UP_LEFT]) + { + mm_setDDRCabinetLight(DDR_DOUBLE_MARQUEE_UPPER_LEFT, 1); + } + if(ls->m_bCabinetLights[LIGHT_MARQUEE_UP_RIGHT]) + { + mm_setDDRCabinetLight(DDR_DOUBLE_MARQUEE_UPPER_RIGHT, 1); + } + if(ls->m_bCabinetLights[LIGHT_MARQUEE_LR_LEFT]) + { + mm_setDDRCabinetLight(DDR_DOUBLE_MARQUEE_LOWER_LEFT, 1); + } + if(ls->m_bCabinetLights[LIGHT_MARQUEE_LR_RIGHT]) + { + mm_setDDRCabinetLight(DDR_DOUBLE_MARQUEE_LOWER_RIGHT, 1); + } + if(ls->m_bCabinetLights[LIGHT_BASS_LEFT] || ls->m_bCabinetLights[LIGHT_BASS_RIGHT]) + { + mm_setDDRBassLight(DDR_DOUBLE_BASS_LIGHTS, 1); + } + + if(ls->m_bGameButtonLights[GameController_1][DANCE_BUTTON_LEFT]) + { + mm_setDDRPad1Light(DDR_DOUBLE_PAD_LEFT, 1); + } + if(ls->m_bGameButtonLights[GameController_1][DANCE_BUTTON_RIGHT]) + { + mm_setDDRPad1Light(DDR_DOUBLE_PAD_RIGHT, 1); + } + if(ls->m_bGameButtonLights[GameController_1][DANCE_BUTTON_UP]) + { + mm_setDDRPad1Light(DDR_DOUBLE_PAD_UP, 1); + } + if(ls->m_bGameButtonLights[GameController_1][DANCE_BUTTON_DOWN]) + { + mm_setDDRPad1Light(DDR_DOUBLE_PAD_DOWN, 1); + } + if(ls->m_bGameButtonLights[GameController_1][GAME_BUTTON_START]) + { + mm_setDDRCabinetLight(DDR_DOUBLE_PLAYER1_PANEL, 1); + } + if(ls->m_bGameButtonLights[GameController_2][DANCE_BUTTON_LEFT]) + { + mm_setDDRPad2Light(DDR_DOUBLE_PAD_LEFT, 1); + } + if(ls->m_bGameButtonLights[GameController_2][DANCE_BUTTON_RIGHT]) + { + mm_setDDRPad2Light(DDR_DOUBLE_PAD_RIGHT, 1); + } + if(ls->m_bGameButtonLights[GameController_2][DANCE_BUTTON_UP]) + { + mm_setDDRPad2Light(DDR_DOUBLE_PAD_UP, 1); + } + if(ls->m_bGameButtonLights[GameController_2][DANCE_BUTTON_DOWN]) + { + mm_setDDRPad2Light(DDR_DOUBLE_PAD_DOWN, 1); + } + if(ls->m_bGameButtonLights[GameController_2][GAME_BUTTON_START]) + { + mm_setDDRCabinetLight(DDR_DOUBLE_PLAYER2_PANEL, 1); + } + + // Output the information + mm_sendDDRMiniMaidUpdate(); + } +} diff --git a/src/arch/Lights/LightsDriver_LinuxMinimaid.h b/src/arch/Lights/LightsDriver_LinuxMinimaid.h new file mode 100644 index 0000000000..3f135b9173 --- /dev/null +++ b/src/arch/Lights/LightsDriver_LinuxMinimaid.h @@ -0,0 +1,74 @@ +/* LightsDriver_LinuxMinimaid - Minimaid based lights with libmmmagic */ + +#ifndef LightsDriver_LinuxMinimaid_H +#define LightsDriver_LinuxMinimaid_H + +#include "LightsDriver.h" + +#define DDR_DOUBLE_BASS_LIGHTS 0 //unknown but guessed +#define DDR_DOUBLE_PLAYER1_PANEL 2 +#define DDR_DOUBLE_PLAYER2_PANEL 3 +#define DDR_DOUBLE_MARQUEE_LOWER_RIGHT 4 +#define DDR_DOUBLE_MARQUEE_UPPER_RIGHT 5 +#define DDR_DOUBLE_MARQUEE_LOWER_LEFT 6 +#define DDR_DOUBLE_MARQUEE_UPPER_LEFT 7 + +//PADX_LIGHTS +#define DDR_DOUBLE_PAD_UP 0 +#define DDR_DOUBLE_PAD_DOWN 1 +#define DDR_DOUBLE_PAD_LEFT 2 +#define DDR_DOUBLE_PAD_RIGHT 3 +#define DDR_DOUBLE_PAD_RESET 4 + +#define BIT(i) (1<<(i)) +#define BIT_IS_SET(v,i) ((v&BIT(i))!=0) + +static bool _mmmagic_loaded=false; + +typedef bool (*__BITVALID)(int); +static __BITVALID __bitValid; + +// minimaid prototypes +typedef void (*MM_SETDDRPAD1LIGHT)(int, int); +typedef void (*MM_SETDDRPAD2LIGHT)(int, int); +typedef void (*MM_SETCABINETLIGHT)(int, int); +typedef void (*MM_SETDDRBASSLIGHT)(int, int); +static MM_SETDDRPAD1LIGHT mm_setDDRPad1Light; +static MM_SETDDRPAD2LIGHT mm_setDDRPad2Light; +static MM_SETCABINETLIGHT mm_setDDRCabinetLight; +static MM_SETDDRBASSLIGHT mm_setDDRBassLight; + +typedef bool (*MM_CONNECT_MINIMAID)(); +typedef bool (*MM_SETKB)(bool val); +static MM_CONNECT_MINIMAID mm_connect_minimaid; +static MM_SETKB mm_setKB; + +typedef void (*MM_SETDDRALLON)(); +typedef void (*MM_SETDDRALLOFF)(); +static MM_SETDDRALLON mm_setDDRAllOn; +static MM_SETDDRALLOFF mm_setDDRAllOff; + +typedef void (*MM_SETBLUELED)(unsigned char); +typedef void (*MM_SETMMOUTPUTREPORTS)(unsigned char, unsigned char, unsigned char, unsigned char); +typedef bool (*MM_SENDDDRMINIMAIDUPDATE)(); +static MM_SETBLUELED mm_setBlueLED; +static MM_SETMMOUTPUTREPORTS mm_setMMOutputReports; +static MM_SENDDDRMINIMAIDUPDATE mm_sendDDRMiniMaidUpdate; + +typedef void (*MM_INIT)(); +typedef void (*MM_TURNON)(unsigned char, int); +typedef bool (*MM_TURNOFF)(unsigned char, int); +static MM_INIT mm_init; +static MM_TURNON mm_turnON; +static MM_TURNOFF mm_turnOFF; + +class LightsDriver_LinuxMinimaid : public LightsDriver +{ +public: + LightsDriver_LinuxMinimaid(); + + virtual ~LightsDriver_LinuxMinimaid(); + virtual void Set( const LightsState *ls ); +}; + +#endif diff --git a/src/arch/Lights/LightsDriver_LinuxParallel.cpp b/src/arch/Lights/LightsDriver_LinuxParallel.cpp index 6a54e61cc4..ff036e9d2d 100644 --- a/src/arch/Lights/LightsDriver_LinuxParallel.cpp +++ b/src/arch/Lights/LightsDriver_LinuxParallel.cpp @@ -13,7 +13,7 @@ static const int PORT_ADDRESS = 0x378; static const bool SCREEN_DEBUG = false; -REGISTER_SOUND_DRIVER_CLASS(LinuxParallel); +REGISTER_LIGHTS_DRIVER_CLASS(LinuxParallel); LightsDriver_LinuxParallel::LightsDriver_LinuxParallel() { diff --git a/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp b/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp index 4c10a5fe0d..79f4aeea46 100644 --- a/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp +++ b/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp @@ -15,7 +15,7 @@ #include "LightsDriver_LinuxWeedTech.h" #include "RageLog.h" -REGISTER_SOUND_DRIVER_CLASS(LinuxWeedTech); +REGISTER_LIGHTS_DRIVER_CLASS(LinuxWeedTech); // Begin serial driver static int fd = -1; diff --git a/src/arch/Lights/LightsDriver_Linux_PIUIO.cpp b/src/arch/Lights/LightsDriver_Linux_PIUIO.cpp index ce62629d46..bf2536bb3f 100644 --- a/src/arch/Lights/LightsDriver_Linux_PIUIO.cpp +++ b/src/arch/Lights/LightsDriver_Linux_PIUIO.cpp @@ -16,7 +16,7 @@ #include "Game.h" #include "RageLog.h" -REGISTER_SOUND_DRIVER_CLASS2(PIUIO, Linux_PIUIO); +REGISTER_LIGHTS_DRIVER_CLASS2(PIUIO, Linux_PIUIO); LightsDriver_Linux_PIUIO::LightsDriver_Linux_PIUIO() { diff --git a/src/arch/Lights/LightsDriver_Linux_PIUIO_Leds.cpp b/src/arch/Lights/LightsDriver_Linux_PIUIO_Leds.cpp index c0c24a7244..083e96777f 100644 --- a/src/arch/Lights/LightsDriver_Linux_PIUIO_Leds.cpp +++ b/src/arch/Lights/LightsDriver_Linux_PIUIO_Leds.cpp @@ -16,7 +16,7 @@ #include "Game.h" #include "RageLog.h" -REGISTER_SOUND_DRIVER_CLASS2(PIUIO_Leds, Linux_PIUIO_Leds); +REGISTER_LIGHTS_DRIVER_CLASS2(PIUIO_Leds, Linux_PIUIO_Leds); namespace { const char *cabinet_leds[NUM_CabinetLight] = { diff --git a/src/arch/Lights/LightsDriver_SextetStream.cpp b/src/arch/Lights/LightsDriver_SextetStream.cpp index 88510e351a..862590d156 100644 --- a/src/arch/Lights/LightsDriver_SextetStream.cpp +++ b/src/arch/Lights/LightsDriver_SextetStream.cpp @@ -227,7 +227,7 @@ void LightsDriver_SextetStream::Set(const LightsState *ls) // LightsDriver_SextetStreamToFile implementation -REGISTER_SOUND_DRIVER_CLASS(SextetStreamToFile); +REGISTER_LIGHTS_DRIVER_CLASS(SextetStreamToFile); #if defined(_WINDOWS) #define DEFAULT_OUTPUT_FILENAME "\\\\.\\pipe\\StepMania-Lights-SextetStream" diff --git a/src/arch/Lights/LightsDriver_SystemMessage.cpp b/src/arch/Lights/LightsDriver_SystemMessage.cpp index b405a6e10f..c514604248 100644 --- a/src/arch/Lights/LightsDriver_SystemMessage.cpp +++ b/src/arch/Lights/LightsDriver_SystemMessage.cpp @@ -4,7 +4,7 @@ #include "InputMapper.h" #include "PrefsManager.h" -REGISTER_SOUND_DRIVER_CLASS(SystemMessage); +REGISTER_LIGHTS_DRIVER_CLASS(SystemMessage); LightsDriver_SystemMessage::LightsDriver_SystemMessage() { diff --git a/src/arch/Lights/LightsDriver_Win32Minimaid.cpp b/src/arch/Lights/LightsDriver_Win32Minimaid.cpp index 96326de09f..9fe82521da 100644 --- a/src/arch/Lights/LightsDriver_Win32Minimaid.cpp +++ b/src/arch/Lights/LightsDriver_Win32Minimaid.cpp @@ -8,7 +8,7 @@ #include "LightsDriver_Win32Minimaid.h" #include "windows.h" -REGISTER_SOUND_DRIVER_CLASS( Win32Minimaid ); +REGISTER_LIGHTS_DRIVER_CLASS( Win32Minimaid ); HINSTANCE hMMMAGICDLL = NULL; diff --git a/src/arch/Lights/LightsDriver_Win32Parallel.cpp b/src/arch/Lights/LightsDriver_Win32Parallel.cpp index 85913a89c1..93e52b15d4 100644 --- a/src/arch/Lights/LightsDriver_Win32Parallel.cpp +++ b/src/arch/Lights/LightsDriver_Win32Parallel.cpp @@ -3,7 +3,7 @@ #include "windows.h" #include "RageUtil.h" -REGISTER_SOUND_DRIVER_CLASS(Win32Parallel); +REGISTER_LIGHTS_DRIVER_CLASS(Win32Parallel); HINSTANCE hDLL = NULL; From 385c1dd5255ac8102859790f4ed36084655e6950 Mon Sep 17 00:00:00 2001 From: Kyzentun Keeslala Date: Sun, 14 Feb 2016 22:58:57 -0700 Subject: [PATCH 2/4] Forgot to add mmmagic cmake project file. --- extern/CMakeProject-mmmagic.cmake | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 extern/CMakeProject-mmmagic.cmake diff --git a/extern/CMakeProject-mmmagic.cmake b/extern/CMakeProject-mmmagic.cmake new file mode 100644 index 0000000000..83a8499a75 --- /dev/null +++ b/extern/CMakeProject-mmmagic.cmake @@ -0,0 +1,13 @@ +if(LINUX) + if(WITH_MINIMAID) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + list(APPEND SMDATA_LINK_LIB + "${SM_EXTERN_DIR}/libmmmagic/linux-64bit/libmmmagic.a" + ) + else() + list(APPEND SMDATA_LINK_LIB + "${SM_EXTERN_DIR}/libmmmagic/linux-32bit/libmmmagic.a" + ) + endif() + endif() +endif() From 4b0e6f3e0a358a901092fe3f73dde380a988b1c9 Mon Sep 17 00:00:00 2001 From: Kyzentun Keeslala Date: Tue, 16 Feb 2016 20:06:46 -0700 Subject: [PATCH 3/4] Moved minimaid linking command to proper place in src/CMakeLists.txt. Removed wrapper function pointers from LightsDriver_LinuxMinimaid.h because it doesn't load a dynamic lib. Link udev when linking libmmmagic. --- extern/CMakeLists.txt | 3 -- extern/CMakeProject-mmmagic.cmake | 2 + src/CMakeLists.txt | 1 + .../Lights/LightsDriver_LinuxMinimaid.cpp | 8 +++- src/arch/Lights/LightsDriver_LinuxMinimaid.h | 37 ------------------- 5 files changed, 9 insertions(+), 42 deletions(-) diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt index debf46856b..46284d6fcc 100644 --- a/extern/CMakeLists.txt +++ b/extern/CMakeLists.txt @@ -14,9 +14,6 @@ endif() if (NOT SYSTEM_PCRE_FOUND) include(CMakeProject-pcre.cmake) endif() -if (LINUX) - include(CMakeProject-mmmagic.cmake) -endif() include(CMakeProject-tomcrypt.cmake) include(CMakeProject-tommath.cmake) include(CMakeProject-png.cmake) diff --git a/extern/CMakeProject-mmmagic.cmake b/extern/CMakeProject-mmmagic.cmake index 83a8499a75..df02cb8990 100644 --- a/extern/CMakeProject-mmmagic.cmake +++ b/extern/CMakeProject-mmmagic.cmake @@ -3,10 +3,12 @@ if(LINUX) if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") list(APPEND SMDATA_LINK_LIB "${SM_EXTERN_DIR}/libmmmagic/linux-64bit/libmmmagic.a" + "udev" ) else() list(APPEND SMDATA_LINK_LIB "${SM_EXTERN_DIR}/libmmmagic/linux-32bit/libmmmagic.a" + "udev" ) endif() endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7135e1a12f..a6247522e7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -331,6 +331,7 @@ list(APPEND SMDATA_LINK_LIB "glew" "jpeg" ) +include(../extern/CMakeProject-mmmagic.cmake) if (HAS_MP3) list(FIND SMDATA_LINK_LIB "jsoncpp" JSON_INDEX) diff --git a/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp b/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp index ab49256f2c..63f4496d1f 100644 --- a/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp +++ b/src/arch/Lights/LightsDriver_LinuxMinimaid.cpp @@ -1,4 +1,4 @@ -// LightsDriver_Win32Minimaid - driver for lights on the Minimaid with libmmmagic +// LightsDriver_LinuxMinimaid - driver for lights on the Minimaid with libmmmagic /* To use, StepMania must be run with root permissions, or udev rule for the * device must be made something like this (but it's not quite right): * echo SUBSYSTEM==\"usb\", ATTR{idVendor}==\"beef\", ATTR{idProduct}==\"5730\", MODE=\"0666\" > /etc/udev/rules.d/50-minimaid @@ -6,11 +6,14 @@ #include "global.h" #include "LightsDriver_LinuxMinimaid.h" +#include "../../../extern/libmmmagic/mmmagic.h" REGISTER_LIGHTS_DRIVER_CLASS( LinuxMinimaid ); LightsDriver_LinuxMinimaid::LightsDriver_LinuxMinimaid() { + // libmmmagic is actually statically linked in, so there's no wrapper + // initializing to do. -Kyz _mmmagic_loaded= true; mm_connect_minimaid(); mm_setKB(true); @@ -18,7 +21,8 @@ LightsDriver_LinuxMinimaid::LightsDriver_LinuxMinimaid() LightsDriver_LinuxMinimaid::~LightsDriver_LinuxMinimaid() { - + // libmmmagic is actually statically linked in, so there's no wrapper + // destruction to do. -Kyz } void LightsDriver_LinuxMinimaid::Set(LightsState const* ls) diff --git a/src/arch/Lights/LightsDriver_LinuxMinimaid.h b/src/arch/Lights/LightsDriver_LinuxMinimaid.h index 3f135b9173..72d1641462 100644 --- a/src/arch/Lights/LightsDriver_LinuxMinimaid.h +++ b/src/arch/Lights/LightsDriver_LinuxMinimaid.h @@ -25,43 +25,6 @@ static bool _mmmagic_loaded=false; -typedef bool (*__BITVALID)(int); -static __BITVALID __bitValid; - -// minimaid prototypes -typedef void (*MM_SETDDRPAD1LIGHT)(int, int); -typedef void (*MM_SETDDRPAD2LIGHT)(int, int); -typedef void (*MM_SETCABINETLIGHT)(int, int); -typedef void (*MM_SETDDRBASSLIGHT)(int, int); -static MM_SETDDRPAD1LIGHT mm_setDDRPad1Light; -static MM_SETDDRPAD2LIGHT mm_setDDRPad2Light; -static MM_SETCABINETLIGHT mm_setDDRCabinetLight; -static MM_SETDDRBASSLIGHT mm_setDDRBassLight; - -typedef bool (*MM_CONNECT_MINIMAID)(); -typedef bool (*MM_SETKB)(bool val); -static MM_CONNECT_MINIMAID mm_connect_minimaid; -static MM_SETKB mm_setKB; - -typedef void (*MM_SETDDRALLON)(); -typedef void (*MM_SETDDRALLOFF)(); -static MM_SETDDRALLON mm_setDDRAllOn; -static MM_SETDDRALLOFF mm_setDDRAllOff; - -typedef void (*MM_SETBLUELED)(unsigned char); -typedef void (*MM_SETMMOUTPUTREPORTS)(unsigned char, unsigned char, unsigned char, unsigned char); -typedef bool (*MM_SENDDDRMINIMAIDUPDATE)(); -static MM_SETBLUELED mm_setBlueLED; -static MM_SETMMOUTPUTREPORTS mm_setMMOutputReports; -static MM_SENDDDRMINIMAIDUPDATE mm_sendDDRMiniMaidUpdate; - -typedef void (*MM_INIT)(); -typedef void (*MM_TURNON)(unsigned char, int); -typedef bool (*MM_TURNOFF)(unsigned char, int); -static MM_INIT mm_init; -static MM_TURNON mm_turnON; -static MM_TURNOFF mm_turnOFF; - class LightsDriver_LinuxMinimaid : public LightsDriver { public: From d3ca850ea63e2c6a1b6694ebe87a6f64aaeead46 Mon Sep 17 00:00:00 2001 From: Kyzentun Keeslala Date: Tue, 16 Feb 2016 20:11:58 -0700 Subject: [PATCH 4/4] Forgot to add mmmagic.h --- extern/libmmmagic/mmmagic.h | 75 +++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 extern/libmmmagic/mmmagic.h diff --git a/extern/libmmmagic/mmmagic.h b/extern/libmmmagic/mmmagic.h new file mode 100644 index 0000000000..fc17938c4e --- /dev/null +++ b/extern/libmmmagic/mmmagic.h @@ -0,0 +1,75 @@ +/* +IMPORTANT NOTE FOR *NIX USERS: +You must add permissions to access the minimaid as a user! Either do this through udev or manually or something.The below should work but fuck if it works for me :/ + + +sudo -i +echo SUBSYSTEM==\"usb\", ATTR{idVendor}==\"beef\", ATTR{idProduct}==\"5730\", MODE=\"0666\" > /etc/udev/rules.d/50-minimaid + + + +*/ + +#ifndef MMMAGIC_H +#define MMMAGIC_H + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/*Minimaid bit identifiers*/ +//CANINET_LIGHTS +#define DDR_DOUBLE_BASS_LIGHTS 0 //unknown but guessed +#define DDR_DOUBLE_PLAYER1_PANEL 2 +#define DDR_DOUBLE_PLAYER2_PANEL 3 +#define DDR_DOUBLE_MARQUEE_LOWER_RIGHT 4 +#define DDR_DOUBLE_MARQUEE_UPPER_RIGHT 5 +#define DDR_DOUBLE_MARQUEE_LOWER_LEFT 6 +#define DDR_DOUBLE_MARQUEE_UPPER_LEFT 7 + +//PADX_LIGHTS +#define DDR_DOUBLE_PAD_UP 0 +#define DDR_DOUBLE_PAD_DOWN 1 +#define DDR_DOUBLE_PAD_LEFT 2 +#define DDR_DOUBLE_PAD_RIGHT 3 +#define DDR_DOUBLE_PAD_RESET 4 + +#define BIT(i) (1<<(i)) +#define BIT_IS_SET(v,i) ((v&BIT(i))!=0) +static bool __bitValid(int bit); + + +//minimaid prototypes +void mm_setDDRPad1Light(int, int); +void mm_setDDRPad2Light(int, int); +void mm_setDDRCabinetLight(int, int); +void mm_setDDRBassLight(int, int); + + +bool mm_connect_minimaid(); +bool mm_setKB(bool val); + +void mm_setDDRAllOn(); +void mm_setDDRAllOff(); + +void mm_setBlueLED(unsigned char value); +void mm_setMMOutputReports(unsigned char a, unsigned char b, unsigned char c, unsigned char d); +bool mm_sendDDRMiniMaidUpdate(); +static void mm_init(); +static unsigned char mm_turnON(unsigned char set, int bit); +static unsigned char mm_turnOFF(unsigned char set, int bit); + + + +//void mm_input_callback(void *ctx); + +#ifdef __cplusplus +} +#endif + +#endif