AP_RCTelemetry: add and use AP_BATTERY_ENABLED

This commit is contained in:
Peter Barker 2024-01-31 19:38:50 +11:00 committed by Andrew Tridgell
parent c7678042da
commit b48b26ddb8
1 changed files with 15 additions and 0 deletions

View File

@ -296,12 +296,16 @@ void AP_Spektrum_Telem::calc_qos()
// prepare rpm data - B/E mandatory frame that must be sent periodically
void AP_Spektrum_Telem::calc_rpm()
{
#if AP_BATTERY_ENABLED
const AP_BattMonitor &_battery = AP::battery();
#endif
_telem.rpm.identifier = TELE_DEVICE_RPM;
_telem.rpm.sID = 0;
// battery voltage in centivolts, can have up to a 12S battery (4.25Vx12S = 51.0V)
#if AP_BATTERY_ENABLED
_telem.rpm.volts = htobe16(((uint16_t)roundf(_battery.voltage(0) * 100.0f)));
#endif
_telem.rpm.temperature = htobe16(int16_t(roundf(32.0f + AP::baro().get_temperature(0) * 9.0f / 5.0f)));
#if AP_RPM_ENABLED
const AP_RPM *rpm = AP::rpm();
@ -328,10 +332,12 @@ void AP_Spektrum_Telem::send_msg_chunk(const MessageChunk& chunk)
// prepare battery data - B/E but not supported by Spektrum
void AP_Spektrum_Telem::calc_batt_volts(uint8_t instance)
{
#if AP_BATTERY_ENABLED
const AP_BattMonitor &_battery = AP::battery();
// battery voltage in centivolts, can have up to a 12S battery (4.25Vx12S = 51.0V)
_telem.hv.volts = htobe16(uint16_t(roundf(_battery.voltage(instance) * 100.0f)));
#endif
_telem.hv.identifier = TELE_DEVICE_VOLTAGE;
_telem.hv.sID = 0;
_telem_pending = true;
@ -340,6 +346,7 @@ void AP_Spektrum_Telem::calc_batt_volts(uint8_t instance)
// prepare battery data - B/E but not supported by Spektrum
void AP_Spektrum_Telem::calc_batt_amps(uint8_t instance)
{
#if AP_BATTERY_ENABLED
const AP_BattMonitor &_battery = AP::battery();
float current;
@ -349,6 +356,7 @@ void AP_Spektrum_Telem::calc_batt_amps(uint8_t instance)
// Range: +/- 150A Resolution: 300A / 2048 = 0.196791 A/count
_telem.amps.current = htobe16(int16_t(roundf(current * 2048.0f / 300.0f)));
#endif
_telem.amps.identifier = TELE_DEVICE_AMPS;
_telem.amps.sID = 0;
_telem_pending = true;
@ -357,11 +365,14 @@ void AP_Spektrum_Telem::calc_batt_amps(uint8_t instance)
// prepare battery data - L/E
void AP_Spektrum_Telem::calc_batt_mah()
{
#if AP_BATTERY_ENABLED
const AP_BattMonitor &_battery = AP::battery();
#endif
_telem.fpMAH.identifier = TELE_DEVICE_FP_MAH;
_telem.fpMAH.sID = 0;
#if AP_BATTERY_ENABLED
float current;
if (!_battery.current_amps(current, 0)) {
current = 0;
@ -396,6 +407,10 @@ void AP_Spektrum_Telem::calc_batt_mah()
} else {
_telem.fpMAH.temp_B = 0x7FFF;
}
#else
_telem.fpMAH.temp_A = 0x7FFF;
_telem.fpMAH.temp_B = 0x7FFF;
#endif
_telem_pending = true;
}