WPAD API

Introduction

The Wii console communicates with its standard controller, the Wii Remote, using wireless technology in the 2.4 GHz band. The Wii Remote includes a Rumble motor, Pointer, Motion Sensor, speaker, Player Indicator, and external extension connector. When external extension controllers are connected to the external extension connector, a variety of user interfaces become available.

The Wii Balance Board communicates with the Wii console using the 2.4 GHz wireless band in the same manner as the Wii Remote. However, the Wii Balance Board does not have parts such as the Rumble motor, Pointer, Motion Sensor, speaker, or external extension connector. Instead, it has pressure sensors specialized for measuring weight and center of gravity placed on each of its four corners.

Libraries

The WPAD library, which includes a higher-level library (KPAD), is implemented as follows. The WBC library is a high-level WPAD library that calculates weight from the values obtained by the WPAD library for the Wii Balance Board's pressure sensors. The KPAD library is a high-level WPAD library designed to make it easier for games to use input data obtained from the WPAD library. The KPAD library can handle weight data if the WBC library has been linked.
KPAD API
WPAD APIWBC API
WPAD API
The WPAD library recognizes the Nunchuk and Classic Controller by default. The WPAD library can recognize other external extension controllers and the Wii Balance Board if a special library is linked for each device.

Shown below are controllers and the libraries required for the WPAD library to recognize them.
WPAD_DEV_BALANCE_CHECKER WBC library
WPAD_DEV_GUITAR WPADGtr library
WPAD_DEV_TRAIN WPADTrn library
The WPADGtr and WPADTrn libraries are not included with the standard Revolution SDK. Developers who require these libraries should contact Nintendo.

Initialization

Work Memory Registration

Begin initialization of the WPAD library by calling the WPADRegisterAllocator function; this registers the allocator function used to obtain work memory during initialization. Be sure to implement the allocator in such a way that work memory can be acquired from MEM2. To retrieve the total size of work memory allocated by the library, use the WPADGetWorkMemorySize function.

Notes on Initializing Wii Balance Board-Compatible Applications

Wii Balance Board registration data could not be saved to the console while the Japanese version of Wii Fit was under development, so it is saved with Wii Fit's save data. Consequently, Japanese applications that use the Wii Balance Board should use the WPADRegisterBLCWorkarea function to register a buffer for the library to obtain Wii Balance Board registration data from the Wii Fit save data. There is no need for applications to register the buffer in regions outside Japan because Wii Balance Board registration data can now be saved to the console.

Library Initialization

After registering the work memory, call the WPADInit function to initialize the WPAD library. Because it will take time to initialize the WPAD library, periodically call the WPADGetStatus function to check when initialization is complete. After initialization is complete, the buffer registered by the WPADRegisterBLCWorkarea function is not used and may be deleted.

Adding and Removing Devices

In order for devices to communicate with the Wii console, the Wii console and device must first be registered with each other. This registration process is called pairing. The Wii console and the device can each only register a fixed number of corresponding devices or consoles. If more than this number are paired to either one, information for those already paired will be overwritten. In addition, all pairing information maintained by the Wii console will be automatically deleted if the SYNC button on the Wii console is held down for 10 or more seconds. (However, this information is not automatically deleted if a callback has been registered using the WPADSetClearDeviceCallback function.) Note that doing this will not delete the pairing information maintained by the Wii Remote.

Adding and Removing Wii Remotes

There are two methods of registering Wii Remotes with a Wii console; these are referred to as normal pairing and simple pairing. The pairing information of a normal-paired Wii Remote remains registered even after the Wii console power has been turned OFF, and with a normal-paired Wii Remote, Wii console power can also be turned ON or OFF using the Wii Remote Power Button. However, if the Wii Remote has been simple-paired and the Wii console is reset or turned OFF, the pairing information maintained by the Wii console is deleted. Also, power to the Wii console cannot be turned ON/OFF using the power button on a simple-paired Wii Remote. The reason for this is that normal pairing is intended to be used when a user pairs their own Wii Remote to their own Wii console, but simple pairing is intended to be used when a user pairs their Wii Remote to a Wii console owned by a friend.

Note: The specification for simple pairing has been changed: the pairing information for a simple-paired Wii Remote is now maintained until the Wii console power is turned OFF.As a result, simple-paired Wii Remotes can remain connected to Wii even when applications are reset and when the user moves between Wii Menu and various Wii Channels.However, applications built with SDK versions SDK2.4 patch6 or earlier use the old specification for simple pairing. Thus, when you move to one of these applications, the simple-paired Wii Remote's connection will be dropped. Furthermore, if simple pairing is conducted while this kind of application is running, the connection will be dropped even if the process later moves to an application that uses the new specification for simple pairing.

For Wii Remotes, a Wii console can store ten normal pairings and six simple pairings. A single Wii Remote will be treated as paired through one of these two methods. For Wii consoles, a Wii Remote can store both one standard pairing and one simple pairing. A single Wii console will be treated as paired through one of these two methods.
When a normal pairing is performed on a simple-paired device, that device is then treated as normal-paired. However, when a simple pairing is performed on a normal-paired device, that device continues to be treated as normal-paired.
Normal pairing is performed by pressing SYNCHRO on the front of the Wii console, or by calling the WPADStartSyncDevice or WPADStartFastSyncDevice function and pressing SYNCHRO inside the battery cover of the Wii Remote. When the pairing completes, the Wii Remote information will be stored in the Wii console. In the same way, the Wii console information will be stored in the Wii Remote.
By calling the WPADSetSyncDeviceCallback function and setting a user callback function in advance, game applications can determine when SYNCHRO on the Wii console is pressed. If a callback function has been set, pairing will not occur automatically when SYNCHRO is pressed; in such cases you must begin the pairing by calling the WPADStartSyncDevice function. The registered callback function will also be called again after pairing is complete, and it will send notification of how many Wii Remotes were successfully paired.
The simple pairing remains effective only until the Wii console is shut down. Game applications can start a simple pairing by calling the WPADStartSimpleSync or WPADStartFastSimpleSync function. Simple pairing occurs when the Wii Remote 1 and 2 Buttons are pressed at the same time. However, if a Wii console is already registered, the Wii Remote will attempt to connect with that Wii console when the buttons are pressed. If that connection fails, simple pairing will start.

Simple pairing will be executed repeatedly until either four Wii Remotes have been connected, or the application stops the simple pairing by calling the WPADStopSimpleSync function. If a callback is registered, the callback function is called as soon as the pairing process completes, and it sends notification of the number of paired Wii Remotes.
Pairing fails when the two devices attempt to perform fundamentally different pairing. However, it can be successful in the following cases:
If the Wii console's SYNC button is pressed for 10 or more seconds, all information on Wii Remotes paired to that Wii console will be deleted. The game application can get this event by calling the WPADSetClearDeviceCallback function and setting a user callback function in advance. When a callback function has been set, deletion of the pairing information will not occur automatically; in such cases you must start the deletion by calling the WPADStartClearDevice function. The registered callback function will be called again when the deletion is complete.

Neither normal pairing nor simple pairing can be carried out while the Wii Remote's pairing information is being deleted.

Adding and Removing Wii Balance Boards

The Wii Balance Board can only use normal pairing. While the Wii Balance Board is paired, up to nine Wii Remote pairings can be stored. Wii Balance Boards are paired, and their pairing information deleted, in the same manner as a Wii Remote.

Although also mentioned in "Notes on Initializing Wii Balance Board-Compatible Applications," the Japanese version of WiiFit is the only application with a different way of handling pairing information for the Wii Balance Board. Although pairing information is usually stored in the Wii console's system configuration file, in the case of the Japanese version of WiiFit it is stored inside the WiiFit save data because of circumstances surrounding development. Because the Wii Balance Board pairing information is also subsequently recorded in the Wii console's system configuration file, Wii Balance Board-compatible applications intended for Japan must synchronize the pairing information in WiiFit save data with that in the system configuration file. This synchronization process is carried out internally by the library. Because a large work memory is required for the synchronization process during initialization, be sure to register a work memory using the WPADRegisterBLCWorkarea function. The work memory is not required after initialization.
When you pair a Wii Balance Board to a Wii console, the Balance Board's pairing information is stored in the system configuration file. If save data for the Japanese version of WiiFit is present on the Wii console, the pairing information is also stored in that save data.
Pairing information in the system configuration file is deleted by holding down the Wii console SYNC button for 10 or more seconds. If save data for the Japanese version of WiiFit is present on the Wii console, its pairing information is deleted. However, because of WiiFit specifications, pairing information is not completely deleted.

Controller Power Button

A Wii console's power can be turned ON or OFF with the Wii Remote Power Button. If the console is currently turned OFF, it is turned ON by pressing the Power Button. If the console is currently turned ON, pressing the Power Button for approximately one second will send a power-OFF signal to the console, and the callback registered by the OSSetPowerCallback function will be called.

The power ON/OFF operation cannot be performed with a simple-paired Wii Remote, only with a normal-paired Remote.

Controller Status Confirmation

Game applications can call the WPADProbe function to get the connection status of each controller by its number. If an external extension controller is plugged into a Wii Remote, this function also returns the current type of the external extension controller. Because this function confirms the insertion and removal of an external extension controller, we recommend that the game application call this function at least once within the main loop. To determine if a controller has been connected or disconnected, use the WPADSetConnectCallback function to register a callback function in advance. To detect the insertion and removal of an external extension controller, use the WPADSetExtensionCallback function to register a callback function in advance.

When a Wii Remote which already has an external extension controller inserted is connected to a Wii console, the type of the external extension controller is not immediately known, because recognition of the external extension controller only occurs after the Wii Remote has completed its connection. Because of this the status obtained by the WPADProbe function will change over time. Immediately after the Wii Remote is connected, the function returns WPAD_DEV_CORE. After that, the Wii Remote notifies the console that it has an external extension controller attached, and the library checks the external extension controller's type. In the period between notification and verification of the controller's type, the function returns WPAD_DEV_UNKNOWN. Following verification, the function returns a value such as WPAD_DEV_FREESTYLE or WPAD_DEV_CLASSIC, depending on the type.

The WPADGetInfo(Async) function can also be called to get the current information about the controller (remaining battery power, Player LED status, and so on).

Controller Control

Game applications can perform a variety of controls on the Wii Remote, including changing the format of the received data, obtaining the status of a Remote, and starting and stopping the Pointer. However, these controls must wait for an ACK to be received from the Wii Remote, and must be processed exclusive of one another. Furthermore, when the ACK is returned only the Wii Remote's button information (out of all the controller information normally returned) is returned along with it. Be aware that if the Motion Sensor, Pointer, or an external extension controller is being used, it will not be possible to obtain their inputs.

The WPAD library maintains separate command queues internally for each channel, and requests from the game application are managed by these queues. When the WPAD library cannot add a new request, WPAD_ERR_BUSY is returned; when this error is returned to the game application, the request should be issued again after waiting.

Be aware that the WPAD library uses these queues internally immediately after attaching, detaching, or connecting an external extension controller.

Specifying the Received Data Format

The Wii Remote can use its buttons, Pointer, and Motion Sensor. In addition, external extension controller input can be used by attaching an external extension controller like the Nunchuk. However, because of the wireless specifications, not all of this data can be sent. Thus, the game application must call the WPADSetDataFormat function to select the format for the controller information according to its application. The following formats for controller information are available.

WPAD_FMT_CORE Wii Remote buttons only.
WPAD_FMT_CORE_ACC Wii Remote buttons and Motion Sensor.
WPAD_FMT_CORE_ACC_DPD Wii Remote buttons, Motion Sensor, and Pointer (coordinate data and size).
WPAD_FMT_FREESTYLE Wii Remote buttons and the Nunchuk.
WPAD_FMT_FREESTYLE_ACC Wii Remote buttons, Motion Sensor, and the Nunchuk.
WPAD_FMT_FREESTYLE_ACC_DPD Wii Remote buttons, Motion Sensor, Pointer (coordinate data), and the Nunchuk.
WPAD_FMT_CLASSIC Wii Remote buttons and the Classic Controller.
WPAD_FMT_CLASSIC_ACC Wii Remote buttons, Motion Sensor, and the Classic Controller.
WPAD_FMT_CLASSIC_ACC_DPD Wii Remote buttons, Motion Sensor, Pointer (coordinate data), and the Classic Controller.
WPAD_FMT_CORE_ACC_DPD_FULL Wii Remote buttons, Motion Sensor, and Pointer (coordinate data, size, object radius, pixel value, and range). Note: The sampling rate is half of the rate for other formats.
WPAD_FMT_TRAIN Wii Remote buttons and the master controller.
WPAD_FMT_GUITAR Wii Remote buttons, Motion Sensor, Pointer (coordinate data), and the Guitar controller.
WPAD_FMT_BALANCE_CHECKER Wii Balance Board.

Note: When selecting a format that uses the Pointer, before calling WPADSetDataFormat, call the WPADControlDpd function to start the Pointer.

Getting Controller Information

There are two ways to obtain controller information.

Use the WPADRead function to get the most recent controller information for the Wii Remote on the specified channel.
To set the buffer for periodically storing controller information, use the WPADSetAutoSamplingBuf function. Buffers are used internally as ring buffers. The buffer index that stored the most recent controller information can be obtained with the WPADGetLatestIndexInBuf function.

The WPADRead and WPADSetAutoSamplingBuf functions can be used together.

The type of the controller information that can be obtained with the WPADRead and WPADSetAutoSamplingBuf functions is recorded in a structure type that corresponds to the data format specified by the WPADSetDataFormat function. For information on controller types, data formats, and corresponding structure types, see the section about the WPADSetDataFormat function. If the data is recorded in a structure type that does not match the data format, it may not be possible to get valid data.

Use the WPADSetSamplingCallback function to register the callback function called every time the data is received from a Wii Remote at a specified channel.

Processing +Control Pad Restrictions

Prohibited processes concerning the +Control Pad of the Wii Remote and the Classic Controller are performed internally by the WPAD library. If the +Control Pad breaks and its input is in a state that is ordinarily impossible, such as simultaneous left and right (or up and down) presses, it will be processed as valid input of left and up.

Attaching/Detaching External Extension Controllers

A variety of external extension controllers can be attached to the Wii Remote through the external extension connector, even while the Wii Remote is communicating. The game application can detect the insertion or removal of an external extension controller; it does this by polling with the WPADProbe function or by registering a callback function in advance using the WPADSetExtensionCallback function. If an external extension controller is inserted or removed during communications, the Wii Remote stops sending controller information. Therefore, when a plug insertion or removal is detected, use the WPADSetDataFormat function to reset the controller information's data format according to the situation. Once the settings are complete, controller information will be sent from the Wii Remote.

Rumble Feature Controls

The Rumble feature of the Wii Remote can be turned ON or OFF. The ON/OFF setting is stored internally within the library. When the library is initialized, the ON/OFF setting for the Rumble feature is set by default to the value in the console settings. When the Rumble feature is turned ON, the WPADControlMotor function can be used to control the vibration of the Wii Remote on a specified channel. In addition, the WPADStartMotor and WPADStopMotor functions are available as macro functions.

The status of the Rumble feature's ON/OFF setting maintained within the library can be obtained with the WPADIsMotorEnabled function. Although the WPADEnableMotor function can turn the Rumble feature ON or OFF, do not enable the Rumble Feature when it has been turned OFF in the console settings. The value maintained by the library can be saved to the console settings using the WPADSaveConfig function, but do not call this function from an application.

Speaker Controls

You can use the WPADControlSpeaker function to control the speaker of the Wii Remote on the specified channel. Activate the speaker using the function WPADControlSpeaker. Once activated, audio can be output from the speaker by sending audio data using the WPADSendStreamData function. Due to the audio specifications of the audio processor of the Wii Remote, 20 bytes of audio data must be sent three times every 20 ms in order to achieve correct audio playback.
To set the speaker volume of the Wii Remote on a specified channel, use the WPADSetSpeakerVolume function. However, because this volume change is not enabled until the speaker is restarted with the WPADControlSpeaker function, the volume of the Wii Remote speaker's currently playing audio will not change. In order to alter the volume of the currently playing audio, change the volume of the audio data source. The volume configured using this function can be saved in the Wii console using the WPADSaveConfig function.
In order to avoid wearing down the batteries in scenes where no audio is output through the Wii Remote speaker for a period of time, use the WPADControlSpeaker function to send the WPAD_SPEAKER_OFF command whenever possible to stop the speaker. However, starting or stopping the speaker will prevent you from being able to obtain several samples' worth of input from the Motion Sensor, Pointer, and external extension controller of the Wii Remote. Accordingly, in scenes in which audio is output frequently, there is no need to start and stop the speaker often. In such scenes, keep the speaker ON the whole time, and instead of starting and stopping the speaker, use the WPADControlSpeaker function to send a WPAD_SPEAKER_MUTE or WPAD_SPEAKER_MUTE_OFF command to turn muting ON/OFF.
Due to the audio processor and wireless communication specifications of the Wii console and the Wii Remote, there are times when the audio will break or skip. Broken audio (crackling and popping) occurs when the state of the encoder on the Wii console side and the decoder on the Wii Remote side are out of sync with each other. The audio will break up as long as the encoder and decoder are out of sync. In order to synchronize the state of the encoder and decoder, you must restart the speaker. Audio skipping will occur when a sample on the Wii Remote side cannot be processed. Consequently, even if you do not take any specific action, there will be no problems with subsequent playback.

Due to the audio processor specifications, audio played with the Wii Remote's speaker may break or skip if audio is played back continuously for eight minutes or longer.To avoid this, do one of the following: In addition, due to the specifications for wireless communication, it has been confirmed that the Wii Remote speaker will break up audio in the following situations.In order to avoid broken audio in the following cases, call the WPADCanSendStreamData function when sending audio in order to make sure the audio can be sent and played without breaking up.

Configuring Controller Features

The Rumble feature ON/OFF setting and speaker volume setting for Wii Remotes can be saved on the Wii console. Values set with the WPADEnableMotor and WPADSetSpeakerVolume functions can be saved on the Wii console using the WPADSaveConfig function.

However, do not allow these settings to be changed outside the HOME Menu in the release version.

Wii Remote Memory

The memory built into the Wii Remote is called Wii Remote memory. The Wii Remote memory secures only one slot for the saving of game data. Although 4,000 bytes are allocated for this slot, the first 112 bytes are used by the library to manage file information. Thus, the application actually has access to only 3,888 bytes for the saving of game data. Using the WPADReadGameData and WPADWriteGameData functions, the application can freely read and write data in the region of the slot starting from the 112th byte through the 4,000th byte. Be aware that the file information is updated whenever game data are written to this region.

The file information contains the following.

Title Name A string of up to 16 characters, UTF-16 encoded. This character string can be configured using the WPADSetGameTitleUtf16 function.
Time of Last Update The time when the game data were last updated can be stored in OSTime format. This can be obtained using the WPADGetGameDataTimeStamp function. The obtained value can be converted to calendar time using the OSTicksToCalendarTime function.
Game Code Stores the game code of the application to which the game data are written. This value is used internally by the library.

To read details about the error codes that are returned when reading and writing game data, see the explanations for the WPADReadGameData and WPADWriteGameData functions. Please also see the Guidelines to read about other notes and precautions.

Error Codes

The error codes returned from the WPAD library can be grouped into the following three categories.

Because only the first and second categories of error codes will be described here, for the third category of errors, refer to the individual function descriptions.

Among the error codes defined in the WPAD library, those returned by the WPADProbe function are described below.

WPAD_ERR_NONE The Wii Remote is connected but control commands are not being sent from the Wii console to the Wii Remote.
WPAD_ERR_NO_CONTROLLER Wii Remote is disconnected.
WPAD_ERR_BUSY A control command has been sent to a connected Wii Remote, and the system is waiting for an ACK from the Wii Remote.

Shown below are the error codes that are passed to the err member variable of the WPADStatus structure, and the descriptions of those error codes.

WPAD_ERR_NONE Data with the specified data format was received.
WPAD_ERR_NO_CONTROLLER Data has never been received.
WPAD_ERR_INVALID The format of incoming data is different from the format specified for the WPAD library.
(In this case the Wii Remote and external extension controller data is invalid.)
WPAD_ERR_CORRUPTED An external extension controller, such as the Nunchuk or Classic Controller, is partially inserted into the Wii Remote; data for the external extension controller is corrupted.
(However, Wii Remote data is not corrupted.)

Automatic Disconnect

If there has been no change in controller input for a fixed period of time, the WPAD library will disconnect. This prevents the Wii Remote's battery power from running out due to user neglect. The WPAD Library checks for input from the buttons, Motion Sensor, Pointer, and external extension controller. Consequently, even if the Wii Remote is left alone, its input may change if someone walks heavily around it, if the Pointer is facing the window, or in some other situations. Be aware that the Wii Remote may therefore not be disconnected after the set period of time.

Although the initial setting is 5 minutes, it can be changed with the WPADSetAutoSleepTime function. It is also possible to use the WPADResetAutoSleepTimeCount function to reset the elapsed time since input stopped changing.

Resetting the Analog Stick Origin

The analog stick origin of a Nunchuk or Classic Controller can be reset by holding down the A, B, +, and - Buttons on the Wii Remote or Classic Controller for three seconds. However, the origin cannot be reset with button combinations such as the A and B Buttons on the Wii Remote combined with the + and - Buttons on the Classic Controller.

Controller Port Mapping

The WPAD library keeps track of information for the last Wii Remote to connect to each controller port only while the Wii console is running. In other words, this will be cleared if the Wii console is shut down, but will remain unchanged if the Wii console is reset. (Information recorded to each controller port is cleared immediately after the Wii console is started.))

When a Wii Remote initiates a connection, its information will be compared with the information for the last Wii Remote to be connected to each controller port. If the same information is found, the Wii Remote will be assigned to that controller port. If the same information could not be found after checking all of the controller ports, it will be assigned to the open controller port with the lowest number.

Recorded Wii Remote information will be cleared in the following situations. If the WPADDisconnect function is used to disconnect a Wii Remote, information will be cleared for the Wii Remote on the disconnected controller port. If the OSShutdownSystem function is called or the Power Button is pressed and held to shut down the Wii console, the Wii Remote information for all controller ports will be cleared.

For example, the following shows the Wii console immediately after starting up.

Port 1----
Port 2----
Port 3----
Port 4----

If Wii Remotes A, B, and C are connected in order, the lowest-numbered open port will be assigned to each Wii Remote in order because no Wii Remote information has been stored.

Port 1Wii Remote A
Port 2Wii Remote B
Port 3Wii Remote C
Port 4----

Assume that Wii Remote A is disconnected due to a depleted battery, and Wii Remote B is disconnected after a fixed period of time without input. At this point, the information in Port 1 and Port 2 is kept unchanged.

Port 1Wii Remote A
Port 2Wii Remote B
Port 3Wii Remote C
Port 4----

When Wii Remote B is reconnected after its battery has been replaced, it will be assigned to Port 2 because its information is still recorded there.

Port 1Wii Remote A
Port 2Wii Remote B
Port 3Wii Remote C
Port 4----

When Wii Remote D is connected, its information has not been recorded anywhere, so it is assigned to the open port with the lowest number: Port 1. The information in Port 1 is replaced with Wii Remote D's information.

Port 1Wii Remote D
Port 2Wii Remote B
Port 3Wii Remote C
Port 4----

When Port 1 is disconnected using the WPADDisconnect function, its information will be cleared.

Port 1----
Port 2Wii Remote B
Port 3Wii Remote C
Port 4----

When the Wii console is shut down, all information will be cleared.

Port 1----
Port 2----
Port 3----
Port 4----

Termination Processing

The WPAD library's close process is now performed inside the OS library's reset function. When closing the library, call the OS library reset/shutdown function from the application.

The OSShutdownSystem function disconnects all communicating Wii Remotes. Although the OSRestart, OSReturnToMenu, and OSRebootSystem functions will disconnect all communicating Wii Remotes, the remotes will be in an auto-reconnect state (reconnect without any button input) for about 15 to 20 seconds after disconnection. When a game application is restarted or moves to the Wii Menu, it is possible to restore the pre-reset state without any button input from the user.

Cautions When Using the Wireless LAN

The Wii console and the Wii Remote communicate using the 2.4-GHz band. Using a wireless LAN on the same 2.4-GHz band may cause interference, resulting in communication problems. To avoid such interference, the SDK will automatically switch the frequency band that it uses. The application no longer needs to be aware of this issue.

Revision History

2008/08/27 Revised the descriptions of the Wii Balance Board.
2008/06/04 Revised the explanation about Wii Remote memory.
2008/05/29 Added a description of prohibition processing for the +Control Pad.
2008/05/19 Revised the description of controller port mapping and added specific examples.
2008/04/16 Added a note stating that external causes may stop automatic disconnection from occurring as configured. Added an explanation for resetting the time elapsed since input stopped changing. Added explanations for the Wii Balance Board. Added information on the relationship between the library and external extension controllers. Added the WBC library to the library structure. Revised error code descriptions.
2007/10/11 Updated the description for speaker controls.
2007/06/07 Added explanation about the simple pairing specification change.
2007/04/03 Added error code descriptions.
2007/03/22 Added a supplemental explanation about turning the Rumble Feature ON and OFF.
2007/02/08 Noted that the Classic Controller can also reset its origin. Noted that Wii Remote pairing is not possible while pairing information is being deleted. Added text about stopping the Wii Remote speaker when it is not in use.
2006/11/09 Added explanation for the process of reconnecting while an external extension controller is attached.
2006/10/23 Changed explanations for pairing and termination processing.
2006/09/18 Added a description for avoiding wireless LAN interference internally. Deleted warnings for the bugs found in SDK 2.2. Added text about change in mapping table handling. Added explanation for controller registration.
2006/09/06 Reflected changes to specifications about turning the Rumble Feature ON/OFF and speaker volume settings. Described problems with controller controls and the speaker. Added information about simple registration, internal memory, automatic disconnect, controller port mapping, close operation, and Control Stick origin reset.
2006/07/04 Added speaker-related information.
2006/06/19 Deleted the object size restriction from the cautions specific to UI tools.
2005/11/10 Added description of DPD module's hardware bug.
2005/11/09 Corrected warnings about the use of the GameCube standard controller. Changed the description of the PAD library treatment in DolphinSDK. Added bug report.
2005/11/01 To reflect the change of interface from EXI to SI, added a caution related to SI. Added links to functions. Added introduction text for the KPAD library. Added bug report.
2005/09/27 Changed the name to DPD. Deleted some hardware descriptions in Introduction.
2005/08/30 Modified description of buttons in Introduction; added a bug report.
2005/08/01 Initial version.


CONFIDENTIAL