performSts method

Future<StsResult> performSts()

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();
  }
}