mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
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>
This commit is contained in:
commit
03d71dff55
@ -176,7 +176,8 @@ struct telemetrydata {
|
||||
FlightBatteryStateData Battery;
|
||||
FlightStatusData FlightStatus;
|
||||
GPSPositionSensorData GPS;
|
||||
GPSTimeData GPStime;
|
||||
AirspeedStateData Airspeed;
|
||||
GPSTimeData GPStime;
|
||||
GyroSensorData Gyro;
|
||||
HomeLocationData Home;
|
||||
PositionStateData Position;
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "gyrosensor.h"
|
||||
#include "gpspositionsensor.h"
|
||||
#include "gpstime.h"
|
||||
#include "airspeedstate.h"
|
||||
#include "homelocation.h"
|
||||
#include "positionstate.h"
|
||||
#include "systemalarms.h"
|
||||
@ -451,6 +452,25 @@ uint16_t build_GAM_message(struct hott_gam_message *msg)
|
||||
msg->current = scale_float2uword(current, 10, 0);
|
||||
msg->capacity = scale_float2uword(energy, 0.1f, 0);
|
||||
|
||||
// simulate individual cell voltage
|
||||
uint8_t cell_voltage = (telestate->Battery.Voltage > 0) ? scale_float2uint8(telestate->Battery.Voltage / telestate->Battery.NbCells, 50, 0) : 0;
|
||||
msg->cell1 = (telestate->Battery.NbCells >= 1) ? cell_voltage : 0;
|
||||
msg->cell2 = (telestate->Battery.NbCells >= 2) ? cell_voltage : 0;
|
||||
msg->cell3 = (telestate->Battery.NbCells >= 3) ? cell_voltage : 0;
|
||||
msg->cell4 = (telestate->Battery.NbCells >= 4) ? cell_voltage : 0;
|
||||
msg->cell5 = (telestate->Battery.NbCells >= 5) ? cell_voltage : 0;
|
||||
msg->cell6 = (telestate->Battery.NbCells >= 6) ? cell_voltage : 0;
|
||||
|
||||
msg->min_cell_volt = cell_voltage;
|
||||
msg->min_cell_volt_num = telestate->Battery.NbCells;
|
||||
|
||||
// apply main voltage to batt1 voltage
|
||||
msg->batt1_voltage = msg->voltage;
|
||||
|
||||
// AirSpeed
|
||||
float airspeed = (telestate->Airspeed.TrueAirspeed > 0) ? telestate->Airspeed.TrueAirspeed : 0;
|
||||
msg->speed = scale_float2uword(airspeed, MS_TO_KMH, 0);
|
||||
|
||||
// pressure kPa to 0.1Bar
|
||||
msg->pressure = scale_float2uint8(telestate->Baro.Pressure, 0.1f, 0);
|
||||
|
||||
@ -492,9 +512,26 @@ uint16_t build_EAM_message(struct hott_eam_message *msg)
|
||||
float voltage = (telestate->Battery.Voltage > 0) ? telestate->Battery.Voltage : 0;
|
||||
float current = (telestate->Battery.Current > 0) ? telestate->Battery.Current : 0;
|
||||
float energy = (telestate->Battery.ConsumedEnergy > 0) ? telestate->Battery.ConsumedEnergy : 0;
|
||||
msg->voltage = scale_float2uword(voltage, 10, 0);
|
||||
msg->current = scale_float2uword(current, 10, 0);
|
||||
msg->capacity = scale_float2uword(energy, 0.1f, 0);
|
||||
msg->voltage = scale_float2uword(voltage, 10, 0);
|
||||
msg->current = scale_float2uword(current, 10, 0);
|
||||
msg->capacity = scale_float2uword(energy, 0.1f, 0);
|
||||
|
||||
// simulate individual cell voltage
|
||||
uint8_t cell_voltage = (telestate->Battery.Voltage > 0) ? scale_float2uint8(telestate->Battery.Voltage / telestate->Battery.NbCells, 50, 0) : 0;
|
||||
msg->cell1_H = (telestate->Battery.NbCells >= 1) ? cell_voltage : 0;
|
||||
msg->cell2_H = (telestate->Battery.NbCells >= 2) ? cell_voltage : 0;
|
||||
msg->cell3_H = (telestate->Battery.NbCells >= 3) ? cell_voltage : 0;
|
||||
msg->cell4_H = (telestate->Battery.NbCells >= 4) ? cell_voltage : 0;
|
||||
msg->cell5_H = (telestate->Battery.NbCells >= 5) ? cell_voltage : 0;
|
||||
msg->cell6_H = (telestate->Battery.NbCells >= 6) ? cell_voltage : 0;
|
||||
msg->cell7_H = (telestate->Battery.NbCells >= 7) ? cell_voltage : 0;
|
||||
|
||||
// apply main voltage to batt1 voltage
|
||||
msg->batt1_voltage = msg->voltage;
|
||||
|
||||
// AirSpeed
|
||||
float airspeed = (telestate->Airspeed.TrueAirspeed > 0) ? telestate->Airspeed.TrueAirspeed : 0;
|
||||
msg->speed = scale_float2uword(airspeed, MS_TO_KMH, 0);
|
||||
|
||||
// temperatures
|
||||
msg->temperature1 = scale_float2uint8(telestate->Gyro.temperature, 1, OFFSET_TEMPERATURE);
|
||||
@ -597,6 +634,9 @@ void update_telemetrydata()
|
||||
if (GPSPositionSensorHandle() != NULL) {
|
||||
GPSPositionSensorGet(&telestate->GPS);
|
||||
}
|
||||
if (AirspeedStateHandle() != NULL) {
|
||||
AirspeedStateGet(&telestate->Airspeed);
|
||||
}
|
||||
if (GPSTimeHandle() != NULL) {
|
||||
GPSTimeGet(&telestate->GPStime);
|
||||
}
|
||||
@ -646,8 +686,9 @@ void update_telemetrydata()
|
||||
// calculate altitude relative to start position
|
||||
telestate->altitude = -telestate->Position.Down;
|
||||
|
||||
// check and set min/max values when armed.
|
||||
if (telestate->FlightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED) {
|
||||
// check and set min/max values when armed
|
||||
// and without receiver input for standalone board used as sensor
|
||||
if ((telestate->FlightStatus.Armed == FLIGHTSTATUS_ARMED_ARMED) || ((telestate->SysAlarms.Alarm.Attitude == SYSTEMALARMS_ALARM_OK) && (telestate->SysAlarms.Alarm.Receiver != SYSTEMALARMS_ALARM_OK))) {
|
||||
if (telestate->min_altitude > telestate->altitude) {
|
||||
telestate->min_altitude = telestate->altitude;
|
||||
}
|
||||
@ -774,10 +815,12 @@ void update_telemetrydata()
|
||||
*/
|
||||
uint8_t generate_warning()
|
||||
{
|
||||
bool gps_ok = (telestate->SysAlarms.Alarm.GPS == SYSTEMALARMS_ALARM_OK);
|
||||
|
||||
// set warning tone with hardcoded priority
|
||||
if ((telestate->Settings.Warning.MinSpeed == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
|
||||
(telestate->Settings.Limit.MinSpeed > telestate->GPS.Groundspeed * MS_TO_KMH)) {
|
||||
return HOTT_TONE_A; // maximum speed
|
||||
(telestate->Settings.Limit.MinSpeed > telestate->GPS.Groundspeed * MS_TO_KMH) && gps_ok) {
|
||||
return HOTT_TONE_A; // minimum speed
|
||||
}
|
||||
if ((telestate->Settings.Warning.NegDifference2 == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
|
||||
(telestate->Settings.Limit.NegDifference2 > telestate->climbrate3s)) {
|
||||
@ -788,7 +831,7 @@ uint8_t generate_warning()
|
||||
return HOTT_TONE_C; // sink rate 1s
|
||||
}
|
||||
if ((telestate->Settings.Warning.MaxDistance == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
|
||||
(telestate->Settings.Limit.MaxDistance < telestate->homedistance)) {
|
||||
(telestate->Settings.Limit.MaxDistance < telestate->homedistance) && gps_ok) {
|
||||
return HOTT_TONE_D; // maximum distance
|
||||
}
|
||||
if ((telestate->Settings.Warning.MinSensor1Temp == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
|
||||
@ -808,7 +851,7 @@ uint8_t generate_warning()
|
||||
return HOTT_TONE_I; // maximum temperature sensor 2
|
||||
}
|
||||
if ((telestate->Settings.Warning.MaxSpeed == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
|
||||
(telestate->Settings.Limit.MaxSpeed < telestate->GPS.Groundspeed * MS_TO_KMH)) {
|
||||
(telestate->Settings.Limit.MaxSpeed < telestate->GPS.Groundspeed * MS_TO_KMH) && gps_ok) {
|
||||
return HOTT_TONE_L; // maximum speed
|
||||
}
|
||||
if ((telestate->Settings.Warning.PosDifference2 == HOTTBRIDGESETTINGS_WARNING_ENABLED) &&
|
||||
|
@ -73,6 +73,7 @@ static const PIOS_BOARD_IO_UART_Function flexiio_function_map[] = {
|
||||
[HWSETTINGS_RM_RCVRPORT_GPS] = PIOS_BOARD_IO_UART_GPS,
|
||||
[HWSETTINGS_RM_RCVRPORT_IBUS] = PIOS_BOARD_IO_UART_IBUS,
|
||||
[HWSETTINGS_RM_RCVRPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
|
||||
[HWSETTINGS_RM_RCVRPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
|
||||
};
|
||||
|
||||
static const PIOS_BOARD_IO_UART_Function main_function_map[] = {
|
||||
@ -86,6 +87,7 @@ static const PIOS_BOARD_IO_UART_Function main_function_map[] = {
|
||||
[HWSETTINGS_RM_MAINPORT_MSP] = PIOS_BOARD_IO_UART_MSP,
|
||||
[HWSETTINGS_RM_MAINPORT_MAVLINK] = PIOS_BOARD_IO_UART_MAVLINK,
|
||||
[HWSETTINGS_RM_MAINPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
|
||||
[HWSETTINGS_RM_MAINPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
|
||||
};
|
||||
|
||||
static const PIOS_BOARD_IO_UART_Function flexi_function_map[] = {
|
||||
@ -103,6 +105,7 @@ static const PIOS_BOARD_IO_UART_Function flexi_function_map[] = {
|
||||
[HWSETTINGS_RM_FLEXIPORT_MSP] = PIOS_BOARD_IO_UART_MSP,
|
||||
[HWSETTINGS_RM_FLEXIPORT_MAVLINK] = PIOS_BOARD_IO_UART_MAVLINK,
|
||||
[HWSETTINGS_RM_FLEXIPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
|
||||
[HWSETTINGS_RM_FLEXIPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -57,6 +57,7 @@ OPTMODULES += ComUsbBridge
|
||||
OPTMODULES += UAVOMSPBridge
|
||||
OPTMODULES += UAVOMavlinkBridge
|
||||
OPTMODULES += UAVOFrSKYSensorHubBridge
|
||||
OPTMODULES += UAVOHottBridge
|
||||
|
||||
SRC += $(FLIGHTLIB)/notification.c
|
||||
|
||||
|
@ -124,6 +124,8 @@ UAVOBJSRCFILENAMES += poilearnsettings
|
||||
UAVOBJSRCFILENAMES += mpugyroaccelsettings
|
||||
UAVOBJSRCFILENAMES += txpidsettings
|
||||
UAVOBJSRCFILENAMES += txpidstatus
|
||||
UAVOBJSRCFILENAMES += hottbridgesettings
|
||||
UAVOBJSRCFILENAMES += hottbridgestatus
|
||||
UAVOBJSRCFILENAMES += takeofflocation
|
||||
UAVOBJSRCFILENAMES += perfcounter
|
||||
UAVOBJSRCFILENAMES += systemidentsettings
|
||||
|
@ -122,6 +122,7 @@
|
||||
#define PIOS_INCLUDE_LED
|
||||
#define PIOS_INCLUDE_IAP
|
||||
#define PIOS_INCLUDE_SERVO
|
||||
#define PIOS_INCLUDE_HOTT_BRIDGE
|
||||
/* #define PIOS_INCLUDE_I2C_ESC */
|
||||
/* #define PIOS_INCLUDE_OVERO */
|
||||
/* #define PIOS_OVERO_SPI */
|
||||
|
@ -86,6 +86,7 @@ static const PIOS_BOARD_IO_UART_Function flexi_function_map[] = {
|
||||
[HWSETTINGS_RM_FLEXIPORT_MSP] = PIOS_BOARD_IO_UART_MSP,
|
||||
[HWSETTINGS_RM_FLEXIPORT_MAVLINK] = PIOS_BOARD_IO_UART_MAVLINK,
|
||||
[HWSETTINGS_RM_FLEXIPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
|
||||
[HWSETTINGS_RM_FLEXIPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
|
||||
};
|
||||
|
||||
static const PIOS_BOARD_IO_UART_Function main_function_map[] = {
|
||||
@ -98,6 +99,7 @@ static const PIOS_BOARD_IO_UART_Function main_function_map[] = {
|
||||
[HWSETTINGS_RM_MAINPORT_OSDHK] = PIOS_BOARD_IO_UART_OSDHK,
|
||||
[HWSETTINGS_RM_MAINPORT_MSP] = PIOS_BOARD_IO_UART_MSP,
|
||||
[HWSETTINGS_RM_MAINPORT_FRSKYSENSORHUB] = PIOS_BOARD_IO_UART_FRSKY_SENSORHUB,
|
||||
[HWSETTINGS_RM_MAINPORT_HOTTTELEMETRY] = PIOS_BOARD_IO_UART_HOTT_BRIDGE,
|
||||
};
|
||||
|
||||
void PIOS_Board_Init(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user