Пример #1
0
        /// <summary>
        /// Open Wiimote device and initialize it.
        /// </summary>
        public void OpenDevice()
        {
            Debug.Assert(device == null);

            CloseDevice();
            readMemoryReady = new ManualResetEvent(true);
            device          = new WiimoteIO(DevicePath, ParseDeviceReport);
            SetLED(0);

            // Calibrate accelSensor
            ReadMemory(0x0016, 8, data =>
            {
                AccelSensorCalibrationValue cv = new AccelSensorCalibrationValue()
                {
                    Origin = ParseAccelCalibration(data, 0),
                    G      = ParseAccelCalibration(data, 4),
                };

                cv.G.X                    -= cv.Origin.X;
                cv.G.Y                    -= cv.Origin.Y;
                cv.G.Z                    -= cv.Origin.Z;
                cv.Initialized             = true;
                accelSensorCalibrationData = cv;
            }
                       );
            WaitReadMemory();

            SetReportType(ReportType.B2A3I12, true);
            RequestStatus();
        }
Пример #2
0
        WiimoteStatus.Vector3F ParseAccel(byte[] data)
        {
            AccelSensorCalibrationValue cv = accelSensorCalibrationData;

            if (!cv.Initialized)
            {
                return(new WiimoteStatus.Vector3F());
            }
            return(new WiimoteStatus.Vector3F(
                       ((data[3] << 2 | data[1] >> 5 & 3) - cv.Origin.X) / cv.G.X,
                       ((data[4] << 2 | data[2] >> 4 & 2) - cv.Origin.Y) / cv.G.Y,
                       ((data[5] << 2 | data[2] >> 5 & 2) - cv.Origin.Z) / cv.G.Z
                       ));
        }