readFIFO method
Implementation
Future<List<_SensorFIFOSample>> readFIFO() async {
int fifoReadPointer = readRegister('FIFO_READ', false);
int fifoWritePointer = readRegister('FIFO_WRITE', false);
if (fifoReadPointer == fifoWritePointer) {
return [];
}
int numSamples = fifoWritePointer - fifoReadPointer;
if (numSamples < 0) {
numSamples = 32;
}
int bytesToRead = numSamples * 3 * ledsEnabled;
List<int> data = [];
while (bytesToRead > 0) {
var bytesRead = readFrom('FIFO_DATA', min(bytesToRead, 32), false);
data.addAll(bytesRead);
if (captureSamples) {
var logMessage = '${DateTime.now().microsecondsSinceEpoch - captureStartTimeMicros} | $bytesRead';
await captureFile.writeAsString('$logMessage\n', flush: true, mode: FileMode.append);
printWithTimestamp(logMessage);
}
bytesToRead -= 32;
}
clearFIFO(false);
List<_SensorFIFOSample> result = [];
for (int i = 0; i < data.length; i += 3 * ledsEnabled) {
_SensorFIFOSample sample = _SensorFIFOSample();
// 3 bytes for each LED : Red, IR, Green
sample.rawRed = data[i] << 16 | data[i + 1] << 8 | data[i + 2];
sample.rawIR = data[i + 3] << 16 | data[i + 4] << 8 | data[i + 5];
if (ledsEnabled >= 3) {
sample.rawGreen = data[i + 6] << 16 | data[i + 7] << 8 | data[i + 8];
}
result.add(sample);
}
return result;
}