performSts method
Performs the STS test, handling sensor data collection and processing.
Implementation
Future<StsResult> performSts() async {
try {
// Start probe
await probe.start();
startRealtimeDataForFeedback();
if (kDebugMode) {
print('[StsTestStep] Execute starting...');
print('[StsTestStep] Probe.sensor: ${probe.sensor.runtimeType}');
}
// Wait for test duration (30 seconds)
var elapsedTime = 0;
while (elapsedTime < measure.duration.inMilliseconds) {
if (completer.isCanceled) {
return StsResult(
identifier: identifier,
cycleCount: 0,
cycleTimes: [],
)..results['error'] = 'Cancelled';
}
await Future.delayed(const Duration(milliseconds: 100));
elapsedTime += 100;
}
// Stop probe
stopRealtimeDataForFeedback();
await probe.stop();
// Process data
final results = await processor.processData(
accData: probe.accelerometerData,
gyroData: probe.gyroscopeData,
magData: probe.magnetometerData,
accActualRate: probe.currentAccSamplingRate().toDouble(),
gyroActualRate: probe.currentGyroSamplingRate().toDouble(),
magActualRate: probe.currentMagSamplingRate().toDouble(),
);
// Create StsResult
if (results.isNotEmpty) {
final stsResult = results.first;
if (kDebugMode) {
print(
'[StsTestStep] StsResult cycleCount: ${stsResult.cycleCount}, cycleTimes ${stsResult.cycleTimes}}',
);
}
return StsResult(
identifier: identifier,
cycleCount: stsResult.cycleCount,
cycleTimes: stsResult.cycleTimes,
);
} else {
return StsResult(identifier: identifier, cycleCount: 0, cycleTimes: []);
}
} catch (e) {
if (kDebugMode) {
print('Error in StsStep.execute: $e');
}
return StsResult(identifier: identifier, cycleCount: 0, cycleTimes: [])
..results['error'] = e.toString();
}
}