ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / Linux / Navigation / Sources / ihm / ihm.h
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/Linux/Navigation/Sources/ihm/ihm.h b/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/Linux/Navigation/Sources/ihm/ihm.h
new file mode 100644 (file)
index 0000000..42e7583
--- /dev/null
@@ -0,0 +1,235 @@
+
+#ifndef IHM_H
+#define IHM_H
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include <ardrone_api.h>
+#include <VP_Api/vp_api_thread_helper.h>
+#include <VP_Os/vp_os_signal.h>
+
+#include <ardrone_tool/Control/ardrone_control.h>
+#include <ardrone_tool/Control/ardrone_control_configuration.h>
+
+// shared data allocation management
+#ifdef KIHM_ALLOC_SHARED_DATA   // defined only in ihm.c
+#define KIHM_EXTERN
+#else
+#define KIHM_EXTERN extern
+#endif
+
+
+/* general declarations */
+/* -------------------- */
+extern int32_t ihm_val_idx;
+KIHM_EXTERN int ihm_freeze_curves;
+KIHM_EXTERN double ihm_psi;
+KIHM_EXTERN double ihm_dir;
+
+/* constants */
+#define KIHM_PI              3.14159
+#define KIHM_ZERO_F          0.0
+#define KIHM_MIL_F           1000.0
+
+/* ctrl states  */  
+#define MAX_STR_CTRL_STATE 256
+
+// graphic contexts
+enum {
+  KIHM_GC_RED, KIHM_GC_GREEN, KIHM_GC_BLUE, KIHM_GC_LIGHTRED, KIHM_GC_LIGHTBLUE, KIHM_GC_GREY, KIHM_GC_LIGHTGREY, KIHM_GC_DASHLINE, KIHM_GC_BLACK,  KIHM_GC_WHITE, KIHM_NB_GC
+};
+KIHM_EXTERN GdkGC *ihm_GC[KIHM_NB_GC];
+
+
+
+/* declarations for attitude display */
+/* --------------------------------- */
+enum {
+  KIHM_DA_ATT_PITCH,
+  KIHM_DA_ATT_ROLL,
+  KIHM_DA_ATT_YAW,
+  KIHM_DA_ATT_DIR,
+  KIHM_NB_DA_ATT
+};
+KIHM_EXTERN GtkWidget *ihm_DA_att[KIHM_NB_DA_ATT];
+KIHM_EXTERN PangoLayout  *ihm_PL_DApsi, *ihm_PL_DAtheta, *ihm_PL_DAphi, *ihm_PL_DAdir;
+
+enum {
+  ARDRONE_GLOBAL_STATE,
+  ARDRONE_CONTROL_STATE,
+  ARDRONE_VISION_STATE,
+  NB_ARDRONE_STATES
+};
+
+/* declarations for altitude display */
+/* --------------------------------- */
+enum {
+  KIHM_AKP,
+  KIHM_AKI,
+  KIHM_AKD,
+  KIHM_ATD,
+  NB_GAINS_ALT
+};
+
+/* declarations for fix point display */
+/* ---------------------------------- */
+enum {
+  KIHM_FPKP,
+  KIHM_FPKI,
+  NB_GAINS_FP
+};
+
+/* declarations for cocarde control display */
+/* ---------------------------------------- */
+enum {
+  KIHM_ROUNDELKP,
+  KIHM_ROUNDELKI,
+  NB_GAINS_ROUNDEL
+};
+
+
+/* declarations for control gains */
+/* ------------------------------ */
+#define SEND_PID_GAIN
+#define NB_GAINS_W   3
+#define NB_GAINS_EA  2
+#define NB_GAINS     (NB_GAINS_W + NB_GAINS_EA)
+#define NB_ALL_GAINS (NB_GAINS + NB_GAINS_ALT + NB_GAINS_FP + NB_GAINS_ROUNDEL)
+
+/* Stephane : number of samples to display in detection history */
+#define NB_DETECTION_SAMPLES 30
+
+
+/* declarations for window size */
+/* ---------------------------- */
+#define KIHM_DAREA_ANGLE_X_SIZE 230
+#define KIHM_DAREA_ANGLE_Y_SIZE 100
+#define KIHM_DAREA_CURVE_X_SIZE 700
+#define KIHM_DAREA_CURVE_Y_SIZE 170
+#define KIHM_DAREA_CURVE_Y_OFFSET    8 // = half the height of a graduation label
+
+#define KIHM_N_PT2PLOT   KIHM_DAREA_CURVE_X_SIZE
+
+#define KIHM_BORDER      10
+/* #define KIHM_WX          3*KIHM_DAREA_ANGLE_X_SIZE+2*KIHM_BORDER+50 */
+/* #define KIHM_WY          KIHM_DAREA_ANGLE_Y_SIZE+2*KIHM_DAREA_CURVE_Y_SIZE+2*KIHM_BORDER */
+
+
+#define GYRO_WIN_TITLE      "Angular rates (gyrometers measures) in deg/s"
+#define ACC_WIN_TITLE       "Accelerations (accelerometers measures) in g"
+#define THETA_WIN_TITLE     "Theta (pitch) in deg"
+#define PHI_WIN_TITLE       "Phi (roll) in deg"
+#define IMOT_WIN_TITLE      "Imot in ADC LSB"
+#define VBAT_WIN_TITLE      "Vbat in V"
+#define PWM_WIN_TITLE       "PWM (0 < ratio < 255)"
+#define CURRENT_WIN_TITLE   "Motors currents in mA"
+#define VX_WIN_TITLE        "VX : speed in mm/s"
+#define VY_WIN_TITLE        "VY : speed in mm/s"
+#define VZ_WIN_TITLE        "VZ : speed in mm/s"
+#define ALTITUDE_WIN_TITLE  "Altitude : Reference and measure in mm"
+
+#define NOT_DEF_VAL 0xdeadbeaf
+#define HOVER_VAL   0xdecafef
+
+
+extern GtkWidget *entry_PID[NB_ALL_GAINS], *entry_MiscVar[NB_MISC_VARS];
+
+
+/* declarations for curves */
+/* ----------------------- */
+enum {
+  KIHM_CURVE_ACC = 0,
+  KIHM_CURVE_GYRO,
+  KIHM_CURVE_THETA,
+  KIHM_CURVE_PHI,
+  KIHM_CURVE_VBAT,
+  KIHM_CURVE_PWM,
+  KIHM_CURVE_ALTITUDE,
+  KIHM_CURVE_VX,
+  KIHM_CURVE_VY,
+  KIHM_CURVE_VZ,
+  KIHM_CURVE_CURRENT,
+  KIHM_NB_CURVES
+};
+
+/* dock status of a curve */
+/* -----------------------*/
+enum {
+  CURVE_DOCKED   ,
+  CURVE_UNDOCKED ,
+  WINDOW_VISIBLE ,
+  WINDOW_HIDE,
+  WINDOW_OPENED,
+  WINDOW_CLOSED
+};
+
+typedef struct _SIHM_ScaleAttributes
+{
+  double phys_range, phys_orig, phys_min, phys_max, phys_step;
+  int y_orig, y_min, y_max;
+  int nb_grad;
+  char grad_format[10];
+  GtkWidget *vBox_Grad;
+}
+SIHM_ScaleAttributes;
+
+typedef struct _SIHM_CurveAttributes
+{
+  char title[128], ctrl_lbl[32];
+  int show;
+  char **legend;
+  GdkGC **GC;
+  int nb_val;
+  double **tval;
+  int nb_range, range;
+  SIHM_ScaleAttributes *tSA;
+  char val_format[10];
+  GtkWidget *top, *DA, **lblVal, **label_Legend;
+
+  GtkWidget *PrivateWin, *PrivateVBox;
+  int win_view;
+}
+SIHM_CurveAttributes;
+
+typedef struct _ihm_time {
+  double time;
+  double time_init;
+  double time_last;
+  int sec;
+  int min;
+  double deltaT;
+} ihm_time_t;
+
+KIHM_EXTERN SIHM_CurveAttributes ihm_CA[KIHM_NB_CURVES];
+
+/* declarations for references */
+/* --------------------------- */
+extern int tab_r[4];                   // Pitch, roll, yaw, gaz references
+KIHM_EXTERN GtkWidget *ihm_label_RCref;
+
+/*Stephane*/
+KIHM_EXTERN GtkWidget *nbDetectedTags_label;
+KIHM_EXTERN GtkWidget *activeDetection_label;
+
+extern char label_mykonos_state_value[32];
+extern char label_ctrl_state_value[MAX_STR_CTRL_STATE];
+extern char label_detection_state_value[32];
+
+extern int32_t ihm_start;
+
+void ihm_set_start_button_state( int32_t start );
+
+void  ihm_initCurves(GtkWidget *widget, int curve);
+void ihm_destroyCurves(void);
+
+void  ihm_update_time( void );
+void  ihm_init_time( void );
+
+PROTO_THREAD_ROUTINE(ihm , data);
+
+extern vp_os_mutex_t  ihm_lock;
+extern int ihm_is_initialized;
+
+
+#endif  // IHM_H