diff --git a/src/Joystick/Joystick.cc b/src/Joystick/Joystick.cc index ad40bbd18b063eeebf039e686a5c17dec05d3d37..7d8c8d36fe92e4b804595550b69f78f6a337e840 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", @@ -664,6 +665,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; @@ -687,6 +689,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); } @@ -1008,6 +1011,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; } @@ -1096,6 +1101,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);