bool AP_InertialSensor_HIL::wait_for_sample(uint16_t timeout_ms) { if (_sample_available()) { return true; } uint32_t start = hal.scheduler->millis(); while ((hal.scheduler->millis() - start) < timeout_ms) { hal.scheduler->delay(1); if (_sample_available()) { return true; } } return false; }
bool AP_InertialSensor_MPU6000_Ext::wait_for_sample(uint16_t timeout_ms) { if (_sample_available()) { return true; } uint32_t start = hal.scheduler->millis(); while ((hal.scheduler->millis() - start) < timeout_ms) { hal.scheduler->delay_microseconds(100); if (_sample_available()) { return true; } } return false; }
bool AP_InertialSensor_HIL::wait_for_sample(uint16_t timeout_ms) { if (_sample_available()) { return true; } uint32_t start = hal.scheduler->micros(); while ((hal.scheduler->millis() - start) < timeout_ms) { uint32_t tnow = hal.scheduler->micros(); uint32_t tdelay = (_last_sample_usec + _sample_period_usec) - tnow; if (tdelay < 100000) { hal.scheduler->delay_microseconds(tdelay); } if (_sample_available()) { return true; } } return false; }
bool AP_InertialSensor_VRBRAIN::wait_for_sample(uint16_t timeout_ms) { if (_sample_available()) { return true; } uint32_t start = hal.scheduler->millis(); while ((hal.scheduler->millis() - start) < timeout_ms) { uint64_t tnow = hrt_absolute_time(); // we spin for the last timing_lag microseconds. Before that // we yield the CPU to allow IO to happen const uint16_t timing_lag = 400; if (_last_sample_timestamp + _sample_time_usec > tnow+timing_lag) { hal.scheduler->delay_microseconds(_last_sample_timestamp + _sample_time_usec - (tnow+timing_lag)); } if (_sample_available()) { return true; } } return false; }