processRawData static method
({bool crcValid, Uint8List data})
processRawData(
- Uint8List rawData,
- int expectedCrc, {
- 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);
}