ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ControlEngine / iPhone / Classes / mobile_main.c
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ControlEngine/iPhone/Classes/mobile_main.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/ControlEngine/iPhone/Classes/mobile_main.c
new file mode 100644 (file)
index 0000000..25b6bc3
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ *  mobile_main.c
+ *  Test
+ *
+ *  Created by Karl Leplat on 19/02/10.
+ *  Copyright 2010 Parrot SA. All rights reserved.
+ *
+ */
+#include "mobile_main.h"
+#include "wifi.h"
+
+#define MAXADDRS       16
+//#define DEBUG_THREAD 1
+
+static bool_t bContinue = TRUE;
+char drone_address[MAXADDRS];
+
+DEFINE_THREAD_ROUTINE(mobile_main, data)
+{
+       C_RESULT res = C_FAIL;
+       vp_com_wifi_config_t *config = NULL;
+       
+       mobile_main_param_t *param = (mobile_main_param_t *)data;
+
+       ardroneEngineCallback callback = param->callback;
+       vp_os_memset(drone_address, 0x0, sizeof(drone_address));
+       
+       while(((config = (vp_com_wifi_config_t *)wifi_config()) != NULL) && (strcmp(config->itfName, WIFI_ITFNAME) != 0))
+       {
+               PRINT("Wait WIFI connection !\n");
+               vp_os_delay(250);
+       }
+       
+       // Get drone_address
+       vp_os_memcpy(drone_address, config->server, strlen(config->server));
+       PRINT("Drone address %s\n", drone_address);
+       
+       // Get iphone_mac_address
+       get_iphone_mac_address(config->itfName);
+       PRINT("Iphone MAC Address %s\n", iphone_mac_address);
+       
+       res = ardrone_tool_setup_com( NULL );
+       
+       if( FAILED(res) )
+       {
+               PRINT("Wifi initialization failed. It means either:\n");
+               PRINT("\t* you're not root (it's mandatory because you can set up wifi connection only as root)\n");
+               PRINT("\t* wifi device is not present (on your pc or on your card)\n");
+               PRINT("\t* you set the wrong name for wifi interface (for example rausb0 instead of wlan0) \n");
+               PRINT("\t* ap is not up (reboot card or remove wifi usb dongle)\n");
+               PRINT("\t* wifi device has no antenna\n");
+       }
+       else
+       {
+               START_THREAD(video_stage, NULL);
+               
+               res = ardrone_tool_init(drone_address, strlen(drone_address), NULL, param->appName, param->usrName);
+               
+               callback(ARDRONE_ENGINE_INIT_OK);
+               
+               ardrone_tool_set_refresh_time(1000 / kAPS);
+
+               while( SUCCEED(res) && bContinue == TRUE )
+               {
+                       ardrone_tool_update();
+               }
+               
+               JOIN_THREAD(video_stage);
+
+               res = ardrone_tool_shutdown();
+       }
+       
+       vp_os_free (data);
+       
+       return (THREAD_RET)res;
+}
+
+void ardroneEnginePause( void )
+{
+#ifdef DEBUG_THREAD
+       PRINT( "%s\n", __FUNCTION__ );
+#endif
+       video_stage_suspend_thread();
+       ardrone_tool_pause();
+}
+
+void ardroneEngineResume( void )
+{
+#ifdef DEBUG_THREAD
+       PRINT( "%s\n", __FUNCTION__ );
+#endif
+       video_stage_resume_thread();
+       ardrone_tool_resume();
+}
+
+void ardroneEngineStart ( ardroneEngineCallback callback, const char *appName, const char *usrName )
+{
+#ifdef DEBUG_THREAD
+       PRINT( "%s\n", __FUNCTION__ );
+#endif 
+       video_stage_init();
+       mobile_main_param_t *param = vp_os_malloc (sizeof (mobile_main_param_t));
+       if (NULL != param)
+       {
+               param->callback = callback;
+               strcpy(param->appName, appName);
+               strcpy(param->usrName, usrName);
+               START_THREAD( mobile_main, param);
+       }
+}
+
+void ardroneEngineStop (void)
+{
+       PRINT( "%s\n", __FUNCTION__ );
+       ardroneEnginePause();
+       bContinue = FALSE;
+}
+
+C_RESULT custom_update_user_input(input_state_t* input_state, uint32_t user_input)
+{
+#ifdef DEBUG_THREAD
+       printf("%s\n", __FUNCTION__);
+#endif 
+       return C_OK;    
+       
+}
+
+C_RESULT custom_reset_user_input(input_state_t* input_state, uint32_t user_input)
+{
+#ifdef DEBUG_THREAD
+       printf("%s\n", __FUNCTION__);
+#endif 
+       return C_OK;
+}
+
+C_RESULT ardrone_tool_display_custom() 
+{
+#ifdef DEBUG_THREAD
+       printf("%s\n", __FUNCTION__);
+#endif 
+       return C_OK;
+}
+BEGIN_THREAD_TABLE
+THREAD_TABLE_ENTRY(mobile_main, 20)
+THREAD_TABLE_ENTRY(ardrone_control, 20)
+THREAD_TABLE_ENTRY(navdata_update, 20)
+THREAD_TABLE_ENTRY(video_stage, 20)
+END_THREAD_TABLE