1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-22 12:54:14 +01:00

LP-609 Move batt/volt settings to new battery config page, add board rotation

This commit is contained in:
Laurent Lalanne 2019-05-18 22:45:19 +02:00
parent ff1b5bb56e
commit ef340c1d62
2 changed files with 106 additions and 46 deletions

View File

@ -232,6 +232,7 @@ static const char *const hottTextPageTitle[] = {
"**LIBREPILOT HoTT****", "**LIBREPILOT HoTT****",
"**LIBREPILOT CONFIG**", "**LIBREPILOT CONFIG**",
"*****GPS CONFIG******", "*****GPS CONFIG******",
"***BATTERY CONFIG****",
"---VARIO WARNINGS----", "---VARIO WARNINGS----",
"----VARIO LIMITS-----", "----VARIO LIMITS-----",
"------GPS PAGE-------", "------GPS PAGE-------",
@ -245,16 +246,17 @@ typedef enum {
HOTTTEXT_PAGE_MAIN = 0, HOTTTEXT_PAGE_MAIN = 0,
HOTTTEXT_PAGE_MAINCONFIG = 1, HOTTTEXT_PAGE_MAINCONFIG = 1,
HOTTTEXT_PAGE_GPSCONFIG = 2, HOTTTEXT_PAGE_GPSCONFIG = 2,
HOTTTEXT_PAGE_VARIOWARNINGS = 3, HOTTTEXT_PAGE_BATTERYCONFIG = 3,
HOTTTEXT_PAGE_VARIOLIMITS = 4, HOTTTEXT_PAGE_VARIOWARNINGS = 4,
HOTTTEXT_PAGE_GPS = 5, HOTTTEXT_PAGE_VARIOLIMITS = 5,
HOTTTEXT_PAGE_GENERAL = 6, HOTTTEXT_PAGE_GPS = 6,
HOTTTEXT_PAGE_ELECTRIC = 7, HOTTTEXT_PAGE_GENERAL = 7,
HOTTTEXT_PAGE_ESC = 8, HOTTTEXT_PAGE_ELECTRIC = 8,
HOTTTEXT_PAGE_SENSORREDIR = 9, HOTTTEXT_PAGE_ESC = 9,
HOTTTEXT_PAGE_SENSORREDIR = 10,
} hottTextPageElem; } hottTextPageElem;
#define HOTTTEXT_PAGE_NUMELEM 10 #define HOTTTEXT_PAGE_NUMELEM 11
typedef enum { typedef enum {
HOTTTEXT_EDITSTATUS_STEP1 = 0, HOTTTEXT_EDITSTATUS_STEP1 = 0,

View File

@ -57,6 +57,7 @@
#include "flightbatterysettings.h" #include "flightbatterysettings.h"
#include "hwsettings.h" #include "hwsettings.h"
#include "revosettings.h" #include "revosettings.h"
#include "attitudesettings.h"
#include "gpssettings.h" #include "gpssettings.h"
#include "homelocation.h" #include "homelocation.h"
#include "objectpersistence.h" #include "objectpersistence.h"
@ -236,9 +237,9 @@ static void uavoHoTTBridgeTask(__attribute__((unused)) void *parameters)
int8_t value_change = 0; int8_t value_change = 0;
static uint8_t step_change = 0; static uint8_t step_change = 0;
// define allowed edited lines for Main, Main Config, GPS config, VarioWarnings, VarioLimits, GPS, General, Electric, Esc pages and Sensor redirect page // define allowed edited lines for Main, Main Config, GPS config, Battery config, VarioWarnings, VarioLimits, GPS, General, Electric, Esc pages and Sensor redirect page
uint8_t min_line[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; uint8_t min_line[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
uint8_t max_line[] = { 6, 7, 5, 8, 8, 7, 7, 7, 7, 8 }; uint8_t max_line[] = { 6, 5, 5, 6, 8, 8, 7, 7, 7, 7, 8 };
static uint8_t page = HOTTTEXT_PAGE_MAIN; static uint8_t page = HOTTTEXT_PAGE_MAIN;
static uint8_t edit_status = HOTTTEXT_EDITSTATUS_DONE; static uint8_t edit_status = HOTTTEXT_EDITSTATUS_DONE;
@ -747,6 +748,7 @@ uint8_t build_TEXT_message(struct hott_text_message *msg, uint8_t page, uint8_t
HoTTBridgeSettingsWarningData alarmWarning; HoTTBridgeSettingsWarningData alarmWarning;
uint8_t varioSensitivity; uint8_t varioSensitivity;
RevoSettingsFusionAlgorithmOptions revoFusionAlgo; RevoSettingsFusionAlgorithmOptions revoFusionAlgo;
AttitudeSettingsBoardRotationData boardRotation;
FlightBatterySettingsSensorCalibrationsData battSensorCalibration; FlightBatterySettingsSensorCalibrationsData battSensorCalibration;
uint32_t battSensorCapacity; uint32_t battSensorCapacity;
HomeLocationSetOptions homeSet; HomeLocationSetOptions homeSet;
@ -1142,10 +1144,7 @@ uint8_t build_TEXT_message(struct hott_text_message *msg, uint8_t page, uint8_t
reverse_pixels((char *)msg->text[current_line - 1], 18, 20); reverse_pixels((char *)msg->text[current_line - 1], 18, 20);
} }
break; break;
case HOTTTEXT_PAGE_MAINCONFIG: case HOTTTEXT_PAGE_BATTERYCONFIG:
if (RevoSettingsHandle() != NULL) {
RevoSettingsFusionAlgorithmGet(&revoFusionAlgo);
}
if (FlightBatterySettingsHandle() != NULL) { if (FlightBatterySettingsHandle() != NULL) {
FlightBatterySettingsSensorCalibrationsGet(&battSensorCalibration); FlightBatterySettingsSensorCalibrationsGet(&battSensorCalibration);
} }
@ -1153,26 +1152,18 @@ uint8_t build_TEXT_message(struct hott_text_message *msg, uint8_t page, uint8_t
HwSettingsADCRoutingArrayGet(adcRouting); HwSettingsADCRoutingArrayGet(adcRouting);
} }
if (edit_mode && (current_line == 2)) { if (edit_mode && (current_line == 2)) {
if ((value_change > 0) && (revoFusionAlgo < REVOSETTINGS_FUSIONALGORITHM_ACRONOSENSORS)) {
revoFusionAlgo++;
} else if ((value_change < 0) && (revoFusionAlgo > REVOSETTINGS_FUSIONALGORITHM_NONE)) {
revoFusionAlgo--;
}
RevoSettingsFusionAlgorithmSet(&revoFusionAlgo);
}
if (edit_mode && (current_line == 3)) {
step = (step > HOTTTEXT_EDITSTATUS_STEP1K) ? HOTTTEXT_EDITSTATUS_STEP1K : step; step = (step > HOTTTEXT_EDITSTATUS_STEP1K) ? HOTTTEXT_EDITSTATUS_STEP1K : step;
// 1.00 to 30.00 // 1.00 to 30.00
battSensorCalibration.VoltageFactor = (float)(get_new_value((uint16_t)roundf(battSensorCalibration.VoltageFactor * 100), value_change, step, 100, 3000) / 100.0f); battSensorCalibration.VoltageFactor = (float)(get_new_value((uint16_t)roundf(battSensorCalibration.VoltageFactor * 100), value_change, step, 100, 3000) / 100.0f);
FlightBatterySettingsSensorCalibrationsSet(&battSensorCalibration); FlightBatterySettingsSensorCalibrationsSet(&battSensorCalibration);
} }
if (edit_mode && (current_line == 4)) { if (edit_mode && (current_line == 3)) {
step = (step > HOTTTEXT_EDITSTATUS_STEP1K) ? HOTTTEXT_EDITSTATUS_STEP1K : step; step = (step > HOTTTEXT_EDITSTATUS_STEP1K) ? HOTTTEXT_EDITSTATUS_STEP1K : step;
// 1.00 to 30.00 // 1.00 to 30.00
battSensorCalibration.CurrentFactor = (float)(get_new_value((uint16_t)roundf(battSensorCalibration.CurrentFactor * 100), value_change, step, 100, 3000) / 100.0f); battSensorCalibration.CurrentFactor = (float)(get_new_value((uint16_t)roundf(battSensorCalibration.CurrentFactor * 100), value_change, step, 100, 3000) / 100.0f);
FlightBatterySettingsSensorCalibrationsSet(&battSensorCalibration); FlightBatterySettingsSensorCalibrationsSet(&battSensorCalibration);
} }
if (edit_mode && (current_line == 5)) { if (edit_mode && (current_line == 4)) {
step = (step > HOTTTEXT_EDITSTATUS_STEP100) ? HOTTTEXT_EDITSTATUS_STEP100 : step; step = (step > HOTTTEXT_EDITSTATUS_STEP100) ? HOTTTEXT_EDITSTATUS_STEP100 : step;
// -9.00 to 9.00 // -9.00 to 9.00
battSensorCalibration.CurrentZero = (float)(get_new_value((int16_t)roundf(battSensorCalibration.CurrentZero * 100), value_change, step, -900, 900) / 100.0f); battSensorCalibration.CurrentZero = (float)(get_new_value((int16_t)roundf(battSensorCalibration.CurrentZero * 100), value_change, step, -900, 900) / 100.0f);
@ -1192,7 +1183,7 @@ uint8_t build_TEXT_message(struct hott_text_message *msg, uint8_t page, uint8_t
} }
} }
if (edit_mode && (current_line == 6)) { if (edit_mode && (current_line == 5)) {
newADCPin = get_newADCPin_value(adcRouting, voltageADCPin, value_change); newADCPin = get_newADCPin_value(adcRouting, voltageADCPin, value_change);
adcRouting[voltageADCPin] = HWSETTINGS_ADCROUTING_DISABLED; adcRouting[voltageADCPin] = HWSETTINGS_ADCROUTING_DISABLED;
if (newADCPin > ADC_XX_PIN_NOTFOUND) { if (newADCPin > ADC_XX_PIN_NOTFOUND) {
@ -1200,7 +1191,7 @@ uint8_t build_TEXT_message(struct hott_text_message *msg, uint8_t page, uint8_t
} }
HwSettingsADCRoutingArraySet(adcRouting); HwSettingsADCRoutingArraySet(adcRouting);
} }
if (edit_mode && (current_line == 7)) { if (edit_mode && (current_line == 6)) {
newADCPin = get_newADCPin_value(adcRouting, currentADCPin, value_change); newADCPin = get_newADCPin_value(adcRouting, currentADCPin, value_change);
adcRouting[currentADCPin] = HWSETTINGS_ADCROUTING_DISABLED; adcRouting[currentADCPin] = HWSETTINGS_ADCROUTING_DISABLED;
if (newADCPin > ADC_XX_PIN_NOTFOUND) { if (newADCPin > ADC_XX_PIN_NOTFOUND) {
@ -1208,7 +1199,40 @@ uint8_t build_TEXT_message(struct hott_text_message *msg, uint8_t page, uint8_t
} }
HwSettingsADCRoutingArraySet(adcRouting); HwSettingsADCRoutingArraySet(adcRouting);
} }
snprintf(msg->text[1], HOTT_TEXT_COLUMNS, " Volt. Factor %2d.%02d ", (uint16_t)(battSensorCalibration.VoltageFactor), (uint16_t)(battSensorCalibration.VoltageFactor * 100) % 100); // line 2
snprintf(msg->text[2], HOTT_TEXT_COLUMNS, " Curr. Factor %2d.%02d ", (uint16_t)(battSensorCalibration.CurrentFactor), (uint16_t)(battSensorCalibration.CurrentFactor * 100) % 100); // line 3
snprintf(msg->text[3], HOTT_TEXT_COLUMNS, " Curr. Zero %s%d.%02d ", (battSensorCalibration.CurrentZero < 0 ? "-" : " "), (uint16_t)(fabsf(battSensorCalibration.CurrentZero)), (uint16_t)(fabsf(battSensorCalibration.CurrentZero * 100)) % 100); // line 4
snprintf(msg->text[4], HOTT_TEXT_COLUMNS, " VoltagePin %s ", hottTextADCpinNames[voltageADCPin + 1]); // line 5
snprintf(msg->text[5], HOTT_TEXT_COLUMNS, " CurrentPin %s ", hottTextADCpinNames[currentADCPin + 1]); // line 6
snprintf(msg->text[6], HOTT_TEXT_COLUMNS, " "); // line 7
snprintf(msg->text[7], HOTT_TEXT_COLUMNS, "%2d.%02dV %3d.%02dA ",
(uint16_t)(telestate->Battery.Voltage), (uint16_t)(telestate->Battery.Voltage * 100) % 100,
(uint16_t)(telestate->Battery.Current), (uint16_t)(telestate->Battery.Current * 100) % 100); // line 8
if (current_line > 1) {
msg->text[current_line - 1][0] = '>';
}
if (edit_mode && ((current_line == 2) || (current_line == 3) || (current_line == 4))) {
reverse_pixels((char *)msg->text[current_line - 1], 14 + (5 - (step > 1 ? step + 1 : step)), 20 - (step > 1 ? step + 1 : step));
}
if (edit_mode && ((current_line == 5) || (current_line == 6))) {
reverse_pixels((char *)msg->text[current_line - 1], 16, 20);
}
break;
case HOTTTEXT_PAGE_MAINCONFIG:
if (RevoSettingsHandle() != NULL) {
RevoSettingsFusionAlgorithmGet(&revoFusionAlgo);
}
if (AttitudeSettingsHandle() != NULL) {
AttitudeSettingsBoardRotationGet(&boardRotation);
}
if (edit_mode && (current_line == 2)) {
if ((value_change > 0) && (revoFusionAlgo < REVOSETTINGS_FUSIONALGORITHM_ACRONOSENSORS)) {
revoFusionAlgo++;
} else if ((value_change < 0) && (revoFusionAlgo > REVOSETTINGS_FUSIONALGORITHM_NONE)) {
revoFusionAlgo--;
}
RevoSettingsFusionAlgorithmSet(&revoFusionAlgo);
}
char *txt_fusionalgo = ""; char *txt_fusionalgo = "";
// check current algo status // check current algo status
switch (revoFusionAlgo) { switch (revoFusionAlgo) {
@ -1245,16 +1269,32 @@ uint8_t build_TEXT_message(struct hott_text_message *msg, uint8_t page, uint8_t
default: default:
txt_fusionalgo = "!UNDEFINED!"; txt_fusionalgo = "!UNDEFINED!";
} }
if (edit_mode && (current_line == 3)) {
step = (step > HOTTTEXT_EDITSTATUS_STEP100) ? HOTTTEXT_EDITSTATUS_STEP1K : step;
// -180 to 180
boardRotation.Roll = (float)(get_new_value((int16_t)(boardRotation.Roll * 10), value_change, step, -1800, 1800) / 10.0f);
AttitudeSettingsBoardRotationSet(&boardRotation);
}
if (edit_mode && (current_line == 4)) {
step = (step > HOTTTEXT_EDITSTATUS_STEP100) ? HOTTTEXT_EDITSTATUS_STEP1K : step;
// -180 to 180
boardRotation.Pitch = (float)(get_new_value((int16_t)(boardRotation.Pitch * 10), value_change, step, -1800, 1800) / 10.0f);
AttitudeSettingsBoardRotationSet(&boardRotation);
}
if (edit_mode && (current_line == 5)) {
step = (step > HOTTTEXT_EDITSTATUS_STEP100) ? HOTTTEXT_EDITSTATUS_STEP1K : step;
// -180 to 180
boardRotation.Yaw = (float)(get_new_value((int16_t)(boardRotation.Yaw * 10), value_change, step, -1800, 1800) / 10.0f);
AttitudeSettingsBoardRotationSet(&boardRotation);
}
snprintf(msg->text[1], HOTT_TEXT_COLUMNS, " EstAlgo %s ", txt_fusionalgo); // line 2 snprintf(msg->text[1], HOTT_TEXT_COLUMNS, " EstAlgo %s ", txt_fusionalgo); // line 2
snprintf(msg->text[2], HOTT_TEXT_COLUMNS, " Volt. Factor %2d.%02d ", (uint16_t)(battSensorCalibration.VoltageFactor), (uint16_t)(battSensorCalibration.VoltageFactor * 100) % 100); // line 3 snprintf(msg->text[2], HOTT_TEXT_COLUMNS, " Roll rot. %4d.%d ", (int16_t)(boardRotation.Roll), (int16_t)fabs(boardRotation.Roll * 10) % 10); // line 3
snprintf(msg->text[3], HOTT_TEXT_COLUMNS, " Curr. Factor %2d.%02d ", (uint16_t)(battSensorCalibration.CurrentFactor), (uint16_t)(battSensorCalibration.CurrentFactor * 100) % 100); // line 4 snprintf(msg->text[3], HOTT_TEXT_COLUMNS, " Pitch rot. %4d.%d ", (int16_t)(boardRotation.Pitch), (int16_t)fabs(boardRotation.Pitch * 10) % 10); // line 4
snprintf(msg->text[4], HOTT_TEXT_COLUMNS, " Curr. Zero %s%d.%02d ", (battSensorCalibration.CurrentZero < 0 ? "-" : " "), (uint16_t)(fabsf(battSensorCalibration.CurrentZero)), (uint16_t)(fabsf(battSensorCalibration.CurrentZero * 100)) % 100); // line 5 snprintf(msg->text[4], HOTT_TEXT_COLUMNS, " Yaw rot. %4d.%d ", (int16_t)(boardRotation.Yaw), (int16_t)fabs(boardRotation.Yaw * 10) % 10); // line 5
snprintf(msg->text[5], HOTT_TEXT_COLUMNS, " VoltagePin %s ", hottTextADCpinNames[voltageADCPin + 1]); // line 6 snprintf(msg->text[5], HOTT_TEXT_COLUMNS, " "); // line 6
snprintf(msg->text[6], HOTT_TEXT_COLUMNS, " CurrentPin %s ", hottTextADCpinNames[currentADCPin + 1]); // line 7 snprintf(msg->text[6], HOTT_TEXT_COLUMNS, " "); // line 7
snprintf(msg->text[7], HOTT_TEXT_COLUMNS, "%2d.%02dV %3d.%02dA ", snprintf(msg->text[7], HOTT_TEXT_COLUMNS, " "); // line 8
(uint16_t)(telestate->Battery.Voltage), (uint16_t)(telestate->Battery.Voltage * 100) % 100,
(uint16_t)(telestate->Battery.Current), (uint16_t)(telestate->Battery.Current * 100) % 100); // line 8
if (current_line > 1) { if (current_line > 1) {
msg->text[current_line - 1][0] = '>'; msg->text[current_line - 1][0] = '>';
} }
@ -1262,10 +1302,7 @@ uint8_t build_TEXT_message(struct hott_text_message *msg, uint8_t page, uint8_t
reverse_pixels((char *)msg->text[current_line - 1], 9, 20); reverse_pixels((char *)msg->text[current_line - 1], 9, 20);
} }
if (edit_mode && ((current_line == 3) || (current_line == 4) || (current_line == 5))) { if (edit_mode && ((current_line == 3) || (current_line == 4) || (current_line == 5))) {
reverse_pixels((char *)msg->text[current_line - 1], 14 + (5 - (step > 1 ? step + 1 : step)), 20 - (step > 1 ? step + 1 : step)); reverse_pixels((char *)msg->text[current_line - 1], 15 + (4 - (step > 0 ? step + 1 : step)), 20 - (step > 0 ? step + 1 : step));
}
if (edit_mode && ((current_line == 6) || (current_line == 7))) {
reverse_pixels((char *)msg->text[current_line - 1], 16, 20);
} }
break; break;
default: default:
@ -1347,6 +1384,13 @@ uint8_t get_page(uint8_t page, bool next)
break; break;
} }
case HOTTTEXT_PAGE_GPSCONFIG: case HOTTTEXT_PAGE_GPSCONFIG:
if ((sensor.GAM == HOTTBRIDGESETTINGS_SENSOR_ENABLED) ||
(sensor.EAM == HOTTBRIDGESETTINGS_SENSOR_ENABLED) ||
(sensor.ESC == HOTTBRIDGESETTINGS_SENSOR_ENABLED)) {
page = HOTTTEXT_PAGE_BATTERYCONFIG;
break;
}
case HOTTTEXT_PAGE_BATTERYCONFIG:
if ((sensor.VARIO == HOTTBRIDGESETTINGS_SENSOR_ENABLED) || if ((sensor.VARIO == HOTTBRIDGESETTINGS_SENSOR_ENABLED) ||
(sensor.GAM == HOTTBRIDGESETTINGS_SENSOR_ENABLED) || (sensor.GAM == HOTTBRIDGESETTINGS_SENSOR_ENABLED) ||
(sensor.GPS == HOTTBRIDGESETTINGS_SENSOR_ENABLED)) { (sensor.GPS == HOTTBRIDGESETTINGS_SENSOR_ENABLED)) {
@ -1429,6 +1473,13 @@ uint8_t get_page(uint8_t page, bool next)
break; break;
} }
case HOTTTEXT_PAGE_VARIOWARNINGS: case HOTTTEXT_PAGE_VARIOWARNINGS:
if ((sensor.GAM == HOTTBRIDGESETTINGS_SENSOR_ENABLED) ||
(sensor.EAM == HOTTBRIDGESETTINGS_SENSOR_ENABLED) ||
(sensor.ESC == HOTTBRIDGESETTINGS_SENSOR_ENABLED)) {
page = HOTTTEXT_PAGE_BATTERYCONFIG;
break;
}
case HOTTTEXT_PAGE_BATTERYCONFIG:
if (sensor.GPS == HOTTBRIDGESETTINGS_SENSOR_ENABLED) { if (sensor.GPS == HOTTBRIDGESETTINGS_SENSOR_ENABLED) {
page = HOTTTEXT_PAGE_GPSCONFIG; page = HOTTTEXT_PAGE_GPSCONFIG;
break; break;
@ -1542,7 +1593,6 @@ float get_redirect_sensor_value(uint8_t hott_sensor)
return value; return value;
} }
/** /**
* get new ADCPin for edited field * get new ADCPin for edited field
*/ */
@ -1609,6 +1659,18 @@ void store_settings(uint8_t page, uint8_t current_line)
UAVObjSave(HoTTBridgeSettingsHandle(), 0); UAVObjSave(HoTTBridgeSettingsHandle(), 0);
UAVObjSave(FlightBatterySettingsHandle(), 0); UAVObjSave(FlightBatterySettingsHandle(), 0);
break; break;
case HOTTTEXT_PAGE_BATTERYCONFIG:
switch (current_line) {
case 2:
case 3:
case 4:
UAVObjSave(FlightBatterySettingsHandle(), 0);
break;
case 5:
case 6:
UAVObjSave(HwSettingsHandle(), 0);
break;
}
case HOTTTEXT_PAGE_GPSCONFIG: case HOTTTEXT_PAGE_GPSCONFIG:
UAVObjSave(GPSSettingsHandle(), 0); UAVObjSave(GPSSettingsHandle(), 0);
break; break;
@ -1620,11 +1682,7 @@ void store_settings(uint8_t page, uint8_t current_line)
case 3: case 3:
case 4: case 4:
case 5: case 5:
UAVObjSave(FlightBatterySettingsHandle(), 0); UAVObjSave(AttitudeSettingsHandle(), 0);
break;
case 6:
case 7:
UAVObjSave(HwSettingsHandle(), 0);
break; break;
} }
} }