add pkgingo's (Win32) Minimaid driver.

* new makefile config option "HAVE_MINIMAID"
* update all Visual Studio projects
This commit is contained in:
freem
2014-08-02 00:38:20 -07:00
committed by Jonathan Payne
parent 1f979fff5f
commit 194c8de8f8
10 changed files with 235 additions and 0 deletions
+4
View File
@@ -400,6 +400,10 @@ if WINDOWS
if HAVE_PARALLEL_PORT
Lights += arch/Lights/LightsDriver_Win32Parallel.cpp arch/Lights/LightsDriver_Win32Parallel.h
endif
if HAVE_MINIMAID
Lights += arch/Lights/LightsDriver_Win32Minimaid.cpp arch/Lights/LightsDriver_Win32Minimaid.h
endif
if !HAVE_PTHREAD
Threads += arch/Threads/Threads_Win32.cpp arch/Threads/Threads_Win32.h
+8
View File
@@ -2430,6 +2430,14 @@
RelativePath="arch\Lights\LightsDriver_SystemMessage.h"
>
</File>
<File
RelativePath="arch\Lights\LightsDriver_Win32Minimaid.cpp"
>
</File>
<File
RelativePath="arch\Lights\LightsDriver_Win32Minimaid.h"
>
</File>
<File
RelativePath="arch\Lights\LightsDriver_Win32Parallel.cpp"
>
+2
View File
@@ -580,6 +580,7 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)</Command>
<ClCompile Include="arch\Lights\LightsDriver.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Export.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp" />
<ClCompile Include="archutils\Win32\AppInstance.cpp" />
<ClCompile Include="archutils\Win32\arch_setup.cpp" />
@@ -1898,6 +1899,7 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)</Command>
<ClInclude Include="arch\Lights\LightsDriver.h" />
<ClInclude Include="arch\Lights\LightsDriver_Export.h" />
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h" />
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h" />
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h" />
<ClInclude Include="archutils\Win32\AppInstance.h" />
<ClInclude Include="archutils\Win32\arch_setup.h" />
+6
View File
@@ -747,6 +747,9 @@
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
@@ -2270,6 +2273,9 @@
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
+2
View File
@@ -606,6 +606,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"</Command>
<ClCompile Include="arch\Lights\LightsDriver.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Export.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp" />
<ClCompile Include="archutils\Win32\AppInstance.cpp" />
<ClCompile Include="archutils\Win32\arch_setup.cpp" />
@@ -1484,6 +1485,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"</Command>
<ClInclude Include="arch\Lights\LightsDriver.h" />
<ClInclude Include="arch\Lights\LightsDriver_Export.h" />
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h" />
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h" />
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h" />
<ClInclude Include="archutils\Win32\AppInstance.h" />
<ClInclude Include="archutils\Win32\arch_setup.h" />
+6
View File
@@ -735,6 +735,9 @@
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
@@ -2108,6 +2111,9 @@
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
+2
View File
@@ -605,6 +605,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"</Command>
<ClCompile Include="arch\Lights\LightsDriver.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Export.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp" />
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp" />
<ClCompile Include="archutils\Win32\AppInstance.cpp" />
<ClCompile Include="archutils\Win32\arch_setup.cpp" />
@@ -1923,6 +1924,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"</Command>
<ClInclude Include="arch\Lights\LightsDriver.h" />
<ClInclude Include="arch\Lights\LightsDriver_Export.h" />
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h" />
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h" />
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h" />
<ClInclude Include="archutils\Win32\AppInstance.h" />
<ClInclude Include="archutils\Win32\arch_setup.h" />
+6
View File
@@ -747,6 +747,9 @@
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp">
<Filter>StepMania\arch\Lights</Filter>
</ClCompile>
@@ -2270,6 +2273,9 @@
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h">
<Filter>StepMania\arch\Lights</Filter>
</ClInclude>
@@ -0,0 +1,100 @@
// 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_Win32Minimaid.h"
#include "windows.h"
REGISTER_SOUND_DRIVER_CLASS( Win32Minimaid );
HINSTANCE hMMMAGICDLL = NULL;
LightsDriver_Win32Minimaid::LightsDriver_Win32Minimaid()
{
_mmmagic_loaded=false;
hMMMAGICDLL = LoadLibraryW(L"mmmagic.dll");
if(hMMMAGICDLL == NULL)
{
MessageBox(NULL, "Could not LoadLibrary( mmmagic.dll ).", "ERROR", MB_OK );
return;
}
_mmmagic_loaded=true;
// Get the function pointers
mm_connect_minimaid = (MM_CONNECT_MINIMAID) GetProcAddress(hMMMAGICDLL, "mm_connect_minimaid");
mm_setKB = (MM_SETKB) GetProcAddress(hMMMAGICDLL, "mm_setKB");
mm_setDDRPad1Light = (MM_SETDDRPAD1LIGHT) GetProcAddress(hMMMAGICDLL, "mm_setDDRPad1Light");
mm_setDDRPad2Light = (MM_SETDDRPAD2LIGHT) GetProcAddress(hMMMAGICDLL, "mm_setDDRPad2Light");
mm_setDDRCabinetLight = (MM_SETCABINETLIGHT) GetProcAddress(hMMMAGICDLL, "mm_setDDRCabinetLight");
mm_setDDRBassLight = (MM_SETDDRBASSLIGHT) GetProcAddress(hMMMAGICDLL, "mm_setDDRBassLight");
mm_setDDRAllOn = (MM_SETDDRALLON) GetProcAddress(hMMMAGICDLL, "mm_setDDRAllOn");
mm_setDDRAllOff = (MM_SETDDRALLOFF) GetProcAddress(hMMMAGICDLL, "mm_setDDRAllOff");
mm_setBlueLED = (MM_SETBLUELED) GetProcAddress(hMMMAGICDLL, "mm_setBlueLED");
mm_setMMOutputReports = (MM_SETMMOUTPUTREPORTS) GetProcAddress(hMMMAGICDLL, "mm_setMMOutputReports");
mm_sendDDRMiniMaidUpdate= (MM_SENDDDRMINIMAIDUPDATE) GetProcAddress(hMMMAGICDLL, "mm_sendDDRMiniMaidUpdate");
mm_connect_minimaid();
mm_setKB(true);
}
LightsDriver_Win32Minimaid::~LightsDriver_Win32Minimaid()
{
if(_mmmagic_loaded)
FreeLibrary( hMMMAGICDLL );
}
void LightsDriver_Win32Minimaid::Set( const LightsState *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();
}
}
/*
* (c) 2013 pkgingo
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
@@ -0,0 +1,99 @@
/* LightsDriver_Win32Minimaid - Minimaid based lights with libmmmagic */
#ifndef LightsDriver_Win32Minimaid_H
#define LightsDriver_Win32Minimaid_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_Win32Minimaid : public LightsDriver
{
public:
LightsDriver_Win32Minimaid();
virtual ~LightsDriver_Win32Minimaid();
virtual void Set( const LightsState *ls );
};
#endif
/*
* (c) 2013 pkgingo
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/