Skip to content

Commit 40da126

Browse files
committed
AP_TemperatureSensor: Support servo telem sources
Add support for updating motor and PCB temperatures in servo telemetry from temperature sensors.
1 parent 27781c8 commit 40da126

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

libraries/AP_TemperatureSensor/AP_TemperatureSensor_Backend.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#include <AP_Logger/AP_Logger.h>
2222
#include <AP_BattMonitor/AP_BattMonitor.h>
23+
#include <AP_Servo_Telem/AP_Servo_Telem.h>
2324

2425
/*
2526
All backends use the same parameter table and set of indices. Therefore, two
@@ -85,6 +86,10 @@ void AP_TemperatureSensor_Backend::update_external_libraries(const float tempera
8586
#if HAL_WITH_ESC_TELEM
8687
AP_ESC_Telem_Backend::TelemetryData t;
8788
#endif
89+
#if AP_SERVO_TELEM_ENABLED
90+
AP_Servo_Telem *servo_telem = AP_Servo_Telem::get_singleton();
91+
AP_Servo_Telem::TelemetryData servo_telem_data;
92+
#endif
8893

8994
switch ((AP_TemperatureSensor_Params::Source)_params.source.get()) {
9095
#if HAL_WITH_ESC_TELEM
@@ -111,6 +116,26 @@ void AP_TemperatureSensor_Backend::update_external_libraries(const float tempera
111116
// Label only, used by AP_Periph
112117
break;
113118

119+
#if AP_SERVO_TELEM_ENABLED
120+
case AP_TemperatureSensor_Params::Source::ServoMotor:
121+
if (servo_telem == nullptr) {
122+
break;
123+
}
124+
servo_telem_data.motor_temperature_cdeg = temperature * 100;
125+
servo_telem_data.present_types = AP_Servo_Telem::TelemetryData::Types::MOTOR_TEMP;
126+
servo_telem->update_telem_data(_params.source_id-1, servo_telem_data);
127+
break;
128+
129+
case AP_TemperatureSensor_Params::Source::ServoPCB:
130+
if (servo_telem == nullptr) {
131+
break;
132+
}
133+
servo_telem_data.pcb_temperature_cdeg = temperature * 100;
134+
servo_telem_data.present_types = AP_Servo_Telem::TelemetryData::Types::PCB_TEMP;
135+
servo_telem->update_telem_data(_params.source_id-1, servo_telem_data);
136+
break;
137+
#endif // AP_SERVO_TELEM_ENABLED
138+
114139
case AP_TemperatureSensor_Params::Source::None:
115140
case AP_TemperatureSensor_Params::Source::Pitot_tube:
116141
default:

libraries/AP_TemperatureSensor/AP_TemperatureSensor_Params.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const AP_Param::GroupInfo AP_TemperatureSensor_Params::var_info[] = {
5858
// @Param: SRC
5959
// @DisplayName: Sensor Source
6060
// @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.
61-
// @Values: 0: None, 1:ESC, 2:Motor, 3:Battery Index, 4:Battery ID/SerialNumber, 5:CAN based Pitot tube, 6:DroneCAN-out on AP_Periph
61+
// @Values: 0: None, 1:ESC, 2:Motor, 3:Battery Index, 4:Battery ID/SerialNumber, 5:CAN based Pitot tube, 6:DroneCAN-out on AP_Periph, 7:Servo motor, 8:Servo PCB
6262
// @User: Standard
6363
AP_GROUPINFO("SRC", 4, AP_TemperatureSensor_Params, source, (float)Source::None),
6464

libraries/AP_TemperatureSensor/AP_TemperatureSensor_Params.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class AP_TemperatureSensor_Params {
4848
Battery_ID_SerialNumber = 4,
4949
Pitot_tube = 5,
5050
DroneCAN = 6,
51+
ServoMotor = 7,
52+
ServoPCB = 8,
5153
};
5254

5355
AP_Enum<Type> type; // 0=disabled, others see frontend enum TYPE

0 commit comments

Comments
 (0)