ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / Linux / Navigation / Sources / ihm / ihm.h
1
2 #ifndef IHM_H
3 #define IHM_H
4
5 #include <gtk/gtk.h>
6 #include <gdk/gdkkeysyms.h>
7
8 #include <ardrone_api.h>
9 #include <VP_Api/vp_api_thread_helper.h>
10 #include <VP_Os/vp_os_signal.h>
11
12 #include <ardrone_tool/Control/ardrone_control.h>
13 #include <ardrone_tool/Control/ardrone_control_configuration.h>
14
15 // shared data allocation management
16 #ifdef KIHM_ALLOC_SHARED_DATA   // defined only in ihm.c
17 #define KIHM_EXTERN
18 #else
19 #define KIHM_EXTERN extern
20 #endif
21
22
23 /* general declarations */
24 /* -------------------- */
25 extern int32_t ihm_val_idx;
26 KIHM_EXTERN int ihm_freeze_curves;
27 KIHM_EXTERN double ihm_psi;
28 KIHM_EXTERN double ihm_dir;
29
30 /* constants */
31 #define KIHM_PI              3.14159
32 #define KIHM_ZERO_F          0.0
33 #define KIHM_MIL_F           1000.0
34
35 /* ctrl states  */  
36 #define MAX_STR_CTRL_STATE 256
37
38 // graphic contexts
39 enum {
40   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
41 };
42 KIHM_EXTERN GdkGC *ihm_GC[KIHM_NB_GC];
43
44
45
46 /* declarations for attitude display */
47 /* --------------------------------- */
48 enum {
49   KIHM_DA_ATT_PITCH,
50   KIHM_DA_ATT_ROLL,
51   KIHM_DA_ATT_YAW,
52   KIHM_DA_ATT_DIR,
53   KIHM_NB_DA_ATT
54 };
55 KIHM_EXTERN GtkWidget *ihm_DA_att[KIHM_NB_DA_ATT];
56 KIHM_EXTERN PangoLayout  *ihm_PL_DApsi, *ihm_PL_DAtheta, *ihm_PL_DAphi, *ihm_PL_DAdir;
57
58 enum {
59   ARDRONE_GLOBAL_STATE,
60   ARDRONE_CONTROL_STATE,
61   ARDRONE_VISION_STATE,
62   NB_ARDRONE_STATES
63 };
64
65 /* declarations for altitude display */
66 /* --------------------------------- */
67 enum {
68   KIHM_AKP,
69   KIHM_AKI,
70   KIHM_AKD,
71   KIHM_ATD,
72   NB_GAINS_ALT
73 };
74
75 /* declarations for fix point display */
76 /* ---------------------------------- */
77 enum {
78   KIHM_FPKP,
79   KIHM_FPKI,
80   NB_GAINS_FP
81 };
82
83 /* declarations for cocarde control display */
84 /* ---------------------------------------- */
85 enum {
86   KIHM_ROUNDELKP,
87   KIHM_ROUNDELKI,
88   NB_GAINS_ROUNDEL
89 };
90
91
92 /* declarations for control gains */
93 /* ------------------------------ */
94 #define SEND_PID_GAIN
95 #define NB_GAINS_W   3
96 #define NB_GAINS_EA  2
97 #define NB_GAINS     (NB_GAINS_W + NB_GAINS_EA)
98 #define NB_ALL_GAINS (NB_GAINS + NB_GAINS_ALT + NB_GAINS_FP + NB_GAINS_ROUNDEL)
99
100 /* Stephane : number of samples to display in detection history */
101 #define NB_DETECTION_SAMPLES 30
102
103
104 /* declarations for window size */
105 /* ---------------------------- */
106 #define KIHM_DAREA_ANGLE_X_SIZE 230
107 #define KIHM_DAREA_ANGLE_Y_SIZE 100
108 #define KIHM_DAREA_CURVE_X_SIZE 700
109 #define KIHM_DAREA_CURVE_Y_SIZE 170
110 #define KIHM_DAREA_CURVE_Y_OFFSET    8 // = half the height of a graduation label
111
112 #define KIHM_N_PT2PLOT   KIHM_DAREA_CURVE_X_SIZE
113
114 #define KIHM_BORDER      10
115 /* #define KIHM_WX          3*KIHM_DAREA_ANGLE_X_SIZE+2*KIHM_BORDER+50 */
116 /* #define KIHM_WY          KIHM_DAREA_ANGLE_Y_SIZE+2*KIHM_DAREA_CURVE_Y_SIZE+2*KIHM_BORDER */
117
118
119 #define GYRO_WIN_TITLE      "Angular rates (gyrometers measures) in deg/s"
120 #define ACC_WIN_TITLE       "Accelerations (accelerometers measures) in g"
121 #define THETA_WIN_TITLE     "Theta (pitch) in deg"
122 #define PHI_WIN_TITLE       "Phi (roll) in deg"
123 #define IMOT_WIN_TITLE      "Imot in ADC LSB"
124 #define VBAT_WIN_TITLE      "Vbat in V"
125 #define PWM_WIN_TITLE       "PWM (0 < ratio < 255)"
126 #define CURRENT_WIN_TITLE   "Motors currents in mA"
127 #define VX_WIN_TITLE        "VX : speed in mm/s"
128 #define VY_WIN_TITLE        "VY : speed in mm/s"
129 #define VZ_WIN_TITLE        "VZ : speed in mm/s"
130 #define ALTITUDE_WIN_TITLE  "Altitude : Reference and measure in mm"
131
132 #define NOT_DEF_VAL 0xdeadbeaf
133 #define HOVER_VAL   0xdecafef
134
135
136 extern GtkWidget *entry_PID[NB_ALL_GAINS], *entry_MiscVar[NB_MISC_VARS];
137
138
139 /* declarations for curves */
140 /* ----------------------- */
141 enum {
142   KIHM_CURVE_ACC = 0,
143   KIHM_CURVE_GYRO,
144   KIHM_CURVE_THETA,
145   KIHM_CURVE_PHI,
146   KIHM_CURVE_VBAT,
147   KIHM_CURVE_PWM,
148   KIHM_CURVE_ALTITUDE,
149   KIHM_CURVE_VX,
150   KIHM_CURVE_VY,
151   KIHM_CURVE_VZ,
152   KIHM_CURVE_CURRENT,
153   KIHM_NB_CURVES
154 };
155
156 /* dock status of a curve */
157 /* -----------------------*/
158 enum {
159   CURVE_DOCKED   ,
160   CURVE_UNDOCKED ,
161   WINDOW_VISIBLE ,
162   WINDOW_HIDE,
163   WINDOW_OPENED,
164   WINDOW_CLOSED
165 };
166
167 typedef struct _SIHM_ScaleAttributes
168 {
169   double phys_range, phys_orig, phys_min, phys_max, phys_step;
170   int y_orig, y_min, y_max;
171   int nb_grad;
172   char grad_format[10];
173   GtkWidget *vBox_Grad;
174 }
175 SIHM_ScaleAttributes;
176
177 typedef struct _SIHM_CurveAttributes
178 {
179   char title[128], ctrl_lbl[32];
180   int show;
181   char **legend;
182   GdkGC **GC;
183   int nb_val;
184   double **tval;
185   int nb_range, range;
186   SIHM_ScaleAttributes *tSA;
187   char val_format[10];
188   GtkWidget *top, *DA, **lblVal, **label_Legend;
189
190   GtkWidget *PrivateWin, *PrivateVBox;
191   int win_view;
192 }
193 SIHM_CurveAttributes;
194
195 typedef struct _ihm_time {
196   double time;
197   double time_init;
198   double time_last;
199   int sec;
200   int min;
201   double deltaT;
202 } ihm_time_t;
203
204 KIHM_EXTERN SIHM_CurveAttributes ihm_CA[KIHM_NB_CURVES];
205
206 /* declarations for references */
207 /* --------------------------- */
208 extern int tab_r[4];                    // Pitch, roll, yaw, gaz references
209 KIHM_EXTERN GtkWidget *ihm_label_RCref;
210
211 /*Stephane*/
212 KIHM_EXTERN GtkWidget *nbDetectedTags_label;
213 KIHM_EXTERN GtkWidget *activeDetection_label;
214
215 extern char label_mykonos_state_value[32];
216 extern char label_ctrl_state_value[MAX_STR_CTRL_STATE];
217 extern char label_detection_state_value[32];
218
219 extern int32_t ihm_start;
220
221 void ihm_set_start_button_state( int32_t start );
222
223 void  ihm_initCurves(GtkWidget *widget, int curve);
224 void ihm_destroyCurves(void);
225
226 void  ihm_update_time( void );
227 void  ihm_init_time( void );
228
229 PROTO_THREAD_ROUTINE(ihm , data);
230
231 extern vp_os_mutex_t  ihm_lock;
232 extern int ihm_is_initialized;
233
234
235 #endif  // IHM_H