diff --git a/artwork/3D Model/multi/blackout/BlackoutMiniHQuad.3DS b/artwork/3D Model/multi/blackout/BlackoutMiniHQuad.3DS new file mode 100755 index 000000000..1217e54de Binary files /dev/null and b/artwork/3D Model/multi/blackout/BlackoutMiniHQuad.3DS differ diff --git a/artwork/3D Model/multi/blackout/BlackoutMiniHQuad.jpg b/artwork/3D Model/multi/blackout/BlackoutMiniHQuad.jpg new file mode 100755 index 000000000..de2db9dcb Binary files /dev/null and b/artwork/3D Model/multi/blackout/BlackoutMiniHQuad.jpg differ diff --git a/artwork/3D Model/multi/blackout/TEXTURE.PNG b/artwork/3D Model/multi/blackout/TEXTURE.PNG new file mode 100755 index 000000000..3c430b5df Binary files /dev/null and b/artwork/3D Model/multi/blackout/TEXTURE.PNG differ diff --git a/flight/modules/Actuator/actuator.c b/flight/modules/Actuator/actuator.c index 891537bd6..e8b75b645 100644 --- a/flight/modules/Actuator/actuator.c +++ b/flight/modules/Actuator/actuator.c @@ -806,7 +806,7 @@ static void actuator_update_rate_if_changed(const ActuatorSettingsData *actuator freq[i] = 100; // Value must be small enough so CCr isn't update until the PIOS_Servo_Update is triggered clock[i] = ACTUATOR_ONESHOT125_CLOCK; // Setup an 8MHz timer clock break; - case ACTUATORSETTINGS_BANKMODE_ONESHOT: + case ACTUATORSETTINGS_BANKMODE_PWMSYNC: freq[i] = 100; clock[i] = ACTUATOR_PWM_CLOCK; break; diff --git a/flight/targets/boards/coptercontrol/firmware/pios_board.c b/flight/targets/boards/coptercontrol/firmware/pios_board.c index e49597ead..444c9f772 100644 --- a/flight/targets/boards/coptercontrol/firmware/pios_board.c +++ b/flight/targets/boards/coptercontrol/firmware/pios_board.c @@ -717,7 +717,7 @@ void PIOS_Board_Init(void) uint8_t hwsettings_rcvrport; HwSettingsCC_RcvrPortGet(&hwsettings_rcvrport); - switch (hwsettings_rcvrport) { + switch ((HwSettingsCC_RcvrPortOptions)hwsettings_rcvrport) { case HWSETTINGS_CC_RCVRPORT_DISABLEDONESHOT: #if defined(PIOS_INCLUDE_HCSR04) { @@ -746,7 +746,7 @@ void PIOS_Board_Init(void) #if defined(PIOS_INCLUDE_PPM) { uint32_t pios_ppm_id; - if( hwsettings_rcvrport == HWSETTINGS_CC_RCVRPORT_PPM_PIN6ONESHOT){ + if (hwsettings_rcvrport == HWSETTINGS_CC_RCVRPORT_PPM_PIN6ONESHOT) { PIOS_PPM_Init(&pios_ppm_id, &pios_ppm_pin6_cfg); } else { PIOS_PPM_Init(&pios_ppm_id, &pios_ppm_cfg); @@ -787,6 +787,8 @@ void PIOS_Board_Init(void) } #endif /* PIOS_INCLUDE_PWM */ break; + case HWSETTINGS_CC_RCVRPORT_OUTPUTSONESHOT: + break; } #if defined(PIOS_INCLUDE_GCSRCVR) @@ -804,11 +806,12 @@ void PIOS_Board_Init(void) GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); #ifndef PIOS_ENABLE_DEBUG_PINS - switch (hwsettings_rcvrport) { + switch ((HwSettingsCC_RcvrPortOptions)hwsettings_rcvrport) { case HWSETTINGS_CC_RCVRPORT_DISABLEDONESHOT: case HWSETTINGS_CC_RCVRPORT_PWMNOONESHOT: case HWSETTINGS_CC_RCVRPORT_PPMNOONESHOT: case HWSETTINGS_CC_RCVRPORT_PPMPWMNOONESHOT: + case HWSETTINGS_CC_RCVRPORT_PPM_PIN6ONESHOT: PIOS_Servo_Init(&pios_servo_cfg); break; case HWSETTINGS_CC_RCVRPORT_PPMOUTPUTSNOONESHOT: @@ -865,17 +868,20 @@ SystemAlarmsExtendedAlarmStatusOptions CopterControlConfigHook() uint8_t recmode; HwSettingsCC_RcvrPortGet(&recmode); + uint8_t flexiMode; uint8_t modes[ACTUATORSETTINGS_BANKMODE_NUMELEM]; ActuatorSettingsBankModeGet(modes); + HwSettingsCC_FlexiPortGet(&flexiMode); + switch ((HwSettingsCC_RcvrPortOptions)recmode) { // Those modes allows oneshot usage case HWSETTINGS_CC_RCVRPORT_DISABLEDONESHOT: case HWSETTINGS_CC_RCVRPORT_OUTPUTSONESHOT: - return SYSTEMALARMS_EXTENDEDALARMSTATUS_NONE; - case HWSETTINGS_CC_RCVRPORT_PPM_PIN6ONESHOT: - if (modes[3] == ACTUATORSETTINGS_BANKMODE_ONESHOT || - modes[3] == ACTUATORSETTINGS_BANKMODE_ONESHOT125) { + if ((recmode == HWSETTINGS_CC_RCVRPORT_PPM_PIN6ONESHOT || + flexiMode == HWSETTINGS_CC_FLEXIPORT_PPM) && + (modes[3] == ACTUATORSETTINGS_BANKMODE_PWMSYNC || + modes[3] == ACTUATORSETTINGS_BANKMODE_ONESHOT125)) { return SYSTEMALARMS_EXTENDEDALARMSTATUS_UNSUPPORTEDCONFIG_ONESHOT; } else { return SYSTEMALARMS_EXTENDEDALARMSTATUS_NONE; @@ -887,7 +893,7 @@ SystemAlarmsExtendedAlarmStatusOptions CopterControlConfigHook() case HWSETTINGS_CC_RCVRPORT_PPMPWMNOONESHOT: case HWSETTINGS_CC_RCVRPORT_PWMNOONESHOT: for (uint8_t i = 0; i < ACTUATORSETTINGS_BANKMODE_NUMELEM; i++) { - if (modes[i] == ACTUATORSETTINGS_BANKMODE_ONESHOT || + if (modes[i] == ACTUATORSETTINGS_BANKMODE_PWMSYNC || modes[i] == ACTUATORSETTINGS_BANKMODE_ONESHOT125) { return SYSTEMALARMS_EXTENDEDALARMSTATUS_UNSUPPORTEDCONFIG_ONESHOT;; } diff --git a/ground/openpilotgcs/share/openpilotgcs/default_configurations/OpenPilotGCS.xml b/ground/openpilotgcs/share/openpilotgcs/default_configurations/OpenPilotGCS.xml index 031abd755..17c8c46a5 100644 --- a/ground/openpilotgcs/share/openpilotgcs/default_configurations/OpenPilotGCS.xml +++ b/ground/openpilotgcs/share/openpilotgcs/default_configurations/OpenPilotGCS.xml @@ -1551,6 +1551,17 @@ false + + + false + 0.0.0 + + + %%DATAPATH%%models/multi/blackout/BlackoutMiniHQuad.3DS + %%DATAPATH%%models/backgrounds/default_background.png + false + + false @@ -2530,7 +2541,7 @@ ModelViewGadget - Test Quad X + Blackout_MiniH uavGadget diff --git a/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/BlackoutMiniHQuad.3DS b/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/BlackoutMiniHQuad.3DS new file mode 100755 index 000000000..1217e54de Binary files /dev/null and b/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/BlackoutMiniHQuad.3DS differ diff --git a/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/BlackoutMiniHQuad.jpg b/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/BlackoutMiniHQuad.jpg new file mode 100755 index 000000000..de2db9dcb Binary files /dev/null and b/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/BlackoutMiniHQuad.jpg differ diff --git a/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/TEXTURE.PNG b/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/TEXTURE.PNG new file mode 100755 index 000000000..3c430b5df Binary files /dev/null and b/ground/openpilotgcs/share/openpilotgcs/models/multi/blackout/TEXTURE.PNG differ diff --git a/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp b/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp index 4db18b685..f11b22eaf 100644 --- a/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp @@ -107,7 +107,7 @@ ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(paren addWidgetBinding("ActuatorSettings", "BankMode", ui->cb_outputMode5, 4, 0, true); addWidgetBinding("ActuatorSettings", "BankMode", ui->cb_outputMode6, 5, 0, true); - systemAlarmsObj = SystemAlarms::GetInstance(getObjectManager()); + SystemAlarms *systemAlarmsObj = SystemAlarms::GetInstance(getObjectManager()); connect(systemAlarmsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateWarnings(UAVObject *))); disconnect(this, SLOT(refreshWidgetsValues(UAVObject *))); @@ -116,11 +116,13 @@ ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(paren refreshWidgetsValues(); updateEnableControls(); - setWarning("PIppo"); } ConfigOutputWidget::~ConfigOutputWidget() { + SystemAlarms *systemAlarmsObj = SystemAlarms::GetInstance(getObjectManager()); + + disconnect(systemAlarmsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateWarnings(UAVObject *))); // Do nothing } @@ -151,6 +153,7 @@ void ConfigOutputWidget::sendAllChannelTests() */ void ConfigOutputWidget::runChannelTests(bool state) { + SystemAlarms *systemAlarmsObj = SystemAlarms::GetInstance(getObjectManager()); SystemAlarms::DataFields systemAlarms = systemAlarmsObj->getData(); if (state && systemAlarms.Alarm[SystemAlarms::ALARM_ACTUATOR] != SystemAlarms::ALARM_OK) { @@ -444,6 +447,7 @@ void ConfigOutputWidget::stopTests() void ConfigOutputWidget::updateWarnings(UAVObject *) { + SystemAlarms *systemAlarmsObj = SystemAlarms::GetInstance(getObjectManager()); SystemAlarms::DataFields systemAlarms = systemAlarmsObj->getData(); if (systemAlarms.Alarm[SystemAlarms::ALARM_SYSTEMCONFIGURATION] > SystemAlarms::ALARM_WARNING) { @@ -458,6 +462,8 @@ void ConfigOutputWidget::updateWarnings(UAVObject *) void ConfigOutputWidget::setWarning(QString message) { + QPixmap warningPic; + ui->gvWarning->scene()->clear(); if (!message.isNull()) { warningPic.load(":/configgadget/images/error.svg"); diff --git a/ground/openpilotgcs/src/plugins/config/configoutputwidget.h b/ground/openpilotgcs/src/plugins/config/configoutputwidget.h index c495bbd65..2478ca902 100644 --- a/ground/openpilotgcs/src/plugins/config/configoutputwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configoutputwidget.h @@ -57,7 +57,6 @@ private: Ui_OutputWidget *ui; QList sliders; - QPixmap warningPic; void updateChannelInSlider(QSlider *slider, QLabel *min, QLabel *max, QCheckBox *rev, int value); void assignOutputChannel(UAVDataObject *obj, QString &str); @@ -72,7 +71,6 @@ private: UAVObject::Metadata accInitialData; - SystemAlarms *systemAlarmsObj; private slots: void updateWarnings(UAVObject *); void stopTests(); diff --git a/ground/openpilotgcs/src/plugins/config/outputchannelform.cpp b/ground/openpilotgcs/src/plugins/config/outputchannelform.cpp index 8732aa43d..06d0f443b 100644 --- a/ground/openpilotgcs/src/plugins/config/outputchannelform.cpp +++ b/ground/openpilotgcs/src/plugins/config/outputchannelform.cpp @@ -27,6 +27,9 @@ #include "outputchannelform.h" +#define MAXOUTPUT_VALUE 2500 +#define MINOUTPUT_VALUE 500 + OutputChannelForm::OutputChannelForm(const int index, QWidget *parent) : ChannelForm(index, parent), ui(), m_inChannelTest(false) { @@ -45,6 +48,14 @@ OutputChannelForm::OutputChannelForm(const int index, QWidget *parent) : ui.actuatorLink->setChecked(false); connect(ui.actuatorLink, SIGNAL(toggled(bool)), this, SLOT(linkToggled(bool))); + // Set limits + ui.actuatorMin->setMaximum(MAXOUTPUT_VALUE); + ui.actuatorMax->setMaximum(MAXOUTPUT_VALUE); + ui.actuatorValue->setMaximum(MAXOUTPUT_VALUE); + ui.actuatorMin->setMinimum(MINOUTPUT_VALUE); + ui.actuatorMax->setMinimum(MINOUTPUT_VALUE); + ui.actuatorValue->setMinimum(MINOUTPUT_VALUE); + disableMouseWheelEvents(); } @@ -221,11 +232,13 @@ void OutputChannelForm::setRange(int minimum, int maximum) */ void OutputChannelForm::setChannelRange() { - int oldMini = ui.actuatorNeutral->minimum(); + int oldMini = ui.actuatorNeutral->minimum(); + int minValue = ui.actuatorMin->value(); + int maxValue = ui.actuatorMax->value(); // int oldMaxi = ui.actuatorNeutral->maximum(); - if (ui.actuatorMin->value() < ui.actuatorMax->value()) { + if (minValue <= maxValue) { ui.actuatorNeutral->setRange(ui.actuatorMin->value(), ui.actuatorMax->value()); ui.actuatorRev->setChecked(false); } else { @@ -237,6 +250,33 @@ void OutputChannelForm::setChannelRange() ui.actuatorNeutral->setValue(ui.actuatorNeutral->minimum()); } + // Enable only outputs already set in mixer + if (name() != "-") { + ui.actuatorMin->setEnabled(true); + ui.actuatorMax->setEnabled(true); + ui.actuatorNeutral->setEnabled(true); + ui.actuatorValue->setEnabled(true); + + // Enable checkboxes Rev and Link if some range + if (minValue != maxValue) { + ui.actuatorRev->setEnabled(true); + ui.actuatorLink->setEnabled(true); + } else { + ui.actuatorRev->setEnabled(false); + ui.actuatorLink->setEnabled(false); + } + } else { + ui.actuatorMin->setEnabled(false); + ui.actuatorMax->setEnabled(false); + ui.actuatorRev->setEnabled(false); + ui.actuatorLink->setEnabled(false); + ui.actuatorMin->setValue(1000); + ui.actuatorMax->setValue(1000); + ui.actuatorNeutral->setRange(minValue, maxValue); + ui.actuatorNeutral->setEnabled(false); + ui.actuatorValue->setEnabled(false); + } + // if (ui.actuatorNeutral->value() == oldMaxi) // this can be dangerous if it happens to be controlling a motor at the time! // ui.actuatorNeutral->setValue(ui.actuatorNeutral->maximum()); diff --git a/ground/openpilotgcs/src/plugins/ophid/inc/ophid_hidapi.h b/ground/openpilotgcs/src/plugins/ophid/inc/ophid_hidapi.h index 30366338a..7828773cd 100644 --- a/ground/openpilotgcs/src/plugins/ophid/inc/ophid_hidapi.h +++ b/ground/openpilotgcs/src/plugins/ophid/inc/ophid_hidapi.h @@ -33,9 +33,6 @@ #include #include #include -#if defined(Q_OS_LINUX) -#include -#endif #include "../hidapi/hidapi.h" #include "ophid_const.h" #include "ophid_global.h" diff --git a/ground/openpilotgcs/src/plugins/ophid/ophid.pro b/ground/openpilotgcs/src/plugins/ophid/ophid.pro index bad70ea7a..f882d9198 100644 --- a/ground/openpilotgcs/src/plugins/ophid/ophid.pro +++ b/ground/openpilotgcs/src/plugins/ophid/ophid.pro @@ -38,38 +38,20 @@ macx { -framework IOKit } -linux-g++ { +linux { SOURCES += src/ophid_usbmon_linux.cpp - LIBS += -lusb -ludev + LIBS += -ludev -lrt -lpthread # hidapi library ## rawhid # SOURCES += hidapi/linux/hid.c ## libusb SOURCES += hidapi/libusb/hid.c - LIBS += `pkg-config libusb-1.0 --libs` -lrt -lpthread - INCLUDEPATH += /usr/include/libusb-1.0 -# INCLUDEPATH += `pkg-config libusb-1.0 --cflags` + + CONFIG += link_pkgconfig + PKGCONFIG += libusb-1.0 !exists(/usr/include/libusb-1.0) { - error(Install libusb-1.0.0-dev using your package manager.) + error(Install libusb-1.0-0-dev using your package manager.) } } - -linux-g++-64 { - SOURCES += src/ophid_usbmon_linux.cpp - LIBS += -lusb -ludev - - # hidapi library - ## rawhid - # SOURCES += hidapi/linux/hid.c - ## libusb - SOURCES += hidapi/libusb/hid.c - LIBS += `pkg-config libusb-1.0 --libs` -lrt -lpthread - INCLUDEPATH += /usr/include/libusb-1.0 -# INCLUDEPATH += `pkg-config libusb-1.0 --cflags` - !exists(/usr/include/libusb-1.0) { - error(Install libusb-1.0.0-dev using your package manager.) - } -} - diff --git a/shared/uavobjectdefinition/actuatorsettings.xml b/shared/uavobjectdefinition/actuatorsettings.xml index fc7ff0741..24c1decb0 100644 --- a/shared/uavobjectdefinition/actuatorsettings.xml +++ b/shared/uavobjectdefinition/actuatorsettings.xml @@ -2,7 +2,7 @@ Settings for the @ref ActuatorModule that controls the channel assignments for the mixer based on AircraftType - +