|
|
|
@ -51,9 +51,7 @@ bool AP_Airspeed_MS4525::init()
@@ -51,9 +51,7 @@ bool AP_Airspeed_MS4525::init()
|
|
|
|
|
if (!_dev) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (!_dev->get_semaphore()->take(HAL_SEMAPHORE_BLOCK_FOREVER)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
WITH_SEMAPHORE(_dev->get_semaphore()); |
|
|
|
|
|
|
|
|
|
// lots of retries during probe
|
|
|
|
|
_dev->set_retries(10); |
|
|
|
@ -62,8 +60,6 @@ bool AP_Airspeed_MS4525::init()
@@ -62,8 +60,6 @@ bool AP_Airspeed_MS4525::init()
|
|
|
|
|
hal.scheduler->delay(10); |
|
|
|
|
_collect(); |
|
|
|
|
|
|
|
|
|
_dev->get_semaphore()->give(); |
|
|
|
|
|
|
|
|
|
found = (_last_sample_time_ms != 0); |
|
|
|
|
if (found) { |
|
|
|
|
printf("MS4525: Found sensor on bus %u address 0x%02x\n", addresses[i].bus, addresses[i].addr); |
|
|
|
@ -176,14 +172,13 @@ void AP_Airspeed_MS4525::_collect()
@@ -176,14 +172,13 @@ void AP_Airspeed_MS4525::_collect()
|
|
|
|
|
_voltage_correction(press, temp); |
|
|
|
|
_voltage_correction(press2, temp2); |
|
|
|
|
|
|
|
|
|
if (sem->take(HAL_SEMAPHORE_BLOCK_FOREVER)) { |
|
|
|
|
_press_sum += press + press2; |
|
|
|
|
_temp_sum += temp + temp2; |
|
|
|
|
_press_count += 2; |
|
|
|
|
_temp_count += 2; |
|
|
|
|
sem->give(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
WITH_SEMAPHORE(sem); |
|
|
|
|
|
|
|
|
|
_press_sum += press + press2; |
|
|
|
|
_temp_sum += temp + temp2; |
|
|
|
|
_press_count += 2; |
|
|
|
|
_temp_count += 2; |
|
|
|
|
|
|
|
|
|
_last_sample_time_ms = AP_HAL::millis(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -230,14 +225,15 @@ bool AP_Airspeed_MS4525::get_differential_pressure(float &pressure)
@@ -230,14 +225,15 @@ bool AP_Airspeed_MS4525::get_differential_pressure(float &pressure)
|
|
|
|
|
if ((AP_HAL::millis() - _last_sample_time_ms) > 100) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
if (sem->take(HAL_SEMAPHORE_BLOCK_FOREVER)) { |
|
|
|
|
if (_press_count > 0) { |
|
|
|
|
_pressure = _press_sum / _press_count; |
|
|
|
|
_press_count = 0; |
|
|
|
|
_press_sum = 0; |
|
|
|
|
} |
|
|
|
|
sem->give(); |
|
|
|
|
|
|
|
|
|
WITH_SEMAPHORE(sem); |
|
|
|
|
|
|
|
|
|
if (_press_count > 0) { |
|
|
|
|
_pressure = _press_sum / _press_count; |
|
|
|
|
_press_count = 0; |
|
|
|
|
_press_sum = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pressure = _pressure; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
@ -248,14 +244,15 @@ bool AP_Airspeed_MS4525::get_temperature(float &temperature)
@@ -248,14 +244,15 @@ bool AP_Airspeed_MS4525::get_temperature(float &temperature)
|
|
|
|
|
if ((AP_HAL::millis() - _last_sample_time_ms) > 100) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
if (sem->take(HAL_SEMAPHORE_BLOCK_FOREVER)) { |
|
|
|
|
if (_temp_count > 0) { |
|
|
|
|
_temperature = _temp_sum / _temp_count; |
|
|
|
|
_temp_count = 0; |
|
|
|
|
_temp_sum = 0; |
|
|
|
|
} |
|
|
|
|
sem->give(); |
|
|
|
|
|
|
|
|
|
WITH_SEMAPHORE(sem); |
|
|
|
|
|
|
|
|
|
if (_temp_count > 0) { |
|
|
|
|
_temperature = _temp_sum / _temp_count; |
|
|
|
|
_temp_count = 0; |
|
|
|
|
_temp_sum = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
temperature = _temperature; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|