ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ControlEngine / iPhone / Classes / mobile_main.c
1 /*
2  *  mobile_main.c
3  *  Test
4  *
5  *  Created by Karl Leplat on 19/02/10.
6  *  Copyright 2010 Parrot SA. All rights reserved.
7  *
8  */
9 #include "mobile_main.h"
10 #include "wifi.h"
11
12 #define MAXADDRS        16
13 //#define DEBUG_THREAD  1
14
15 static bool_t bContinue = TRUE;
16 char drone_address[MAXADDRS];
17
18 DEFINE_THREAD_ROUTINE(mobile_main, data)
19 {
20         C_RESULT res = C_FAIL;
21         vp_com_wifi_config_t *config = NULL;
22         
23         mobile_main_param_t *param = (mobile_main_param_t *)data;
24
25         ardroneEngineCallback callback = param->callback;
26         vp_os_memset(drone_address, 0x0, sizeof(drone_address));
27         
28         while(((config = (vp_com_wifi_config_t *)wifi_config()) != NULL) && (strcmp(config->itfName, WIFI_ITFNAME) != 0))
29         {
30                 PRINT("Wait WIFI connection !\n");
31                 vp_os_delay(250);
32         }
33         
34         // Get drone_address
35         vp_os_memcpy(drone_address, config->server, strlen(config->server));
36         PRINT("Drone address %s\n", drone_address);
37         
38         // Get iphone_mac_address
39         get_iphone_mac_address(config->itfName);
40         PRINT("Iphone MAC Address %s\n", iphone_mac_address);
41         
42         res = ardrone_tool_setup_com( NULL );
43         
44         if( FAILED(res) )
45         {
46                 PRINT("Wifi initialization failed. It means either:\n");
47                 PRINT("\t* you're not root (it's mandatory because you can set up wifi connection only as root)\n");
48                 PRINT("\t* wifi device is not present (on your pc or on your card)\n");
49                 PRINT("\t* you set the wrong name for wifi interface (for example rausb0 instead of wlan0) \n");
50                 PRINT("\t* ap is not up (reboot card or remove wifi usb dongle)\n");
51                 PRINT("\t* wifi device has no antenna\n");
52         }
53         else
54         {
55                 START_THREAD(video_stage, NULL);
56                 
57                 res = ardrone_tool_init(drone_address, strlen(drone_address), NULL, param->appName, param->usrName);
58                 
59                 callback(ARDRONE_ENGINE_INIT_OK);
60                 
61                 ardrone_tool_set_refresh_time(1000 / kAPS);
62
63                 while( SUCCEED(res) && bContinue == TRUE )
64                 {
65                         ardrone_tool_update();
66                 }
67                 
68                 JOIN_THREAD(video_stage);
69
70                 res = ardrone_tool_shutdown();
71         }
72         
73         vp_os_free (data);
74         
75         return (THREAD_RET)res;
76 }
77
78 void ardroneEnginePause( void )
79 {
80 #ifdef DEBUG_THREAD
81         PRINT( "%s\n", __FUNCTION__ );
82 #endif
83         video_stage_suspend_thread();
84         ardrone_tool_pause();
85 }
86
87 void ardroneEngineResume( void )
88 {
89 #ifdef DEBUG_THREAD
90         PRINT( "%s\n", __FUNCTION__ );
91 #endif
92         video_stage_resume_thread();
93         ardrone_tool_resume();
94 }
95
96 void ardroneEngineStart ( ardroneEngineCallback callback, const char *appName, const char *usrName )
97 {
98 #ifdef DEBUG_THREAD
99         PRINT( "%s\n", __FUNCTION__ );
100 #endif  
101         video_stage_init();
102         mobile_main_param_t *param = vp_os_malloc (sizeof (mobile_main_param_t));
103         if (NULL != param)
104         {
105                 param->callback = callback;
106                 strcpy(param->appName, appName);
107                 strcpy(param->usrName, usrName);
108                 START_THREAD( mobile_main, param);
109         }
110 }
111
112 void ardroneEngineStop (void)
113 {
114         PRINT( "%s\n", __FUNCTION__ );
115         ardroneEnginePause();
116         bContinue = FALSE;
117 }
118
119 C_RESULT custom_update_user_input(input_state_t* input_state, uint32_t user_input)
120 {
121 #ifdef DEBUG_THREAD
122         printf("%s\n", __FUNCTION__);
123 #endif  
124         return C_OK;    
125         
126 }
127
128 C_RESULT custom_reset_user_input(input_state_t* input_state, uint32_t user_input)
129 {
130 #ifdef DEBUG_THREAD
131         printf("%s\n", __FUNCTION__);
132 #endif  
133         return C_OK;
134 }
135
136 C_RESULT ardrone_tool_display_custom() 
137 {
138 #ifdef DEBUG_THREAD
139         printf("%s\n", __FUNCTION__);
140 #endif  
141         return C_OK;
142 }
143 BEGIN_THREAD_TABLE
144 THREAD_TABLE_ENTRY(mobile_main, 20)
145 THREAD_TABLE_ENTRY(ardrone_control, 20)
146 THREAD_TABLE_ENTRY(navdata_update, 20)
147 THREAD_TABLE_ENTRY(video_stage, 20)
148 END_THREAD_TABLE