OSDN Git Service

変更:mode=1(キーボード)ではMODIFIERを文字列で指定する master
authorTakeshi Aida <aida@shizentai-factory.com>
Sat, 21 Dec 2013 10:16:33 +0000 (19:16 +0900)
committerTakeshi Aida <aida@shizentai-factory.com>
Sat, 21 Dec 2013 10:16:33 +0000 (19:16 +0900)
hidsetter/hidsetter.cpp
hidsetter/hidsetter.vcxproj
hidsetter/hidsetter.vcxproj.filters
hidsetter/revive_key.ini

index d0f3dad..8b99b8a 100644 (file)
@@ -5,6 +5,10 @@
 
 #include "stdafx.h"
 #include <iostream>
+#include <sstream>
+#include <string>
+#include <locale>
+#include <algorithm> 
 
 #include <windows.h>
 extern "C" {
@@ -126,25 +130,90 @@ bool loadIniFile( BYTE pImg[ OUTPUT_SIZE ], LPCTSTR pFilename )
 
        TCHAR szApp[ 8 ];
        TCHAR szValue[ 3 ];
-       TCHAR szMod[ 3 ];
+       TCHAR szMod[ 256 ];
        for ( int pin=0; pin<N_PIN; pin++ )
        {
+               BYTE mode = -1;
+               BYTE value = 0;
+               BYTE modify = 0;
+               TCHAR* p;
                BYTE* cur = &pImg[ pin*3+2 ];
                wsprintf( szApp, _T("PIN%d"), pin+1 );
-               int mode = (int)GetPrivateProfileInt( szApp, _T("MODE"), -1, pFilename );
+               
+               mode = (int)GetPrivateProfileInt( szApp, _T("MODE"), -1, pFilename );
+               
+               if ( GetPrivateProfileString( szApp, _T("VALUE"), _T(""), szValue, ARRAYSIZE(szValue), pFilename ) > 0 )
+               {
+                       errno = 0;
+                       value = (BYTE)_tcstol( szValue, &p, 16 );
+                       if ( errno != 0 )
+                               return false;
+               }
+               else
+               {
+                       mode = -1;
+               }
+
+               if ( GetPrivateProfileString( szApp, _T("MODIFIER"), _T(""), szMod, ARRAYSIZE(szMod), pFilename ) > 0 )
+               {
+                       switch ( mode )
+                       {
+                       case 0:
+                               //\81@\83}\83E\83X\90Ý\92è
+                               errno = 0;
+                               modify = (BYTE)_tcstol( szMod, &p, 16 );
+                               if ( errno != 0 )
+                                       return false;
+                               break;
+                       case 1:
+                               // \83L\81[\83{\81[\83h\90Ý\92è
+                               {
+                                       wistringstream iss( szMod );
+                                       wstring t;
+                                       while ( getline( iss, t, L' ' ) )
+                                       {
+                                               transform( t.begin(), t.end(), t.begin(), toupper );
+                                               if ( t == L"LEFT_CTRL" )
+                                               {
+                                                       modify |= 1;
+                                               }
+                                               else if ( t == L"LEFT_SHIFT" )
+                                               {
+                                                       modify |= 2;
+                                               }
+                                               else if ( t == L"LEFT_ALT" )
+                                               {
+                                                       modify |= 4;
+                                               }
+                                               else if ( t == L"LEFT_GUI" )
+                                               {
+                                                       modify |= 8;
+                                               }
+                                               else if ( t == L"RIGHT_CTRL" )
+                                               {
+                                                       modify |= 16;
+                                               }
+                                               else if ( t == L"RIGHT_SHIFT" )
+                                               {
+                                                       modify |= 32;
+                                               }
+                                               else if ( t == L"RIGHT_ALT" )
+                                               {
+                                                       modify |= 64;
+                                               }
+                                               else if ( t == L"RIGHT_GUI" )
+                                               {
+                                                       modify |= 128;
+                                               }
+                                       }
+                               }
+                               break;
+                       }
+
+               }
                cur[ 0 ] = mode;
-               if ( mode < 0 )
-                       continue;
-               GetPrivateProfileString( szApp, _T("VALUE"), _T(""), szValue, ARRAYSIZE(szValue), pFilename );
-               GetPrivateProfileString( szApp, _T("MODIFIER"), _T(""), szMod, ARRAYSIZE(szMod), pFilename );
-               TCHAR* p;
-               errno = 0;
-               cur[ 1 ] = (BYTE)_tcstol( szValue, &p, 16 );
-               if ( errno != 0 )
-                       return false;
-               cur[ 2 ] = (BYTE)_tcstol( szMod, &p, 16 );
-               if ( errno != 0 )
-                       return false;
+               cur[ 1 ] = value;
+               cur[ 2 ] = modify;
        }
        return true;
 }
index 27a31b3..9d2b40f 100644 (file)
@@ -85,6 +85,9 @@
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <None Include="revive_key.ini" />
+  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
index e7a707c..dd1d1a8 100644 (file)
@@ -30,4 +30,7 @@
       <Filter>ソース ファイル</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <None Include="revive_key.ini" />
+  </ItemGroup>
 </Project>
\ No newline at end of file
index 6662921..ee01b89 100644 (file)
 ;
 ; MODE ==  1 ... keyboard
 ; VALUE ==  \83X\83L\83\83\83\93\83R\81[\83h(usage) 2\8c\8516\90i\95\\8bL
-; MODIFIER == SHIFT,CTRL,ALT,WIN\82Ì\89\9f\89º\8fó\91Ô(8bit) 2\8c\8516\90i\95\\8bL
-;             bit 0 ... LEFT CTRL
-;             bit 1 ... LEFT SHIFT
-;             bit 2 ... LEFT ALT
-;             bit 3 ... LEFT GUI
-;             bit 4 ... RIGHT CTRL
-;             bit 5 ... RIGHT SHIFT
-;             bit 6 ... RIGHT ALT
-;             bit 7 ... RIGHT GUI
+;           HID\82Ìusage\82ð\8ew\92è\82·\82é\81BASCII\83R\81[\83h\82Æ\82Í\88Ù\82È\82é(\8eQ\8fÆ: Universal Serial Bus HID Usage Tables, 10 Keyboard/Keypad Page (0x07))
+; MODIFIER == SHIFT,CTRL,ALT,WIN\82Ì\89\9f\89º\8fó\91Ô
+;             \88È\89º\82Ì\8cê\8bå\82ð\94¼\8ap\8bó\94\92\82Å\8bæ\90Ø\82Á\82½\95\8e\9a\97ñ
+;               LEFT_CTRL   LEFT_SHIFT   LEFT_ALT   LEFT_GUI
+;               RIGHT_CTRL  RIGHT_SHIFT  RIGHT_ALT  RIGHT_GUI
+;             (\97á) LEFT_CTRL LEFT_SHIFT ... \8d¶CTRL\83L\81[\82Æ\8d¶SHIFT\83L\81[\82Ì\93¯\8e\9e\89\9f\82µ
 ;
 ; MODE ==  2 ... joystick
 ; reviveUSB\82Ì\83t\83@\81[\83\80\83E\83F\83A\82ª\8aÔ\88á\82Á\82Ä\82é\82Ý\82½\82¢
 
 [PIN1]
 MODE = 1
-VALUE = 04                     ; "a"
-MODIFIER = 00
+VALUE = 2B                     ; TAB
+MODIFIER =
 
 [PIN2]
 MODE = 1
-VALUE = 05                     ; "b"
-MODIFIER = 00
+VALUE = 2B                     ; TAB
+MODIFIER = RIGHT_SHIFT
 
 [PIN3]
-MODE = 1
-VALUE = 06                     ; "c"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER = 
 
 [PIN4]
-MODE = 1
-VALUE = 07                     ; "d"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =
 
 [PIN5]
-MODE = 1
-VALUE = 08                     ; "e"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =
 
 [PIN6]
-MODE = 1
-VALUE = 09                     ; "f"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =
 
 [PIN7]
-MODE = 1
-VALUE = 04                     ; "a"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =
 
 [PIN8]
-MODE = 1
-VALUE = 04                     ; "a"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =
 
 [PIN9]
-MODE = 1
-VALUE = 04                     ; "a"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =
 
 [PIN10]
-MODE = 1
-VALUE = 04                     ; "a"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =
 
 [PIN11]
-MODE = 1
-VALUE = 04                     ; "a"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =
 
 [PIN12]
-MODE = 1
-VALUE = 04                     ; "a"
-MODIFIER = 00
+MODE = 
+VALUE = 
+MODIFIER =