2020-08-26 19:57:35 +00:00
|
|
|
#include "telemetry.h"
|
|
|
|
#include "hal/system.h"
|
|
|
|
#include "drivers/si4032/si4032.h"
|
|
|
|
#include "drivers/ubxg6010/ubxg6010.h"
|
|
|
|
#include "bmp280_handler.h"
|
2020-09-01 19:56:34 +00:00
|
|
|
#include "locator.h"
|
2020-08-26 19:57:35 +00:00
|
|
|
#include "config.h"
|
2022-02-27 13:45:10 +00:00
|
|
|
#include "log.h"
|
2020-08-26 19:57:35 +00:00
|
|
|
|
|
|
|
void telemetry_collect(telemetry_data *data)
|
|
|
|
{
|
2022-02-27 13:45:10 +00:00
|
|
|
log_info("Collecting telemetry...\n");
|
|
|
|
|
2020-09-10 19:57:41 +00:00
|
|
|
data->button_adc_value = system_get_button_adc_value();
|
2020-08-26 19:57:35 +00:00
|
|
|
data->battery_voltage_millivolts = system_get_battery_voltage_millivolts();
|
|
|
|
data->internal_temperature_celsius_100 = si4032_read_temperature_celsius_100();
|
2020-09-01 19:56:34 +00:00
|
|
|
|
2020-08-26 19:57:35 +00:00
|
|
|
if (bmp280_enabled) {
|
|
|
|
bmp280_read_telemetry(data);
|
|
|
|
}
|
2020-09-01 19:56:34 +00:00
|
|
|
|
2020-08-26 19:57:35 +00:00
|
|
|
ubxg6010_get_current_gps_data(&data->gps);
|
2021-11-30 15:42:51 +00:00
|
|
|
|
|
|
|
// Zero out position data if we don't have a valid GPS fix.
|
|
|
|
// This is done to avoid transmitting invalid position information.
|
2022-02-27 13:45:10 +00:00
|
|
|
if (!GPS_HAS_FIX(data->gps)) {
|
2021-11-30 15:42:51 +00:00
|
|
|
data->gps.latitude_degrees_1000000 = 0;
|
|
|
|
data->gps.longitude_degrees_1000000 = 0;
|
|
|
|
data->gps.altitude_mm = 0;
|
|
|
|
data->gps.ground_speed_cm_per_second = 0;
|
|
|
|
data->gps.heading_degrees_100000 = 0;
|
|
|
|
data->gps.climb_cm_per_second = 0;
|
|
|
|
}
|
|
|
|
|
2020-09-03 19:12:43 +00:00
|
|
|
locator_from_lonlat(data->gps.longitude_degrees_1000000, data->gps.latitude_degrees_1000000,
|
|
|
|
LOCATOR_PAIR_COUNT_FULL, data->locator);
|
2022-02-27 13:45:10 +00:00
|
|
|
|
|
|
|
log_info("Telemetry collected!\n");
|
2020-08-26 19:57:35 +00:00
|
|
|
}
|