Skip to content

Commit 4c73460

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 4c73460

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

libraries/AP_TemperatureSensor/AP_TemperatureSensor_Backend.cpp

Lines changed: 27 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;
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,28 @@ 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::Servo_Motor:
121+
servo_telem = AP_Servo_Telem::get_singleton();
122+
if (servo_telem == nullptr) {
123+
break;
124+
}
125+
servo_telem_data.motor_temperature_cdeg = temperature * 100;
126+
servo_telem_data.present_types = AP_Servo_Telem::TelemetryData::Types::MOTOR_TEMP;
127+
servo_telem->update_telem_data(_params.source_id-1, servo_telem_data);
128+
break;
129+
130+
case AP_TemperatureSensor_Params::Source::Servo_PCB:
131+
servo_telem = AP_Servo_Telem::get_singleton();
132+
if (servo_telem == nullptr) {
133+
break;
134+
}
135+
servo_telem_data.pcb_temperature_cdeg = temperature * 100;
136+
servo_telem_data.present_types = AP_Servo_Telem::TelemetryData::Types::PCB_TEMP;
137+
servo_telem->update_telem_data(_params.source_id-1, servo_telem_data);
138+
break;
139+
#endif // AP_SERVO_TELEM_ENABLED
140+
114141
case AP_TemperatureSensor_Params::Source::None:
115142
case AP_TemperatureSensor_Params::Source::Pitot_tube:
116143
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+
Servo_Motor = 7,
52+
Servo_PCB = 8,
5153
};
5254

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

0 commit comments

Comments
 (0)