hcwiid-0.0.5: Library to interface with the wiimote

Portabilityunknown
Stabilityexperimental
Maintainerivan.perez@keera.co.uk
Safe HaskellNone

System.CWiid

Contents

Description

Bindings for the cwiid library, a working userspace driver along with various applications implementing event drivers, multiple Wiimote connectivity, gesture recognition, and other Wiimote-based functionality.

The current implementation is rather incomplete. In particular:

  • Some Haskell functions (those related to rpt mode, rumble, leds) had hard-coded values in them. Therefore, they implemented only a very partial interface to their C counterparts. The new versions should be tested and, if any other function is like this, then exported properly.
  • Not all functions/wiimote fields are accessible. In particular, acceleromoter and IR is in testing stage. Nunchuck, calibration, wiimote plus are not handled at all (but will be in the future).

All in all, the code works quite well and is currently being used to implement several real games.

Synopsis

Initialization

cwiidOpen :: IO (Maybe CWiidWiimote)Source

Try to establish a connection to any existing Wiimote using any existing bluetooth interface.

The function returns Nothing if there is no bluetooth interface or if no wiimote can be located. If the connection succeeds, a CWiidWiimote is returned (inside a Just), which can be used to poll the wiimote using other functions.

There is a default timeout of 5 seconds.

  • TODO: export cwiid_open_time and cwiid_close as well.

data CWiidWiimote Source

A connection to an existing wiimote. Use cwiidOpen to connect to a wiimote and obtain one of these.

State

data CWiidState Source

The state of the wiimote. Use cwiidSetRptMode to enable/disable sensors.

  • FIXME: incomplete state * FIXME: export get_state

Constructors

CWiidState 

Fields

rptMode :: Int
 
led :: Int
 
rumble :: Int
 
battery :: Int
 
buttons :: Int
 
acc :: [Int]
 
irSrc :: [CWiidIRSrc]
 

Reception mode

cwiidSetRptMode :: CWiidWiimote -> CUChar -> IO CIntSource

Enable/disable reception of certain sensors. Use 2 to enable buttons.

Leds

cwiidLed1 :: CWiidLedFlagSource

Flag with exactly led 1 enabled. Use combineCwiidLedFlag to create flags with several leds enabled.

cwiidLed2 :: CWiidLedFlagSource

Flag with exactly led 2 enabled. Use combineCwiidLedFlag to create flags with several leds enabled.

cwiidLed3 :: CWiidLedFlagSource

Flag with exactly led 2 enabled. Use combineCwiidLedFlag to create flags with several leds enabled.

cwiidLed4 :: CWiidLedFlagSource

Flag with exactly led 4 enabled. Use combineCwiidLedFlag to create flags with several leds enabled.

Led operations

cwiidSetLed :: CWiidWiimote -> CWiidLedFlag -> IO CIntSource

Enable/disable certain leds.

Use cwiidLed1 .. cwiidLed4 together with combineCwiidLedFlag to create a flag with just the leds you want enabled and change all at once with one operation.

combineCwiidLedFlag :: [CWiidLedFlag] -> CWiidLedFlagSource

Combine several led flags into one led flag with those leds enabled and all other leds disabled.

Rumble

Buttons

cwiidGetBtnState :: CWiidWiimote -> IO CWiidBtnFlagSource

Returns a mask with the buttons that are currently pushed.

cwiidIsBtnPushedSource

Arguments

:: CWiidBtnFlag

The button flags as returned by cwiidGetBtnState.

-> CWiidBtnFlag

A mask that flags the button/s that we want to check.

-> Bool

True if they are all pushed, False otherwise.

Returns True if the button indicated by the flag is pushed, False otherwise.

This is a pure function, so the first argument must be the button flags as returned by cwiidGetBtnState.

Accelerometers

cwiidGetAcc :: CWiidWiimote -> IO CWiidAccSource

Obtain accelerometer information. FIXME: read wmgui/main.c:cwiid_acc(1119) to understand how to use this information, what else might need to be exported, and how to calibrate the accelerometers.

newtype CWiidAcc Source

Array of accelerometer information. It will always contain exactly three elements.

  • TODO: provide a more informative and restrictive interface with exactly three named Int (byte?) fields.

Constructors

CWiidAcc 

Fields

unCWiidAcc :: [Int]
 

Instances

Infra-red

data CWiidIRSrc Source

Internal representation of an infrared point. You should no use it unless you know what you are doing; use CWiidIR instead.