include fix
[mardrone] / mardrone / dronelib / dronecontrol.h
index 1efc695..a5a2e27 100644 (file)
@@ -9,6 +9,7 @@
 #include <QThread>
 #include <QTimer>
 #include <QSettings>
+#include <QFile>
 #ifdef HAVE_SDL
 #include <SDL/SDL.h>
 #endif
@@ -42,42 +43,19 @@ class DroneControl : public QObject
     Q_PROPERTY(float droneSpeed READ droneSpeed NOTIFY navDataChanged)
     Q_PROPERTY(float droneAltitude READ droneAltitude NOTIFY navDataChanged)
     Q_PROPERTY(bool  emergency READ emergency WRITE setEmergency)
+    Q_PROPERTY(bool  connected READ connected WRITE setConnected NOTIFY connectedChanged)
     Q_PROPERTY(QString decodedStatus READ decodedStatus NOTIFY statusChanged)
+    Q_PROPERTY(QString logFileName READ logFileName WRITE setLogFileName)
+    Q_PROPERTY(QString errorString READ errorString WRITE setErrorString NOTIFY errorStringChanged)
+    Q_PROPERTY(bool  recordLog READ recordLog WRITE setRecordLog)
+    Q_PROPERTY(unsigned int   logSeq   READ logSeq WRITE setLogSeq)
 
     Q_PROPERTY(int pwm_motor1 READ pwm_motor1 NOTIFY navDataChanged)
     Q_PROPERTY(int pwm_motor2 READ pwm_motor1 NOTIFY navDataChanged)
     Q_PROPERTY(int pwm_motor3 READ pwm_motor1 NOTIFY navDataChanged)
     Q_PROPERTY(int pwm_motor4 READ pwm_motor1 NOTIFY navDataChanged)
 
-#if 0
-    Q_PROPERTY(bool confHaveJoyStick READ confHaveJoyStick NOTIFY configChanged)
-    Q_PROPERTY(QString joyStickName READ joyStickName NOTIFY statusChanged)
-    Q_PROPERTY(int joyStickRawAxis1  READ joyStickRawAxis1 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickRawAxis2  READ joyStickRawAxis2 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickRawAxis3  READ joyStickRawAxis3 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickRawAxis4  READ joyStickRawAxis4 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickRawAxis5  READ joyStickRawAxis5 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickRawAxis6  READ joyStickRawAxis6 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMaxAxis1  READ joyStickMaxAxis1 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMaxAxis2  READ joyStickMaxAxis2 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMaxAxis3  READ joyStickMaxAxis3 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMaxAxis4  READ joyStickMaxAxis4 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMaxAxis5  READ joyStickMaxAxis5 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMaxAxis6  READ joyStickMaxAxis6 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMinAxis1  READ joyStickMinAxis1 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMinAxis2  READ joyStickMinAxis2 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMinAxis3  READ joyStickMinAxis3 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMinAxis4  READ joyStickMinAxis4 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMinAxis5  READ joyStickMinAxis5 NOTIFY joyStickChanged)
-    Q_PROPERTY(int joyStickMinAxis6  READ joyStickMinAxis6 NOTIFY joyStickChanged)
-    Q_PROPERTY(float joyStickAxis1   READ joyStickAxis1    NOTIFY joyStickChanged)
-    Q_PROPERTY(float joyStickAxis2   READ joyStickAxis2    NOTIFY joyStickChanged)
-    Q_PROPERTY(float joyStickAxis3   READ joyStickAxis3    NOTIFY joyStickChanged)
-    Q_PROPERTY(float joyStickAxis4   READ joyStickAxis4    NOTIFY joyStickChanged)
-    Q_PROPERTY(float joyStickAxis5   READ joyStickAxis5    NOTIFY joyStickChanged)
-    Q_PROPERTY(float joyStickAxis6   READ joyStickAxis6    NOTIFY joyStickChanged)
-    Q_PROPERTY(bool  joyStickCalibrate READ joyStickCalibrate  WRITE  setJoyStickCalibrate)
-#endif
+
    // Config variables from QSettings
     Q_PROPERTY(QString  confDroneIp   READ confDroneIp      WRITE setConfDroneIp      NOTIFY configChanged)
     Q_PROPERTY(QString  confActiveUI  READ confActiveUI     WRITE setConfActiveUI     NOTIFY configChanged)
@@ -88,6 +66,7 @@ class DroneControl : public QObject
     Q_PROPERTY(bool  confUseJoyStick  READ confUseJoyStick  WRITE setConfUseJoyStick  NOTIFY configChanged)
     Q_PROPERTY(bool  confShowJSIndicators  READ confShowJSIndicators WRITE setConfShowJSIndicators   NOTIFY configChanged)
     Q_PROPERTY(bool  confFullScreen   READ confFullScreen   WRITE setConfFullScreen   NOTIFY configChanged)
+    Q_PROPERTY(int   confSimuMode     READ confSimuMode     WRITE setConfSimuMode     NOTIFY configChanged)
     Q_PROPERTY(float confForwardGain  READ confForwardGain  WRITE setConfForwardGain  NOTIFY configChanged)
     Q_PROPERTY(float confBackwardGain READ confBackwardGain WRITE setConfBackwardGain NOTIFY configChanged)
     Q_PROPERTY(float confLeftGain     READ confLeftGain     WRITE setConfLeftGain     NOTIFY configChanged)
@@ -98,48 +77,24 @@ public:
     explicit DroneControl();
 
 
-    float pitch();    void setPitch(float val_);
-    float roll() ;    void setRoll(float val_);
-    float yaw() ;     void setYaw(float val_);
-    float altitude(); void setAltitude(float val_) ;
-    float vVelocity();void setVVelocity(float val_) ;
-    int   enabled() ; void setEnabled(int val_) ;
-    bool  emergency();void setEmergency(bool val_) ;
-    bool  fly() ;     void setFly(bool val_) ;
+    float pitch();     void setPitch(float val_);
+    float roll() ;     void setRoll(float val_);
+    float yaw() ;      void setYaw(float val_);
+    float altitude();  void setAltitude(float val_) ;
+    float vVelocity(); void setVVelocity(float val_) ;
+    int   enabled() ;  void setEnabled(int val_) ;
+    bool  emergency(); void setEmergency(bool val_) ;
+    bool  fly() ;      void setFly(bool val_) ;
     bool  ctrlActive();void setCtrlActive(bool val_) ;
-
+    bool  recordLog(); void setRecordLog(bool val_) ;
+    unsigned int   logSeq() ;  void setLogSeq(int val_) ;
+    QString logFileName();     void setLogFileName(QString val_);
+    QString errorString();     void setErrorString(QString val_);
 // Read only telemetry and drone status
     QString decodedStatus();
-#ifdef JOYSTICK
-// JoyStick configuration
-    QString joyStickName() { return m_joyStickName; };
-    int joyStickRawAxis1() { return m_joyStickRawAxis1; };
-    int joyStickRawAxis2() { return m_joyStickRawAxis2; };
-    int joyStickRawAxis3() { return m_joyStickRawAxis3; };
-    int joyStickRawAxis4() { return m_joyStickRawAxis4; };
-    int joyStickRawAxis5() { return m_joyStickRawAxis5; };
-    int joyStickRawAxis6() { return m_joyStickRawAxis6; };
-    int joyStickMaxAxis1() { return m_joyStickMaxAxis1; };
-    int joyStickMaxAxis2() { return m_joyStickMaxAxis2; };
-    int joyStickMaxAxis3() { return m_joyStickMaxAxis3; };
-    int joyStickMaxAxis4() { return m_joyStickMaxAxis4; };
-    int joyStickMaxAxis5() { return m_joyStickMaxAxis5; };
-    int joyStickMaxAxis6() { return m_joyStickMaxAxis6; };
-    int joyStickMinAxis1() { return m_joyStickMinAxis1; };
-    int joyStickMinAxis2() { return m_joyStickMinAxis2; };
-    int joyStickMinAxis3() { return m_joyStickMinAxis3; };
-    int joyStickMinAxis4() { return m_joyStickMinAxis4; };
-    int joyStickMinAxis5() { return m_joyStickMinAxis5; };
-    int joyStickMinAxis6() { return m_joyStickMinAxis6; };
-    float joyStickAxis1()  { return m_joyStickAxis1; };
-    float joyStickAxis2()  { return m_joyStickAxis2; };
-    float joyStickAxis3()  { return m_joyStickAxis3; };
-    float joyStickAxis4()  { return m_joyStickAxis4; };
-    float joyStickAxis5()  { return m_joyStickAxis5; };
-    float joyStickAxis6()  { return m_joyStickAxis6; };
-    bool joyStickCalibrate()  { return m_joyCal; };
-    void setJoyStickCalibrate(bool val) { m_joyCal=val;};
-#endif
+
+    bool connected()  { return m_connected; };
+    void setConnected(bool val_);
 
     int pwm_motor1();
     int pwm_motor2();
@@ -155,6 +110,7 @@ public:
 //Config variables
  QString confDroneIp();      void setConfDroneIp(QString ip);
  QString confActiveUI();     void setConfActiveUI(QString ui);
+
  bool    confShowDebug();    void setConfShowDebug(bool val);
  bool    confShowHorizon();  void setConfShowHorizon(bool val);
  bool    confShowJSIndicators();  void setConfShowJSIndicators(bool val);
@@ -162,6 +118,7 @@ public:
  bool    confUseAccel();     void setConfUseAccel(bool val);
  bool    confFullScreen();   void setConfFullScreen(bool val);
  bool    confUseJoyStick();  void setConfUseJoyStick(bool val);
+ int     confSimuMode();     void setConfSimuMode(int val);
  float   confForwardGain();  void setConfForwardGain(float val);
  float   confBackwardGain(); void setConfBackwardGain(float val);
  float   confLeftGain();     void setConfLeftGain(float val);
@@ -173,6 +130,8 @@ signals:
     void configChanged();
     void pitchRollChanged();
     void joyStickChanged();
+    void connectedChanged();
+    void errorStringChanged();
 public slots:
     void navDataUpdated();
     void statusUpdated();
@@ -198,40 +157,8 @@ private:
     bool  m_ctrlActive;
     bool  m_useAccel;
     bool  m_useJoyStick;
-
-#ifdef JOYSTICK
-// Joystick
-     bool  m_haveJoyStick;
-    QString m_joyStickName;
-    bool m_joyCal;
-    int m_joyStickRawAxis1;
-    int m_joyStickRawAxis2;
-    int m_joyStickRawAxis3;
-    int m_joyStickRawAxis4;
-    int m_joyStickRawAxis5;
-    int m_joyStickRawAxis6;
-    float m_joyStickAxis1;
-    float m_joyStickAxis2;
-    float m_joyStickAxis3;
-    float m_joyStickAxis4;
-    float m_joyStickAxis5;
-    float m_joyStickAxis6;
-    int m_joyStickMinAxis1;
-    int m_joyStickMinAxis2;
-    int m_joyStickMinAxis3;
-    int m_joyStickMinAxis4;
-    int m_joyStickMinAxis5;
-    int m_joyStickMinAxis6;
-    int m_joyStickMaxAxis1;
-    int m_joyStickMaxAxis2;
-    int m_joyStickMaxAxis3;
-    int m_joyStickMaxAxis4;
-    int m_joyStickMaxAxis5;
-    int m_joyStickMaxAxis6;
-    int m_joyStickMapAxis[6];
-#endif
-
-
+    bool  m_connected;
+    QString m_errorString;
 
     float m_ctrlTrsh;  // accel controll treshold
 
@@ -241,10 +168,8 @@ private:
 
     DroneThread *droneThread;
     QSettings *droneSettings;
-#ifdef HAVE_SDL
-    QTimer joyStickTimer;
-    SDL_Joystick *joyStick;
-#endif
+
+
 #ifdef QT_SENSORS
     QRotationSensor *rSensor; // used for controllind drone with device rotation
 #endif
@@ -262,10 +187,14 @@ public:
     void sendNav(QString cmd);
     void sendCmd(QString cmd);
     NavData *navData() { return &nd; };
+    QString getLogFileName();
+    unsigned int getLogSeq();
+    bool getRecordLog();
 
     enum droneState {
         notInitialized,
         initialized,
+        bootstrap,
         ready,
         flying
 
@@ -274,12 +203,20 @@ public slots:
     void navDataReady();
     void timer();
     void setFly(bool fly);
+    void setRecordLog(bool);
+    void setLogFileName(QString);
+    void setLogSeq(unsigned int);
     void setEmergency(bool emg);
     void setDroneControl(float pitch,float roll,float yaw,float vv);
     void setDroneGain(float fgain,float bgain,float lgain,float rgain);
 
 private:
 
+    bool recordLog;
+    unsigned int logSeq;
+    QString logFileName;
+    QFile *logFile;
+
      QHostAddress droneHost;  // Ip address of the drone
      QTimer *stateTimer;
      volatile bool stopped;
@@ -287,6 +224,8 @@ private:
      QUdpSocket *navSock;  // Navigation data receive socket port 5554
      QUdpSocket *cmdSock; // Ay command socket port 5556
      int state;
+     int retry;         // retry counter
+     int noreply;       // No reply counter incremented every sedcmd, cleared when  got reply
      int seq;           // Drone command seq number
      bool m_fly;
      bool m_emergency;