Skip to content

Commit 03d71df

Browse files
committed
Merged in f5soh/librepilot/LP-608_HoTT_telemetry_revonano (pull request #527)
LP-608 HoTT telemetry revonano Approved-by: Vladimir Zidar <mr_w@mindnever.org> Approved-by: Lalanne Laurent <f5soh@free.fr>
2 parents 19de5fb + a15b047 commit 03d71df

File tree

7 files changed

+63
-10
lines changed

7 files changed

+63
-10
lines changed

flight/modules/UAVOHottBridge/inc/uavohottbridge.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ struct telemetrydata {
176176
FlightBatteryStateData Battery;
177177
FlightStatusData FlightStatus;
178178
GPSPositionSensorData GPS;
179-
GPSTimeData GPStime;
179+
AirspeedStateData Airspeed;
180+
GPSTimeData GPStime;
180181
GyroSensorData Gyro;
181182
HomeLocationData Home;
182183
PositionStateData Position;

flight/modules/UAVOHottBridge/uavohottbridge.c

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "gyrosensor.h"
4646
#include "gpspositionsensor.h"
4747
#include "gpstime.h"
48+
#include "airspeedstate.h"
4849
#include "homelocation.h"
4950
#include "positionstate.h"
5051
#include "systemalarms.h"
@@ -451,6 +452,25 @@ uint16_t build_GAM_message(struct hott_gam_message *msg)
451452
msg->current = scale_float2uword(current, 10, 0);
452453
msg->capacity = scale_float2uword(energy, 0.1f, 0);
453454

455+
// simulate individual cell voltage
456+
uint8_t cell_voltage = (telestate->Battery.Voltage > 0) ? scale_float2uint8(telestate->Battery.Voltage / telestate->Battery.NbCells, 50, 0) : 0;
457+
msg->cell1 = (telestate->Battery.NbCells >= 1) ? cell_voltage : 0;
458+
msg->cell2 = (telestate->Battery.NbCells >= 2) ? cell_voltage : 0;
459+
msg->cell3 = (telestate->Battery.NbCells >= 3) ? cell_voltage : 0;
460+
msg->cell4 = (telestate->Battery.NbCells >= 4) ? cell_voltage : 0;
461+
msg->cell5 = (telestate->Battery.NbCells >= 5) ? cell_voltage : 0;
462+
msg->cell6 = (telestate->Battery.NbCells >= 6) ? cell_voltage : 0;
463+
464+
msg->min_cell_volt = cell_voltage;
465+
msg->min_cell_volt_num = telestate->Battery.NbCells;
466+
467+
// apply main voltage to batt1 voltage
468+
msg->batt1_voltage = msg->voltage;
469+
470+
// AirSpeed
471+
float airspeed = (telestate->Airspeed.TrueAirspeed > 0) ? telestate->Airspeed.TrueAirspeed : 0;
472+
msg->speed = scale_float2uword(airspeed, MS_TO_KMH, 0);
473+
454474
// pressure kPa to 0.1Bar
455475
msg->pressure = scale_float2uint8(telestate->Baro.Pressure, 0.1f, 0);
456476

@@ -492,9 +512,26 @@ uint16_t build_EAM_message(struct hott_eam_message *msg)
492512
float voltage = (telestate->Battery.Voltage > 0) ? telestate->Battery.Voltage : 0;
493513
float current = (telestate->Battery.Current > 0) ? telestate->Battery.Current : 0;
494514
float energy = (telestate->Battery.ConsumedEnergy > 0) ? telestate->Battery.ConsumedEnergy : 0;
495-
msg->voltage = scale_float2uword(voltage, 10, 0);
496-
msg->current = scale_float2uword(current, 10, 0);
497-
msg->capacity = scale_float2uword(energy, 0.1f, 0);
515+
msg->voltage = scale_float2uword(voltage, 10, 0);
516+
msg->current = scale_float2uword(current, 10, 0);
517+
msg->capacity = scale_float2uword(energy, 0.1f, 0);
518+
519+
// simulate individual cell voltage
520+
uint8_t cell_voltage = (telestate->Battery.Voltage > 0) ? scale_float2uint8(telestate->Battery.Voltage / telestate->Battery.NbCells, 50, 0) : 0;
521+
msg->cell1_H = (telestate->Battery.NbCells >= 1) ? cell_voltage : 0;
522+
msg->cell2_H = (telestate->Battery.NbCells >= 2) ? cell_voltage : 0;
523+
msg->cell3_H = (telestate->Battery.NbCells >= 3) ? cell_voltage : 0;
524+
msg->cell4_H = (telestate->Battery.NbCells >= 4) ? cell_voltage : 0;
525+
msg->cell5_H = (telestate->Battery.NbCells >= 5) ? cell_voltage : 0;
526+
msg->cell6_H = (telestate->Battery.NbCells >= 6) ? cell_voltage : 0;
527+
msg->cell7_H = (telestate->Battery.NbCells >= 7) ? cell_voltage : 0;
528+
529+
// apply main voltage to batt1 voltage
530+
msg->batt1_voltage = msg->voltage;
531+
532+
// AirSpeed
533+
float airspeed = (telestate->Airspeed.TrueAirspeed > 0) ? telestate->Airspeed.TrueAirspeed : 0;
534+
msg->speed = scale_float2uword(airspeed, MS_TO_KMH, 0);
498535

499536
// temperatures
500537
msg->temperature1 = scale_float2uint8(telestate->Gyro.temperature, 1, OFFSET_TEMPERATURE);
@@ -597,6 +634,9 @@ void update_telemetrydata()
597634
if (GPSPositionSensorHandle() != NULL) {
598635
GPSPositionSensorGet(&telestate->GPS);
599636
}
637+
if (AirspeedStateHandle() != NULL) {
638+
AirspeedStateGet(&telestate->Airspeed);
639+
}
600640
if (GPSTimeHandle() != NULL) {
601641
GPSTimeGet(&telestate->GPStime);
602642
}
@@ -646,8 +686,9 @@ void update_telemetrydata()
646686
// calculate altitude relative to start position
647687
telestate->altitude = -telestate->Position.Down;
648688

649-
// check and set min/max values when armed.
650-
if (telestate->FlightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED) {
689+
// check and set min/max values when armed
690+
// and without receiver input for standalone board used as sensor
691+
if ((telestate->FlightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED) || ((telestate->SysAlarms.Alarm.Attitude == SYSTEMALARMS_ALARM_OK) && (telestate->SysAlarms.Alarm.Receiver != SYSTEMALARMS_ALARM_OK))) {
651692
if (telestate->min_altitude > telestate->altitude) {
652693
telestate->min_altitude = telestate->altitude;
653694
}
@@ -774,10 +815,12 @@ void update_telemetrydata()
774815
*/
775816
uint8_t generate_warning()
776817
{
818+
bool gps_ok = (telestate->SysAlarms.Alarm.GPS == SYSTEMALARMS_ALARM_OK);
819+
777820
// set warning tone with hardcoded priority
778821
if ((telestate->Settings.Warning.MinSpeed == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
779-
(telestate->Settings.Limit.MinSpeed > telestate->GPS.Groundspeed * MS_TO_KMH)) {
780-
return HOTT_TONE_A; // maximum speed
822+
(telestate->Settings.Limit.MinSpeed > telestate->GPS.Groundspeed * MS_TO_KMH) && gps_ok) {
823+
return HOTT_TONE_A; // minimum speed
781824
}
782825
if ((telestate->Settings.Warning.NegDifference2 == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
783826
(telestate->Settings.Limit.NegDifference2 > telestate->climbrate3s)) {
@@ -788,7 +831,7 @@ uint8_t generate_warning()
788831
return HOTT_TONE_C; // sink rate 1s
789832
}
790833
if ((telestate->Settings.Warning.MaxDistance == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
791-
(telestate->Settings.Limit.MaxDistance < telestate->homedistance)) {
834+
(telestate->Settings.Limit.MaxDistance < telestate->homedistance) && gps_ok) {
792835
return HOTT_TONE_D; // maximum distance
793836
}
794837
if ((telestate->Settings.Warning.MinSensor1Temp == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
@@ -808,7 +851,7 @@ uint8_t generate_warning()
808851
return HOTT_TONE_I; // maximum temperature sensor 2
809852
}
810853
if ((telestate->Settings.Warning.MaxSpeed == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
811-
(telestate->Settings.Limit.MaxSpeed < telestate->GPS.Groundspeed * MS_TO_KMH)) {
854+
(telestate->Settings.Limit.MaxSpeed < telestate->GPS.Groundspeed * MS_TO_KMH) && gps_ok) {
812855
return HOTT_TONE_L; // maximum speed
813856
}
814857
if ((telestate->Settings.Warning.PosDifference2 == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&

flight/targets/boards/revolution/firmware/pios_board.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ static const PIOS_BOARD_IO_UART_Function flexiio_function_map[] = {
7373
[HWSETTINGS_RM_RCVRPORT_GPS] = PIOS_BOARD_IO_UART_GPS,
7474
[HWSETTINGS_RM_RCVRPORT_IBUS] = PIOS_BOARD_IO_UART_IBUS,
7575
[HWSETTINGS_RM_RCVRPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
76+
[HWSETTINGS_RM_RCVRPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
7677
};
7778

7879
static const PIOS_BOARD_IO_UART_Function main_function_map[] = {
@@ -86,6 +87,7 @@ static const PIOS_BOARD_IO_UART_Function main_function_map[] = {
8687
[HWSETTINGS_RM_MAINPORT_MSP] = PIOS_BOARD_IO_UART_MSP,
8788
[HWSETTINGS_RM_MAINPORT_MAVLINK] = PIOS_BOARD_IO_UART_MAVLINK,
8889
[HWSETTINGS_RM_MAINPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
90+
[HWSETTINGS_RM_MAINPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
8991
};
9092

9193
static const PIOS_BOARD_IO_UART_Function flexi_function_map[] = {
@@ -103,6 +105,7 @@ static const PIOS_BOARD_IO_UART_Function flexi_function_map[] = {
103105
[HWSETTINGS_RM_FLEXIPORT_MSP] = PIOS_BOARD_IO_UART_MSP,
104106
[HWSETTINGS_RM_FLEXIPORT_MAVLINK] = PIOS_BOARD_IO_UART_MAVLINK,
105107
[HWSETTINGS_RM_FLEXIPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
108+
[HWSETTINGS_RM_FLEXIPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
106109
};
107110

108111
/**

flight/targets/boards/revonano/firmware/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ OPTMODULES += ComUsbBridge
5757
OPTMODULES += UAVOMSPBridge
5858
OPTMODULES += UAVOMavlinkBridge
5959
OPTMODULES += UAVOFrSKYSensorHubBridge
60+
OPTMODULES += UAVOHottBridge
6061

6162
SRC += $(FLIGHTLIB)/notification.c
6263

flight/targets/boards/revonano/firmware/UAVObjects.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ UAVOBJSRCFILENAMES += poilearnsettings
124124
UAVOBJSRCFILENAMES += mpugyroaccelsettings
125125
UAVOBJSRCFILENAMES += txpidsettings
126126
UAVOBJSRCFILENAMES += txpidstatus
127+
UAVOBJSRCFILENAMES += hottbridgesettings
128+
UAVOBJSRCFILENAMES += hottbridgestatus
127129
UAVOBJSRCFILENAMES += takeofflocation
128130
UAVOBJSRCFILENAMES += perfcounter
129131
UAVOBJSRCFILENAMES += systemidentsettings

flight/targets/boards/revonano/firmware/inc/pios_config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
#define PIOS_INCLUDE_LED
123123
#define PIOS_INCLUDE_IAP
124124
#define PIOS_INCLUDE_SERVO
125+
#define PIOS_INCLUDE_HOTT_BRIDGE
125126
/* #define PIOS_INCLUDE_I2C_ESC */
126127
/* #define PIOS_INCLUDE_OVERO */
127128
/* #define PIOS_OVERO_SPI */

flight/targets/boards/revonano/firmware/pios_board.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ static const PIOS_BOARD_IO_UART_Function flexi_function_map[] = {
8686
[HWSETTINGS_RM_FLEXIPORT_MSP] = PIOS_BOARD_IO_UART_MSP,
8787
[HWSETTINGS_RM_FLEXIPORT_MAVLINK] = PIOS_BOARD_IO_UART_MAVLINK,
8888
[HWSETTINGS_RM_FLEXIPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
89+
[HWSETTINGS_RM_FLEXIPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
8990
};
9091

9192
static const PIOS_BOARD_IO_UART_Function main_function_map[] = {
@@ -98,6 +99,7 @@ static const PIOS_BOARD_IO_UART_Function main_function_map[] = {
9899
[HWSETTINGS_RM_MAINPORT_OSDHK] = PIOS_BOARD_IO_UART_OSDHK,
99100
[HWSETTINGS_RM_MAINPORT_MSP] = PIOS_BOARD_IO_UART_MSP,
100101
[HWSETTINGS_RM_MAINPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
102+
[HWSETTINGS_RM_MAINPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
101103
};
102104

103105
void PIOS_Board_Init(void)

0 commit comments

Comments
 (0)