From 85510483541f2c6a3b2648bdc1678829779e6e47 Mon Sep 17 00:00:00 2001 From: samguns Date: Tue, 26 May 2015 15:01:01 +0800 Subject: [PATCH] REVONANO 1. Sanity check for PWMSync & OneShot while using PWM receiver. 2. Remove CC in hwsettings.xml --- .../boards/revonano/firmware/pios_board.c | 51 ++++++++++++++++++- .../src/plugins/config/configoutputwidget.cpp | 5 +- .../src/plugins/setupwizard/pages/escpage.cpp | 31 ++++++++++- shared/uavobjectdefinition/hwsettings.xml | 8 +-- 4 files changed, 82 insertions(+), 13 deletions(-) diff --git a/flight/targets/boards/revonano/firmware/pios_board.c b/flight/targets/boards/revonano/firmware/pios_board.c index 41a5da831..dcf373a51 100644 --- a/flight/targets/boards/revonano/firmware/pios_board.c +++ b/flight/targets/boards/revonano/firmware/pios_board.c @@ -36,7 +36,8 @@ #include #include #include - +#include +#include #ifdef PIOS_INCLUDE_INSTRUMENTATION #include @@ -52,6 +53,8 @@ */ #include "../board_hw_defs.c" +static SystemAlarmsExtendedAlarmStatusOptions RevoNanoConfigHook(); +static void ActuatorSettingsUpdatedCb(UAVObjEvent *ev); /** * Sensor configurations */ @@ -764,8 +767,54 @@ void PIOS_Board_Init(void) } } #endif + + // Attach the board config check hook + SANITYCHECK_AttachHook(&RevoNanoConfigHook); + // trigger a config check if actuatorsettings are updated + ActuatorSettingsInitialize(); + ActuatorSettingsConnectCallback(ActuatorSettingsUpdatedCb); } +SystemAlarmsExtendedAlarmStatusOptions RevoNanoConfigHook() +{ + // inhibit usage of oneshot for non supported RECEIVER port modes + uint8_t recmode; + + HwSettingsRM_RcvrPortGet(&recmode); + uint8_t modes[ACTUATORSETTINGS_BANKMODE_NUMELEM]; + ActuatorSettingsBankModeGet(modes); + + switch ((HwSettingsRM_RcvrPortOptions)recmode) { + // Those modes allows oneshot usage + case HWSETTINGS_RM_RCVRPORT_DISABLED: + case HWSETTINGS_RM_RCVRPORT_PPM: + case HWSETTINGS_RM_RCVRPORT_PPMOUTPUTS: + case HWSETTINGS_RM_RCVRPORT_OUTPUTS: + return SYSTEMALARMS_EXTENDEDALARMSTATUS_NONE; + + // inhibit oneshot for the following modes + case HWSETTINGS_RM_RCVRPORT_PWM: + for (uint8_t i = 0; i < ACTUATORSETTINGS_BANKMODE_NUMELEM; i++) { + if (modes[i] == ACTUATORSETTINGS_BANKMODE_PWMSYNC || + modes[i] == ACTUATORSETTINGS_BANKMODE_ONESHOT125) { + return SYSTEMALARMS_EXTENDEDALARMSTATUS_UNSUPPORTEDCONFIG_ONESHOT;; + } + } + + return SYSTEMALARMS_EXTENDEDALARMSTATUS_NONE; + + default: + break; + } + + return SYSTEMALARMS_EXTENDEDALARMSTATUS_UNSUPPORTEDCONFIG_ONESHOT;; +} + +// trigger a configuration check if ActuatorSettings are changed. +void ActuatorSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev) +{ + configuration_check(); +} /** * @} * @} diff --git a/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp b/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp index 6f149dfba..2ba04e8b3 100644 --- a/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp @@ -472,10 +472,7 @@ void ConfigOutputWidget::updateWarnings(UAVObject *) if (systemAlarms.Alarm[SystemAlarms::ALARM_SYSTEMCONFIGURATION] > SystemAlarms::ALARM_WARNING) { switch (systemAlarms.ExtendedAlarmStatus[SystemAlarms::EXTENDEDALARMSTATUS_SYSTEMCONFIGURATION]) { case SystemAlarms::EXTENDEDALARMSTATUS_UNSUPPORTEDCONFIG_ONESHOT: - setWarning(tr("OneShot and PWMSync output only works with Receiver Port settings marked with '+OneShot'
" - "When using Receiver Port setting 'PPM_PIN8+OneShot' " - "Bank %2 must be set to PWM") - .arg(m_banks.at(3).color().name()).arg(m_banks.at(3).label()->text())); + setWarning(tr("OneShot and PWMSync output DO NOT work with Receiver Port is 'PWM'
")); return; } } diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/escpage.cpp b/ground/openpilotgcs/src/plugins/setupwizard/pages/escpage.cpp index d56a2ec1b..f6010f72d 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/pages/escpage.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/escpage.cpp @@ -73,5 +73,34 @@ void EscPage::initializePage() bool EscPage::isSynchOrOneShotAvailable() { - return true; + bool available = true; + + switch (getWizard()->getControllerType()) { + case SetupWizard::CONTROLLER_NANO: + switch (getWizard()->getVehicleType()) { + case SetupWizard::VEHICLE_MULTI: + switch (getWizard()->getVehicleSubType()) { + case SetupWizard::MULTI_ROTOR_TRI_Y: + case SetupWizard::MULTI_ROTOR_QUAD_X: + case SetupWizard::MULTI_ROTOR_QUAD_H: + case SetupWizard::MULTI_ROTOR_QUAD_PLUS: + available = getWizard()->getInputType() != SetupWizard::INPUT_PWM; + break; + + default: + available = false; + break; + } + break; + + default: + break; + } + break; + + default: + break; + } + + return available; } diff --git a/shared/uavobjectdefinition/hwsettings.xml b/shared/uavobjectdefinition/hwsettings.xml index c7584fea9..d5d991141 100644 --- a/shared/uavobjectdefinition/hwsettings.xml +++ b/shared/uavobjectdefinition/hwsettings.xml @@ -1,10 +1,6 @@ Selection of optional hardware configurations. - - - - @@ -28,9 +24,7 @@