processRawData static method

({bool crcValid, Uint8List data}) processRawData(
  1. Uint8List rawData,
  2. int expectedCrc, {
  3. MeasurementConfig? config,
})

Processes raw fetch data: extracts measurement data and validates CRC.

If config is provided and data is compressed, it will be decompressed. CRC validation is always performed on uncompressed data (per spec).

Returns a tuple-like record with processed (decompressed if needed) data and CRC validity.

Implementation

static ({Uint8List data, bool crcValid}) processRawData(
  Uint8List rawData,
  int expectedCrc, {
  MeasurementConfig? config,
}) {
  final measurementData = extractMeasurementData(rawData);

  // Decompress if data format is compressed
  // This is needed both for CRC validation AND for returning usable data to the app
  Uint8List processedData = measurementData;
  if (config != null && config.dataFormat == DataFormat.compressed) {
    print('[MeasurementDataProcessor] Decompressing data: ${measurementData.length} bytes compressed -> decompressing...');
    processedData = _decompressData(measurementData, config.axesType);
    print('[MeasurementDataProcessor] Decompressed to ${processedData.length} bytes (${processedData.length ~/ 2} int16 samples)');
  } else {
    print('[MeasurementDataProcessor] Data is uncompressed: ${measurementData.length} bytes (${measurementData.length ~/ 2} int16 samples)');
  }

  final crcValid = verifyCrc(processedData, expectedCrc);
  print('[MeasurementDataProcessor] CRC validation: ${crcValid ? "PASSED" : "FAILED"} (expected: 0x${expectedCrc.toRadixString(16)})');
  return (data: processedData, crcValid: crcValid);
}