public void Update(MovementMeasurement data) { if (double.IsNaN(_maxX) || data.MagX > _maxX) { _maxX = data.MagX; } if (double.IsNaN(_maxY) || data.MagY > _maxY) { _maxY = data.MagY; } if (double.IsNaN(_maxZ) || data.MagZ > _maxZ) { _maxZ = data.MagZ; } if (double.IsNaN(_minX) || data.MagX < _minX) { _minX = data.MagX; } if (double.IsNaN(_minY) || data.MagY < _minY) { _minY = data.MagY; } if (double.IsNaN(_minZ) || data.MagZ < _minZ) { _minZ = data.MagZ; } }
public MovementMeasurement ConvertData(IBuffer buffer) { MovementMeasurement movement = new MovementMeasurement(); uint dataLength = buffer.Length; using (DataReader reader = DataReader.FromBuffer(buffer)) { if (dataLength == 18) { short gx = Utility.ReadBigEndian16bit(reader); short gy = Utility.ReadBigEndian16bit(reader); short gz = Utility.ReadBigEndian16bit(reader); short ax = Utility.ReadBigEndian16bit(reader); short ay = Utility.ReadBigEndian16bit(reader); short az = Utility.ReadBigEndian16bit(reader); short mx = Utility.ReadBigEndian16bit(reader); short my = Utility.ReadBigEndian16bit(reader); short mz = Utility.ReadBigEndian16bit(reader); movement.GyroX = ((double)gx * 500.0) / 65536.0; movement.GyroY = ((double)gy * 500.0) / 65536.0; movement.GyroZ = ((double)gz * 500.0) / 65536.0; movement.AccelX = (((double)ax * 8.0) / 32768); movement.AccelY = (((double)ay * 8.0) / 32768); movement.AccelZ = (((double)az * 8.0) / 32768); // on SensorTag CC2650 the conversion to micro tesla's is done in the firmware. movement.MagX = (double)mx; movement.MagY = (double)my; movement.MagZ = (double)mz; } } return(movement); }