Upload
others
View
25
Download
0
Embed Size (px)
Citation preview
40
Wii リモコンをもう一回見直してみます。
by Iketaki
2007 5 Wii
PC
Wii
Wii
Wii
2004
64
1
DVD 3
Wii
2 24
DS
Wii
Wii Wii
Wii リモコンをもう一回見直してみます。
41
1 PS2 PS2
PS2
2 PS3 200W Wii 45W
5W
Wii
Wii
A B 1 2 - HOME 7
Wii
CMOS
Wii リモコンをもう一回見直してみます。
42
Mii
Wii
Wii
Bluetooth
PS3
Bluetooth
Bluetooth
Bluetooth PC
Wii PC
Wii 3800
Windows Bluetooth Wii
^^;
WiinRemote
Wii リモコンをもう一回見直してみます。
43
Bluesoleil
Bluetooth Windows
Wii
http://www.bluesoleil.com/
Wii
Bluetooth
Bluetooth Places My Device
Wii
Search Devices Nintendo
RVL-CNT-01
My Device
Nintendo RLV-CNT-01
WiinRemote
http://onakasuita.org/wii/
Wii
Windows
Wii Win Wiin
Enable Cursor
PC
Wii PC
Wii リモコンをもう一回見直してみます。
44
Wii CMOS
Wii
XYZ3
Wii
10ms
XYZ 1byte 256
CMOS
5 LED
Wii Wii
Wii
LED Wii
360 LED Wii
Wii リモコンをもう一回見直してみます。
45
Wii
Wii
Wii
Wii
Wii Wii
Wii
CMOS
Wii リモコンをもう一回見直してみます。
46
Wii 3 2
Wii Wii
Wii
Wii
Wii
3
if
Wii リモコンをもう一回見直してみます。
47
Wii
AiLive LiveMove
Wii
http://www.nintendo.co.jp/wii/topics/interview/vol4/ailive.html
Wii PC
Wii
(^^; C++
Windows Driver Kit HID(Human Interface Device)
http://www.microsoft.com/japan/whdc/
DevTools/WDK/WDKpkg.mspx
...( )\WinDDK\6000\inc\api
...( )\WinDDK\6000\lib\wxp\i386
Vista XP
setupapi.lib hid.lib
#pragma comment (lib, )
OpenWiimoteHandle
Wii リモコンをもう一回見直してみます。
48
GUID HID
Wii HID
Index 1 HID
HID SetupDiGetDeviceInterfaceDetail
malloc Setup
HID Wii
Wii
GUID HidGuid;
HidD_GetHidGuid(&HidGuid);
HDEVINFO hDevInfo = 0;
hDevInfo = SetupDiGetClassDevs((LPGUID)&HidGuid, NULL, (HWND)NULL,
DIGCF_INTERFACEDEVICE | DIGCF_PRESENT);
SP_DEVICE_INTERFACE_DATA DevInfoData;
DevInfoData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
Result = SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &HidGuid,
Index, &DevInfoData);
Result = SetupDiGetDeviceInterfaceDetail(hDevInfo, &DevInfoData, NULL, 0,
&Length, NULL);
PSP_DEVICE_INTERFACE_DETAIL_DATA DetailData = NULL;
DetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
DetailData -> cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
DWORD Required;
Result = SetupDiGetDeviceInterfaceDetail(hDevInfo, &DevInfoData,
DetailData, Length, &Required, NULL);
hHandle = CreateFile(DetailData->DevicePath, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, 0, NULL);
Wii リモコンをもう一回見直してみます。
49
HidD_GetAttributes
ID ID VID 1406 PID 774
Wii ID ID
HID Wii hHandle Wii
GetDeviceCapabilities
Caps Wii
HID
ID ID
Wii
ReadFile
Wii 3 Caps
HIDD_ATTRIBUTES Attributes;
Attributes.Size = sizeof(Attributes);
if(HidD_GetAttributes(hHandle, &Attributes))
{
if(Attributes.VendorID == VID && Attributes.ProductID == PID)
{
if(HIDP_STATUS_SUCCESS == GetDeviceCapabilities(hHandle))
{
// Wii
bDetected = TRUE;
}
void ReadReport(HANDLE handle, unsigned char *InputReport) {
DWORD dummy;
ReadFile(
handle, InputReport, Capabilities.InputReportByteLength, &dummy, NULL);
}
Wii リモコンをもう一回見直してみます。
50
WriteFile
Wii
Wii
out BYTE Wii
in[1][2] in[3][4][5] x
y z
void WriteReport(HANDLE handle, unsigned char *OutputReport) {
DWORD dummy;
WriteFile(
handle, OutputReport, Capabilities.OutputReportByteLength, &dummy, NULL);
}
out[0] = 0x12; out[1] = 0x00; out[2] = 0x31;
WriteReport(hWiimote, out);
ReadReport(hWiimote, in);
if(in[2] & 0x0002) { One = true; } else { One = false; }
if(in[2] & 0x0001) { Two = true; } else { Two = false; }
if(in[2] & 0x0008) { A = true; } else { A = false; }
if(in[2] & 0x0004) { B = true; } else { B = false; }
if(in[2] & 0x0010) { Minus = true; } else { Minus = false; }
if(in[1] & 0x0010) { Plus = true; } else { Plus = false; }
if(in[2] & 0x0080) { Home = true; } else { Home = false; }
if(in[1] & 0x0008) { Up = true; } else { Up = false; }
if(in[1] & 0x0004) { Down = true; } else { Down = false; }
if(in[1] & 0x0001) { Left = true; } else { Left = false; }
if(in[1] & 0x0002) { Right = true; } else { Right = false; }
Wii リモコンをもう一回見直してみます。
51
One Home bool true
LED
LED out[0] 0x11 out[1]
LED
0x01 0x10 0x20 0x40 0x80
ON 1 LED 2 LED 3 LED 4 LED
out[1] 0x91 Wii
LED
HID
Wii Wii PC
http://paken.s1.hayasoft.com/
out[0] = 0x11; out[1] = 0x91;
WriteReport(hWiimote, out);