by Brian Peek via BrianPeek.com on 5/28/2010 5:25:09 AM
I’ve been working on a version 2.0 of WiimoteLib which reorganizes the library quite a bit to clean up the codebase. It’s not quite ready for release, and I don’t have an ETA currently, but I wanted to note some of the changes and get some feedback as I finish things up.
using System;
using System.Drawing;
namespace WiimoteLib.Extensions
{
public class Nunchuk : ExtensionController<NunchukState>
internal Nunchuk(Wiimote wm) : base(wm)
}
internal override void Initialize()
byte[] buff = Wiimote.ReadData(REGISTER_EXTENSION_CALIBRATION, 16);
State.CalibrationInfo.AccelCalibration.X0 = buff[0];
State.CalibrationInfo.AccelCalibration.Y0 = buff[1];
State.CalibrationInfo.AccelCalibration.Z0 = buff[2];
State.CalibrationInfo.AccelCalibration.XG = buff[4];
State.CalibrationInfo.AccelCalibration.YG = buff[5];
State.CalibrationInfo.AccelCalibration.ZG = buff[6];
State.CalibrationInfo.MaxX = buff[8];
State.CalibrationInfo.MinX = buff[9];
State.CalibrationInfo.MidX = buff[10];
State.CalibrationInfo.MaxY = buff[11];
State.CalibrationInfo.MinY = buff[12];
State.CalibrationInfo.MidY = buff[13];
internal override void ParseData(byte[] buff, int offset)
State.RawJoystick.X = buff[offset];
State.RawJoystick.Y = buff[offset + 1];
State.AccelState.RawValues.X = buff[offset + 2];
State.AccelState.RawValues.Y = buff[offset + 3];
State.AccelState.RawValues.Z = buff[offset + 4];
State.C = (buff[offset + 5] & 0x02) == 0;
State.Z = (buff[offset + 5] & 0x01) == 0;
State.AccelState.Values.X = (float)((float)State.AccelState.RawValues.X - State.CalibrationInfo.AccelCalibration.X0) /
((float)State.CalibrationInfo.AccelCalibration.XG - State.CalibrationInfo.AccelCalibration.X0);
State.AccelState.Values.Y = (float)((float)State.AccelState.RawValues.Y - State.CalibrationInfo.AccelCalibration.Y0) /
((float)State.CalibrationInfo.AccelCalibration.YG - State.CalibrationInfo.AccelCalibration.Y0);
State.AccelState.Values.Z = (float)((float)State.AccelState.RawValues.Z - State.CalibrationInfo.AccelCalibration.Z0) /
((float)State.CalibrationInfo.AccelCalibration.ZG - State.CalibrationInfo.AccelCalibration.Z0);
if(State.CalibrationInfo.MaxX != 0x00)
State.Joystick.X = (float)((float)State.RawJoystick.X - State.CalibrationInfo.MidX) /
((float)State.CalibrationInfo.MaxX - State.CalibrationInfo.MinX);
if(State.CalibrationInfo.MaxY != 0x00)
State.Joystick.Y = (float)((float)State.RawJoystick.Y - State.CalibrationInfo.MidY) /
((float)State.CalibrationInfo.MaxY - State.CalibrationInfo.MinY);
public override ExtensionType ExtensionType
get { return ExtensionType.Nunchuk; }
/// <summary>
/// Current state of the Nunchuk extension
/// </summary>
[Serializable]
[DataContract]
public class NunchukState : IExtensionState
/// Calibration data for Nunchuk extension
[DataMember]
public NunchukCalibrationInfo CalibrationInfo;
/// State of accelerometers
public AccelState AccelState;
/// Raw joystick position before normalization. Values range between 0 and 255.
public Point RawJoystick;
/// Normalized joystick position. Values range between -0.5 and 0.5
public PointF Joystick;
/// Digital button on Nunchuk extension
public bool C, Z;
/// Calibration information stored on the Nunchuk
public struct NunchukCalibrationInfo
/// Accelerometer calibration data
public AccelCalibrationInfo AccelCalibration;
/// Joystick X-axis calibration
public byte MinX, MidX, MaxX;
/// Joystick Y-axis calibration
public byte MinY, MidY, MaxY;
switch(mWiimote.ExtensionController.ExtensionType)
case ExtensionType.Nunchuk:
NunchukState ns = ((Nunchuk)mWiimote.ExtensionController).State;
break;
I welcome any questions, comments and concerns on the direction I’m heading. Thanks!
Original Post: WiimoteLib Future
The content of the postings is owned by the respective author. CSharpFeeds is not responsible for the contents of the postings. This site is automatically generated and cannot be reviewed for abusive content. If you find abusive content on CSharpFeeds, please contact us. Designated trademarks and brands are the property of their respective owners. All rights reserved.