// Read the sensor void AP_Baro_HIL::update(void) { if (_frontend._hil.updated) { _frontend._hil.updated = false; _copy_to_frontend(0, _frontend._hil.pressure, _frontend._hil.temperature); } }
// Read the sensor void AP_Baro_PX4::update(void) { for (uint8_t i=0; i<_num_instances; i++) { struct baro_report baro_report; struct px4_instance &instance = instances[i]; while (::read(instance.fd, &baro_report, sizeof(baro_report)) == sizeof(baro_report) && baro_report.timestamp != instance.last_timestamp) { instance.pressure_sum += baro_report.pressure; // Pressure in mbar instance.temperature_sum += baro_report.temperature; // degrees celcius instance.sum_count++; instance.last_timestamp = baro_report.timestamp; } } for (uint8_t i=0; i<_num_instances; i++) { struct px4_instance &instance = instances[i]; if (instance.sum_count > 0) { float pressure = (instance.pressure_sum / instance.sum_count) * 100; float temperature = instance.temperature_sum / instance.sum_count; instance.pressure_sum = 0; instance.temperature_sum = 0; instance.sum_count = 0; _copy_to_frontend(instance.instance, pressure, temperature); } } }
// Read the sensor void AP_Baro_UAVCAN::update(void) { if (_sem_baro->take(HAL_SEMAPHORE_BLOCK_FOREVER)) { _copy_to_frontend(_instance, _pressure, _temperature); _frontend.set_external_temperature(_temperature); _sem_baro->give(); } }
// Read the sensor void AP_Baro_HIL::update(void) { float pressure = 0.0; float temperature = 0.0; float pressure_sum = 0.0; float temperature_sum = 0.0; uint32_t sum_count = 0; while (_frontend._hil.press_buffer.is_empty() == false){ _frontend._hil.press_buffer.pop_front(pressure); pressure_sum += pressure; // Pressure in Pascals _frontend._hil.temp_buffer.pop_front(temperature); temperature_sum += temperature; // degrees celcius sum_count++; } if (sum_count > 0) { pressure_sum /= (float)sum_count; temperature_sum /= (float)sum_count; _copy_to_frontend(0, pressure_sum, temperature_sum); } }