diff --git a/src/Joystick/Joystick.cc b/src/Joystick/Joystick.cc index aa5c3e8bc24ab53b6f9469ed5d9b0a2340e7f4e4..e3e5e8c9f8feeea29abb4bbfcd439fb8564fdb73 100644 --- a/src/Joystick/Joystick.cc +++ b/src/Joystick/Joystick.cc @@ -64,6 +64,7 @@ const char* Joystick::_buttonActionGimbalUp = QT_TR_NOOP("Gimbal Up"); const char* Joystick::_buttonActionGimbalLeft = QT_TR_NOOP("Gimbal Left"); const char* Joystick::_buttonActionGimbalRight = QT_TR_NOOP("Gimbal Right"); const char* Joystick::_buttonActionGimbalCenter = QT_TR_NOOP("Gimbal Center"); +const char* Joystick::_buttonActionEmergencyStop = QT_TR_NOOP("Emergency Stop"); const char* Joystick::_rgFunctionSettingsKey[Joystick::maxFunction] = { "RollAxis", @@ -684,6 +685,7 @@ void Joystick::startPolling(Vehicle* vehicle) disconnect(this, &Joystick::gimbalYawStep, _activeVehicle, &Vehicle::gimbalYawStep); disconnect(this, &Joystick::centerGimbal, _activeVehicle, &Vehicle::centerGimbal); disconnect(this, &Joystick::gimbalControlValue, _activeVehicle, &Vehicle::gimbalControlValue); + disconnect(this, &Joystick::emergencyStop, _activeVehicle, &Vehicle::emergencyStop); } // Always set up the new vehicle _activeVehicle = vehicle; @@ -707,6 +709,7 @@ void Joystick::startPolling(Vehicle* vehicle) connect(this, &Joystick::gimbalYawStep, _activeVehicle, &Vehicle::gimbalYawStep); connect(this, &Joystick::centerGimbal, _activeVehicle, &Vehicle::centerGimbal); connect(this, &Joystick::gimbalControlValue, _activeVehicle, &Vehicle::gimbalControlValue); + connect(this, &Joystick::emergencyStop, _activeVehicle, &Vehicle::emergencyStop); // FIXME: **** //connect(this, &Joystick::buttonActionTriggered, uas, &UAS::triggerAction); } @@ -1028,6 +1031,8 @@ void Joystick::_executeButtonAction(const QString& action, bool buttonDown) _localYaw = 0.0; emit gimbalControlValue(0.0, 0.0); } + } else if(action == _buttonActionEmergencyStop) { + if(buttonDown) emit emergencyStop(); } else { qCDebug(JoystickLog) << "_buttonAction unknown action:" << action; } @@ -1116,6 +1121,7 @@ void Joystick::_buildActionList(Vehicle* activeVehicle) _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalLeft, true)); _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalRight, true)); _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalCenter)); + _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionEmergencyStop)); for(int i = 0; i < _assignableButtonActions.count(); i++) { AssignableButtonAction* p = qobject_cast(_assignableButtonActions[i]); _availableActionTitles << p->action(); diff --git a/src/Joystick/Joystick.h b/src/Joystick/Joystick.h index 5f8aef0b3f74812832092a59887de6b7a0097272..54cdca902283e747b866bf1abaa80683e5c9e65a 100644 --- a/src/Joystick/Joystick.h +++ b/src/Joystick/Joystick.h @@ -225,6 +225,7 @@ signals: void setArmed (bool arm); void setVtolInFwdFlight (bool set); void setFlightMode (const QString& flightMode); + void emergencyStop (); protected: void _setDefaultCalibration (); @@ -351,6 +352,7 @@ private: static const char* _buttonActionGimbalLeft; static const char* _buttonActionGimbalRight; static const char* _buttonActionGimbalCenter; + static const char* _buttonActionEmergencyStop; private slots: void _activeVehicleChanged(Vehicle* activeVehicle);