private void SerialConnection_StatusFrameReceived(VMU931_Status statusFrame) { _firstStatusUpdateReceived = true; DeviceStatus = statusFrame; DeviceStatusReceived?.Invoke(statusFrame); }
internal static VMU931_Status ParseStatusFrame(byte[] frame) { VMU931_Status status = new VMU931_Status(); if (frame.Length != 7) { return(status); } var sensors = frame[0]; var resolutions = frame[1]; var outputRate = frame[2]; var messageTypes = frame[6]; if ((sensors & (1 << 0)) != 0) { status.AccelerometerEnabled = true; } if ((sensors & (1 << 1)) != 0) { status.GyroscopeEnabled = true; } if ((sensors & (1 << 2)) != 0) { status.MagnetometerEnabled = true; } for (int i = 0; i < 8; i++) { if (i < 4) { // accelerometer resolution if ((resolutions & (1 << i)) != 0) { status.AccelerometerResolution = (AccelerometerResolution)i; } } else { // gyroresolution if ((resolutions & (1 << i)) != 0) { status.AccelerometerResolution = (AccelerometerResolution)i + 4; } } } if ((outputRate & (1 << 0)) != 0) { status.OutputRate = OutputRate.Low; } else { status.OutputRate = OutputRate.Low; } if ((messageTypes & (1 << 0)) != 0) { status.AccelerometerStreamingEnabled = true; } if ((messageTypes & (1 << 1)) != 0) { status.GyroscopeStreamingEnabled = true; } if ((messageTypes & (1 << 2)) != 0) { status.QuaternionStreamingEnabled = true; } if ((messageTypes & (1 << 3)) != 0) { status.MagnetometerStreamingEnabled = true; } if ((messageTypes & (1 << 4)) != 0) { status.EulerAngleStreamingEnabled = true; } if ((messageTypes & (1 << 5)) != 0) { status.HeadingStreamingEnabled = true; } return(status); }
private static void VMU932_DeviceStatusReceived(VMU931_Status status) { Console.WriteLine(status.ToString()); }