diff --git a/src/plugins/parrot/parrotconnection.h b/src/plugins/parrot/parrotconnection.h index fec10d0..56cc5a6 100644 --- a/src/plugins/parrot/parrotconnection.h +++ b/src/plugins/parrot/parrotconnection.h @@ -1,100 +1,97 @@ /* * Copyright 2019 Eike Hein * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ -#ifndef PARROTCONNECTION_H -#define PARROTCONNECTION_H +#pragma once #include #include "parrotprotocol.h" #include "parrotvehicle.h" #include #include #include #include #include #include #include class ParrotConnection : public QObject { Q_OBJECT public: explicit ParrotConnection(ParrotVehicle::Type type, const QString &vehicleName, const QString &hostName, int port, QObject *parent = nullptr); ~ParrotConnection(); public Q_SLOTS: void handshake(const QString &productSerial = QString()); void reset(); void sendCommand(Parrot::Command command, const QVariantList &arguments, bool retryForever = false); void pilot(qint8 roll, qint8 pitch, qint8 yaw, qint8 gaz); Q_SIGNALS: void stateChanged(Kirogi::AbstractVehicle::ConnectionState state) const; void commandReceived(const ParrotCommand &command) const; private Q_SLOTS: void receiveData(); void pumpC2dAckQueue(); void sendPilotingCommand(); private: void initSockets(); void processIncomingFrame(const ParrotFrame &frame); void sendAck(const ParrotFrame &frame); void sendFrame(const ParrotFrame &frame); void sendData(const QByteArray &data, quint32 size); quint8 makeSeq(quint8 bufferId); ParrotVehicle::Type m_type; QString m_vehicleName; QHostAddress m_hostAddress; int m_port; QPointer m_handshakeSocket; QJsonObject m_handshakeResponse; // c2d = Controller-to-device, i.e. we send here. int m_c2dport; // d2c = Device-to-Controller, i.e. we listen here. int m_d2cPort; QPointer m_d2cSocket; QPointer m_c2dSocket; QHash m_seq; QQueue m_c2dAckQueue; QTimer *m_c2dAckTimer; QTimer *m_pilotingTimer; qint8 m_roll; qint8 m_pitch; qint8 m_yaw; qint8 m_gaz; }; - -#endif diff --git a/src/plugins/parrot/parrotplugin.h b/src/plugins/parrot/parrotplugin.h index f73fa61..e7fdabd 100644 --- a/src/plugins/parrot/parrotplugin.h +++ b/src/plugins/parrot/parrotplugin.h @@ -1,56 +1,53 @@ /* * Copyright 2019 Eike Hein * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ -#ifndef PARROTPLUGIN_H -#define PARROTPLUGIN_H +#pragma once #include "abstractvehicle.h" #include "vehiclesupportplugin.h" #include class ParrotVehicle; #ifndef Q_OS_ANDROID namespace KDNSSD { class ServiceBrowser; } #endif class ParrotPlugin : public Kirogi::VehicleSupportPlugin { Q_OBJECT public: ParrotPlugin(QObject *parent, const QVariantList &args); ~ParrotPlugin() override; QList vehicles() const override; private: QHash m_vehicles; #ifndef Q_OS_ANDROID KDNSSD::ServiceBrowser *m_bebop2Browser; KDNSSD::ServiceBrowser *m_anafiBrowser; #endif }; - -#endif diff --git a/src/plugins/parrot/parrotprotocol.h b/src/plugins/parrot/parrotprotocol.h index 3bd749d..3fe5ff0 100644 --- a/src/plugins/parrot/parrotprotocol.h +++ b/src/plugins/parrot/parrotprotocol.h @@ -1,315 +1,312 @@ /* * Copyright 2019 Eike Hein * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ -#ifndef PARROTPROTOCOL_H -#define PARROTPROTOCOL_H +#pragma once #include class Parrot : public QObject { public: Parrot() : QObject() { } ~Parrot() { } enum HeaderSizes { HEADER_COMMAND = 4, HEADER_FRAME = 7 }; Q_ENUM(HeaderSizes) enum DataType { ACK = 1, DATA = 2, LOW_LATENCY_DATA = 3, DATA_WITH_ACK = 4 }; Q_ENUM(DataType) enum BufferId { BUFFER_PING = 0, BUFFER_PONG = 1, BUFFER_C2D_NON_ACK_DATA = 10, BUFFER_C2D_ACK_DATA = 11, BUFFER_C2D_EMERGENCY_DATA = 12, BUFFER_D2C_ACK_DATA = 126, BUFFER_D2C_NON_ACK_DATA = 127, BUFFER_D2C_ACK_FOR_C2D_ACK_DATA = BUFFER_C2D_ACK_DATA + 128 }; Q_ENUM(BufferId) enum ArgumentType { TYPE_U8 = 0, TYPE_I8 = 1, TYPE_U16 = 2, TYPE_I16 = 3, TYPE_U32 = 4, TYPE_I32 = 5, TYPE_U64 = 6, TYPE_I64 = 7, TYPE_FLOAT = 8, TYPE_DOUBLE = 9, TYPE_STRING = 10, TYPE_ENUM = 11 }; Q_ENUM(ArgumentType) enum Command { UnknownCommand = 0, Ardrone3AccessoryStateBattery = 1, Ardrone3AnimationsFlip = 2, Ardrone3AntiflickeringStateelectricFrequencyChanged = 3, Ardrone3AntiflickeringStatemodeChanged = 4, Ardrone3AntiflickeringelectricFrequency = 5, Ardrone3AntiflickeringsetMode = 6, Ardrone3CameraOrientationV2 = 7, Ardrone3CameraStateOrientationV2 = 8, Ardrone3CameraStateVelocityRange = 9, Ardrone3CameraStatedefaultCameraOrientationV2 = 10, Ardrone3CameraVelocity = 11, Ardrone3GPSSettingsHomeType = 12, Ardrone3GPSSettingsReturnHomeDelay = 13, Ardrone3GPSSettingsSendControllerGPS = 14, Ardrone3GPSSettingsStateGPSFixStateChanged = 15, Ardrone3GPSSettingsStateGeofenceCenterChanged = 16, Ardrone3GPSSettingsStateHomeChanged = 17, Ardrone3GPSSettingsStateHomeTypeChanged = 18, Ardrone3GPSSettingsStateReturnHomeDelayChanged = 19, Ardrone3GPSStateHomeTypeAvailabilityChanged = 20, Ardrone3GPSStateHomeTypeChosenChanged = 21, Ardrone3GPSStateNumberOfSatelliteChanged = 22, Ardrone3MediaRecordEventPictureEventChanged = 23, Ardrone3MediaRecordEventVideoEventChanged = 24, Ardrone3MediaRecordPictureV2 = 25, Ardrone3MediaRecordStatePictureStateChangedV2 = 26, Ardrone3MediaRecordStateVideoStateChangedV2 = 27, Ardrone3MediaRecordVideoV2 = 28, Ardrone3MediaStreamingStateVideoEnableChanged = 29, Ardrone3MediaStreamingStateVideoStreamModeChanged = 30, Ardrone3MediaStreamingVideoEnable = 31, Ardrone3MediaStreamingVideoStreamMode = 32, Ardrone3NetworkSettingsStateWifiSelectionChanged = 33, Ardrone3NetworkSettingsStatewifiSecurity = 34, Ardrone3NetworkSettingsWifiSelection = 35, Ardrone3NetworkSettingswifiSecurity = 36, Ardrone3NetworkStateAllWifiAuthChannelChanged = 37, Ardrone3NetworkStateAllWifiScanChanged = 38, Ardrone3NetworkStateWifiAuthChannelListChanged = 39, Ardrone3NetworkStateWifiScanListChanged = 40, Ardrone3NetworkWifiAuthChannel = 41, Ardrone3NetworkWifiScan = 42, Ardrone3PictureSettingsAutoWhiteBalanceSelection = 43, Ardrone3PictureSettingsExpositionSelection = 44, Ardrone3PictureSettingsPictureFormatSelection = 45, Ardrone3PictureSettingsSaturationSelection = 46, Ardrone3PictureSettingsStateAutoWhiteBalanceChanged = 47, Ardrone3PictureSettingsStateExpositionChanged = 48, Ardrone3PictureSettingsStatePictureFormatChanged = 49, Ardrone3PictureSettingsStateSaturationChanged = 50, Ardrone3PictureSettingsStateTimelapseChanged = 51, Ardrone3PictureSettingsStateVideoAutorecordChanged = 52, Ardrone3PictureSettingsStateVideoFramerateChanged = 53, Ardrone3PictureSettingsStateVideoRecordingModeChanged = 54, Ardrone3PictureSettingsStateVideoResolutionsChanged = 55, Ardrone3PictureSettingsStateVideoStabilizationModeChanged = 56, Ardrone3PictureSettingsTimelapseSelection = 57, Ardrone3PictureSettingsVideoAutorecordSelection = 58, Ardrone3PictureSettingsVideoFramerate = 59, Ardrone3PictureSettingsVideoRecordingMode = 60, Ardrone3PictureSettingsVideoResolutions = 61, Ardrone3PictureSettingsVideoStabilizationMode = 62, Ardrone3PilotingCancelMoveTo = 63, Ardrone3PilotingEmergency = 64, Ardrone3PilotingEventmoveByEnd = 65, Ardrone3PilotingFlatTrim = 66, Ardrone3PilotingLanding = 67, Ardrone3PilotingNavigateHome = 68, Ardrone3PilotingPCMD = 69, Ardrone3PilotingSettingsBankedTurn = 70, Ardrone3PilotingSettingsMaxAltitude = 71, Ardrone3PilotingSettingsMaxDistance = 72, Ardrone3PilotingSettingsMaxTilt = 73, Ardrone3PilotingSettingsNoFlyOverMaxDistance = 74, Ardrone3PilotingSettingsSetMotionDetectionMode = 75, Ardrone3PilotingSettingsStateAutonomousFlightMaxHorizontalAcceleration = 76, Ardrone3PilotingSettingsStateAutonomousFlightMaxHorizontalSpeed = 77, Ardrone3PilotingSettingsStateAutonomousFlightMaxRotationSpeed = 78, Ardrone3PilotingSettingsStateAutonomousFlightMaxVerticalAcceleration = 79, Ardrone3PilotingSettingsStateAutonomousFlightMaxVerticalSpeed = 80, Ardrone3PilotingSettingsStateBankedTurnChanged = 81, Ardrone3PilotingSettingsStateMaxAltitudeChanged = 82, Ardrone3PilotingSettingsStateMaxDistanceChanged = 83, Ardrone3PilotingSettingsStateMaxTiltChanged = 84, Ardrone3PilotingSettingsStateMotionDetection = 85, Ardrone3PilotingSettingsStateNoFlyOverMaxDistanceChanged = 86, Ardrone3PilotingSettingssetAutonomousFlightMaxHorizontalAcceleration = 87, Ardrone3PilotingSettingssetAutonomousFlightMaxHorizontalSpeed = 88, Ardrone3PilotingSettingssetAutonomousFlightMaxRotationSpeed = 89, Ardrone3PilotingSettingssetAutonomousFlightMaxVerticalAcceleration = 90, Ardrone3PilotingSettingssetAutonomousFlightMaxVerticalSpeed = 91, Ardrone3PilotingStartPilotedPOI = 92, Ardrone3PilotingStateAlertStateChanged = 93, Ardrone3PilotingStateAltitudeChanged = 94, Ardrone3PilotingStateAttitudeChanged = 95, Ardrone3PilotingStateFlatTrimChanged = 96, Ardrone3PilotingStateFlyingStateChanged = 97, Ardrone3PilotingStateGpsLocationChanged = 98, Ardrone3PilotingStateMotionState = 99, Ardrone3PilotingStateNavigateHomeStateChanged = 100, Ardrone3PilotingStatePilotedPOI = 101, Ardrone3PilotingStatePositionChanged = 102, Ardrone3PilotingStateReturnHomeBatteryCapacity = 103, Ardrone3PilotingStateSpeedChanged = 104, Ardrone3PilotingStatemoveToChanged = 105, Ardrone3PilotingStopPilotedPOI = 106, Ardrone3PilotingTakeOff = 107, Ardrone3PilotingUserTakeOff = 108, Ardrone3PilotingmoveBy = 109, Ardrone3PilotingmoveTo = 110, Ardrone3SettingsStateCPUID = 111, Ardrone3SettingsStateMotorErrorLastErrorChanged = 112, Ardrone3SettingsStateMotorErrorStateChanged = 113, Ardrone3SettingsStateMotorFlightsStatusChanged = 114, Ardrone3SettingsStateProductGPSVersionChanged = 115, Ardrone3SoundStartAlertSound = 116, Ardrone3SoundStateAlertSound = 117, Ardrone3SoundStopAlertSound = 118, Ardrone3SpeedSettingsHullProtection = 119, Ardrone3SpeedSettingsMaxPitchRollRotationSpeed = 120, Ardrone3SpeedSettingsMaxRotationSpeed = 121, Ardrone3SpeedSettingsMaxVerticalSpeed = 122, Ardrone3SpeedSettingsStateHullProtectionChanged = 123, Ardrone3SpeedSettingsStateMaxPitchRollRotationSpeedChanged = 124, Ardrone3SpeedSettingsStateMaxRotationSpeedChanged = 125, Ardrone3SpeedSettingsStateMaxVerticalSpeedChanged = 126, CommonARLibsVersionsStateControllerLibARCommandsVersion = 127, CommonARLibsVersionsStateDeviceLibARCommandsVersion = 128, CommonARLibsVersionsStateSkyControllerLibARCommandsVersion = 129, CommonCalibrationMagnetoCalibration = 130, CommonCalibrationStateMagnetoCalibrationAxisToCalibrateChanged = 131, CommonCalibrationStateMagnetoCalibrationRequiredState = 132, CommonCalibrationStateMagnetoCalibrationStartedChanged = 133, CommonCalibrationStateMagnetoCalibrationStateChanged = 134, CommonCalibrationStatePitotCalibrationStateChanged = 135, CommonCameraSettingsStateCameraSettingsChanged = 136, CommonCommonAllStates = 137, CommonCommonCurrentDate = 138, CommonCommonCurrentTime = 139, CommonCommonReboot = 140, CommonCommonStateAllStatesChanged = 141, CommonCommonStateBatteryStateChanged = 142, CommonCommonStateCurrentDateChanged = 143, CommonCommonStateCurrentTimeChanged = 144, CommonCommonStateMassStorageContent = 145, CommonCommonStateMassStorageContentForCurrentRun = 146, CommonCommonStateMassStorageInfoStateListChanged = 147, CommonCommonStateMassStorageStateListChanged = 148, CommonCommonStateSensorsStatesListChanged = 149, CommonCommonStateVideoRecordingTimestamp = 150, CommonCommonStateWifiSignalChanged = 151, CommonControllerisPiloting = 152, CommonFactoryReset = 153, CommonFlightPlanEventSpeedBridleEvent = 154, CommonFlightPlanEventStartingErrorEvent = 155, CommonFlightPlanSettingsReturnHomeOnDisconnect = 156, CommonFlightPlanSettingsStateReturnHomeOnDisconnectChanged = 157, CommonFlightPlanStateAvailabilityStateChanged = 158, CommonFlightPlanStateComponentStateListChanged = 159, CommonFlightPlanStateLockStateChanged = 160, CommonMavlinkPause = 161, CommonMavlinkStart = 162, CommonMavlinkStateMavlinkFilePlayingStateChanged = 163, CommonMavlinkStateMissionItemExecuted = 164, CommonMavlinkStop = 165, CommonNetworkEventDisconnection = 166, CommonOverHeatStateOverHeatRegulationChanged = 167, CommonRunStateRunIdChanged = 168, CommonSettingsAllSettings = 169, CommonSettingsAutoCountry = 170, CommonSettingsCountry = 171, CommonSettingsProductName = 172, CommonSettingsReset = 173, CommonSettingsStateAllSettingsChanged = 174, CommonSettingsStateAutoCountryChanged = 175, CommonSettingsStateCountryChanged = 176, CommonSettingsStateProductNameChanged = 177, CommonSettingsStateProductSerialHighChanged = 178, CommonSettingsStateProductSerialLowChanged = 179, CommonSettingsStateProductVersionChanged = 180, CommonSettingsStateResetChanged = 181, CommonWifiSettingsOutdoorSetting = 182, CommonWifiSettingsStateoutdoorSettingsChanged = 183, Bla = 184 }; Q_ENUM(Command) }; class ParrotCommand { public: struct Tuple { inline explicit Tuple(quint8 _productId = 0, quint8 _classId = 0, quint16 _commandId = 0) : productId(_productId) , classId(_classId) , commandId(_commandId) { } quint8 productId; quint8 classId; quint16 commandId; inline bool operator==(const Tuple &t) const { return (productId == t.productId && classId == t.classId && commandId == t.commandId); } }; explicit ParrotCommand(Parrot::Command command, const QVariantList &arguments = QVariantList()); explicit ParrotCommand(Parrot::Command command, const QByteArray &arguments = QByteArray()); explicit ParrotCommand(const QByteArray &data); explicit ParrotCommand(); ~ParrotCommand(); QByteArray pack() const; Parrot::Command id() const; Tuple tuple; QByteArray data; private: static Parrot::Command commandForTuple(const Tuple &tuple); static Tuple tupleForCommand(Parrot::Command command); static QHash m_commandForTuple; static QHash m_tupleForCommand; static QHash> m_signatureForCommand; }; Q_DECLARE_METATYPE(ParrotCommand) inline uint qHash(const ParrotCommand::Tuple &t) { return t.productId * t.classId * t.commandId; } class ParrotFrame { public: explicit ParrotFrame(quint8 dataType, quint8 bufferId, quint8 seq, const QByteArray &data = QByteArray()); explicit ParrotFrame(const QByteArray &data, int start); ~ParrotFrame(); QByteArray pack() const; ParrotCommand command() const; quint8 dataType = 0; quint8 bufferId = 0; quint8 seq = 0; quint32 size = 0; QByteArray data; int retry = 0; // NOTE: Setting to -1 before sending means infinite retries. }; - -#endif diff --git a/src/plugins/parrot/parrotvehicle.h b/src/plugins/parrot/parrotvehicle.h index 4bcb5f5..59fad26 100644 --- a/src/plugins/parrot/parrotvehicle.h +++ b/src/plugins/parrot/parrotvehicle.h @@ -1,205 +1,202 @@ /* * Copyright 2019 Eike Hein * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ -#ifndef PARROTVEHICLE_H -#define PARROTVEHICLE_H +#pragma once #include "abstractvehicle.h" #include "parrotprotocol.h" #include class ParrotConnection; class ParrotVehicle : public Kirogi::AbstractVehicle { Q_OBJECT public: enum Type { Bebop2 = 0, Anafi }; Q_ENUM(Type) explicit ParrotVehicle(Type type, const QString &hostName, int port, const QString &productSerial, QObject *parent = nullptr); ~ParrotVehicle() override; QString name() const override; QString iconName() const override; Kirogi::AbstractVehicle::VehicleType vehicleType() const override; QList supportedActions() const override; bool piloting() const override; Q_INVOKABLE void setPiloting(bool piloting) override; Q_INVOKABLE void requestAction(Kirogi::AbstractVehicle::VehicleAction action) override; Q_INVOKABLE void pilot(qint8 roll, qint8 pitch, qint8 yaw, qint8 gaz) override; Q_INVOKABLE void requestMoveTo(QGeoCoordinate destination) override; Kirogi::AbstractVehicle::PerformanceMode performanceMode() const override; void requestPerformanceMode(Kirogi::AbstractVehicle::PerformanceMode mode) override; float maxRollSpeed() const override; void requestMaxRollSpeed(float speed) override; float maxRollSpeedMin() const override; float maxRollSpeedMax() const override; float maxPitchSpeed() const override; void requestMaxPitchSpeed(float speed) override; float maxPitchSpeedMin() const override; float maxPitchSpeedMax() const override; float maxYawSpeed() const override; void requestMaxYawSpeed(float speed) override; float maxYawSpeedMin() const override; float maxYawSpeedMax() const override; float maxGazSpeed() const override; void requestMaxGazSpeed(float speed) override; float maxGazSpeedMin() const override; float maxGazSpeedMax() const override; float maxTilt() const override; void requestMaxTilt(float tilt) override; float maxTiltMin() const override; float maxTiltMax() const override; bool bankedTurns() const override; void requestEnableBankedTurns(bool bankedTurns) override; bool geofence() const override; void requestEnableGeofence(bool enable) override; float maxAltitude() const override; void requestMaxAltitude(float altitude) override; float maxAltitudeMin() const override; float maxAltitudeMax() const override; float maxDistance() const override; void requestMaxDistance(float distance) override; float maxDistanceMin() const override; float maxDistanceMax() const override; float roll() const override; float pitch() const override; float yaw() const override; int signalStrength() const override; int batteryLevel() const override; bool gpsSupported() const override; bool gpsFix() const override; QGeoCoordinate gpsPosition() const override; float altitude() const override; void setControllerGpsPosition(const QGeoCoordinate &position) override; void requestReturnHome() override; float speed() const override; quint16 numberOfFlights() const override; quint16 lastFlightDuration() const override; QString videoSource() const override; bool videoStreamEnabled() const override; Q_INVOKABLE void requestEnableVideoStream(bool enable) override; bool videoStabilization() const override; void requestEnableVideoStabilization(bool enable) override; bool canTakePicture() const override; bool isRecordingVideo() const override; public Q_SLOTS: void connectToVehicle(); private Q_SLOTS: void processIncomingCommand(const ParrotCommand &command); private: void initVehicle(); void sendCommand(Parrot::Command command, const QVariantList &arguments = QVariantList(), bool retryForever = false); Type m_type; QString m_hostName; QString m_productSerial; int m_initialized; bool m_piloting; float m_maxRollPitchSpeed; float m_maxRollPitchSpeedMin; float m_maxRollPitchSpeedMax; float m_maxYawSpeed; float m_maxYawSpeedMin; float m_maxYawSpeedMax; float m_maxGazSpeed; float m_maxGazSpeedMin; float m_maxGazSpeedMax; float m_maxTilt; float m_maxTiltMin; float m_maxTiltMax; bool m_bankedTurns; bool m_geofence; float m_maxAltitude; float m_maxAltitudeMin; float m_maxAltitudeMax; float m_maxDistance; float m_maxDistanceMin; float m_maxDistanceMax; float m_roll; float m_pitch; float m_yaw; float m_defaultCameraOrientationTilt; float m_defaultCameraOrientationPan; qint16 m_signalStrength; int m_batteryLevel; bool m_gpsFix; QGeoCoordinate m_gpsPosition; float m_altitude; float m_speed; bool m_videoStreamEnabled; qint32 m_videoStreamMode; qint32 m_videoStabilizationMode; bool m_canTakePicture; bool m_isRecordingVideo; quint16 m_numberOfFlights; quint16 m_lastFlightDuration; QThread m_connectionThread; ParrotConnection *m_connection; }; - -#endif