Wii リモコンをもう一回見直してみます。 - hayasoft40...

12
40 Wii リモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii 2 24 DS Wii Wii Wii

Transcript of Wii リモコンをもう一回見直してみます。 - hayasoft40...

Page 1: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

40

Wii リモコンをもう一回見直してみます。

by Iketaki

2007 5 Wii

PC

Wii

Wii

Wii

2004

64

1

DVD 3

Wii

2 24

DS

Wii

Wii Wii

Page 2: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

Wii リモコンをもう一回見直してみます。

41

1 PS2 PS2

PS2

2 PS3 200W Wii 45W

5W

Wii

Wii

A B 1 2 - HOME 7

Wii

CMOS

Page 3: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

Wii リモコンをもう一回見直してみます。

42

Mii

Wii

Wii

Bluetooth

PS3

Bluetooth

Bluetooth

Bluetooth PC

Wii PC

Wii 3800

Windows Bluetooth Wii

^^;

WiinRemote

Page 4: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

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

Page 5: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

Wii リモコンをもう一回見直してみます。

44

Wii CMOS

Wii

XYZ3

Wii

10ms

XYZ 1byte 256

CMOS

5 LED

Wii Wii

Wii

LED Wii

360 LED Wii

Page 6: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

Wii リモコンをもう一回見直してみます。

45

Wii

Wii

Wii

Wii

Wii Wii

Wii

CMOS

Page 7: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

Wii リモコンをもう一回見直してみます。

46

Wii 3 2

Wii Wii

Wii

Wii

Wii

3

if

Page 8: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

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

Page 9: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

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);

Page 10: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

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);

}

Page 11: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

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; }

Page 12: Wii リモコンをもう一回見直してみます。 - hayasoft40 Wiiリモコンをもう一回見直してみます。 by Iketaki 2007 5 Wii PC Wii Wii Wii 2004 64 1 DVD 3 Wii

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);