summaryrefslogtreecommitdiffhomepage
path: root/wiiyourself/ReadMe.txt
blob: 85ca0034305b23a7755b79213cff3e35e7745ff0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
__________________________________________________________________

     - WiiYourself! - native C++ Wiimote library  v1.15
       (c) gl.tter 2007-10 - http://gl.tter.org
__________________________________________________________________

This marks the likely-final release of my free & fully-featured
 Wiimote native C++ library for Windows.

Originally based on Brian Peek's 'Managed Wiimote Library'
 (http://blogs.msdn.com/coding4fun/archive/2007/03/14/1879033.aspx)
 I then rewrote and extended it considerably.

There's no documentation - check Brian's article for a good
overview and general 'Wiimote with Windows' info - but the
source code has extensive comments, and the demo app should help
you make sense of it all.  Any questions, join my mailing list
(below).

Check License.txt for the (few) conditions of use, and
 History.txt for important changes from previous versions.
_____

Notes:

  - the library consists only of wiimote.cpp & wiimote.h.  Simply add
     them to your project and include the header.

  - VC 2005 & 2008 projects, and a MSYS makefile for MinGW for the
     demo program are included.
  
  -	for MSYS:
        at the MSYS prompt type:  make -f Makefile.MSYS
         (it will create a folder named MinGW whith the binaries
          and proper folder structure)
        
  - The Windows Driver Development Kit (WDK or DDK) is required to
     build (for the HID API).  It's a free download from MS page
     (no need to register).  Currently it's found here (or search
     for it on microsoft.com):
  
     'Windows Driver Kit (WDK) 7.1.0'
     http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx

    Unfortunately it changes frequently so the instructions below
     may be wrong or incomplete.  Google or ask on my mailing
     list for help if needed:
     
        - add its 'inc' and 'inc/api' dirs to your include paths
         (make sure they are *above* other paths, ie. searched first)
        
        - add its 'lib/win7/i386' dir to your library paths.
     
    You can also use earlier versions known as the 'DDK'.  The parts
     of the HID API I use haven't changed in a long time.  These paths
     are usually used:
      
        - add 'inc/wxp' dir to your include paths (*above* others)
        - add 'lib/wxp/i386' to your library paths.
      
    Notes:
      - do _not_ add any 'STL' paths from the WDK/DDK as they can cause
         build problems.
      - the order of your include paths can be important.  If you placed
         them above the paths and are still getting compilation errors,
         try moving them around.
  
  - The library is Unicode-ready via <tchar.h> (see demo project).
  
  - if you're not using VC you need to link with these libraries:
        setupapi.lib
        winmm.lib
        hid.lib     (from the DDK)
__________________________  

Wiimote installation notes:
  
  The Wiimote needs to be 'paired' (Bluetooth connected) with the
   PC before you can install/use it.  Pressing 1 & 2 simultaneously
   puts it into 'discoverable' mode for a few seconds (LEDs will
   flash - the number of LEDs reflects the battery level).
   
  It will be detected as 'Nintendo RVL-CNT-01'.
     
  Stack-specific instructions:

  - Windows' built-in Bluetooth stack:

    1) open up the Bluetooth control panel.
    2) press _and hold_ 1 & 2 on the wiimote (LEDs flash) until the
       installation is complete (otherwise the wiimote usually times
       out half-way through the procedure, and although it may seem
       to have installed it's never 'connected' and doesn't work).
    3) add a new device - it should find it. don't use a password.
    4) when the installation is fully complete, let go of 1&2. The
       Bluetooth panel should now show it 'connected'.
    
    if something goes wrong you need to uninstall it and try again.
    
    if you un-pair the wiimote later (see below), it seems you need
     to remove and install it all over again to get it to work (if you
     know a workaround, let me know).
       
  - Toshiba stack:

    straight forward, press 1 & 2 on the Wiimote (you don't need to
    hold them if you're quick) and click 'New Connection'.
    
    once found, you can pair it anytime again by right-clicking its
     device icon (and pressing 1 & 2 as before) - you can also set up
     a desktop shortcut that enters discovery mode immediately.

  - Widcomm stack:

    1) Open 'My Bluetooth Places'.
    2) Press and hold 1 & 2 (until the process is complete).
    3) Click 'View Devices in Range'.
    4) Wiimote is detected as Nintendo RVL-CNT-01.
    5) Select it, then click 'Bluetooth Setup Wizard'.
    5) Click 'Skip' (no password).
    6) Now it should be connected (you can let go of 1 & 2).

    Troubleshooting:
        - the device seems to be connected but the Demo can't find it
          (CreateFile() fails with error 5 'Access Denied'),
     or - it disconnects almost immediately after connection
     or - asks for a password a few seconds after connection

     Try uninstalling all HID devices from Device Manager, and then
      redetecting them with 'Scan for hardware changes' (I had all
      these problems and that fixed it for me).

  - Other stacks
  
    similar to the above (contribute instructions?)
    
  
  - Disconnect/un-pair to save power (any stack):

    hold the Wiimote Power button for a few seconds - it automatically
    unpairs itself, re-enters pairing mode for a few seconds
    (flashing LEDs), then times out and (effecively) switches off.

__________________________  

Balance Boards notes:

  Balance Boards are installed using the same procedure as wiimotes, by
   holding the 'Sync' button in the battery compartment.  The Bluetooth
   stack detectes them as 'Nintendo RVL-WBC-01'.

  They report to the library as wiimotes, with a permanent BALANCE_BOARD
   extension.  They only have one button (A), and no IR/Acceleration/Rumble
   or Speaker support.  There is only one supported 'report type' so the
   library sets this automatically (see the demo for details).
   
   You can detect them with the wiimote::IsBalanceBoard() call.
   
   The boards tested so far all report up to ~ +-2.5KB weight offsets even
    where there is no weight placed on them (ie. 'at rest').  It is unknown
    if this is normal sensor inaccuracy/drift, or if the calibration values
    read from the board are interpreted incorrectly.  For now the library
    automatically subtracts the first incoming sensor values after a Connect()
    call from all future non-raw values (the raw values are never modified).
    
    The offsets used are exposed in wiimote_state::balance_board::AtRestKG.
   
    - if the board wasn't at rest during the Connect() call these offsets
       will be wrong - the app can measure them manually (when the board
       is at rest) by calling  wiimote::CalibrateAtRest().

__________________________  

MotionPlus notes:

  Once activated it's reported like any other extension, but needs to be
   manually enabled (see demo for an example):
      - Test first if it's connected via MotionPlusConnected()
      - Then call EnableMotionPlus()
      - It will then replace any other extension connected to it, unil you
         disable the Motion+ again with DisableMotionPlus().
   
  The speed values are believed to be correct.  The calibration values are not
   yet understood, so the data is currently uncalibrated.  
   
  Some technical details are mentioned in this interview with the MotionPlus
   hardware/software engineers:
   http://uk.wii.com/wii/en_GB/software/iwata_asks_motionplus_volume_1_2162.html#top
   

  * Special thanks to the guys at WiiBrew.org, and all contributing hackers *
    for figuring out & documenting the wiimote protocols:
    http://wiibrew.org/wiki/Wiimote/Extension_Controllers#Wii_Motion_Plus
   

Sign up to the mailing list to stay in the loop, exchange ideas or help each
 other out: http://gl.tter.org/mailman/listinfo/wiiyourself_gl.tter.org
__

gl.tter  (glATr-i-lDOTnet)