ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / Linux / Navigation / Sources / common / main_raw_capture.c
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/Linux/Navigation/Sources/common/main_raw_capture.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/Linux/Navigation/Sources/common/main_raw_capture.c
new file mode 100644 (file)
index 0000000..816bc1e
--- /dev/null
@@ -0,0 +1,248 @@
+/**
+ * @file mobile_main.c
+ * @author aurelien.morelle@parrot.fr
+ * @date 2006/05/01
+ */
+
+
+#include "rfcomm.h"
+#include "bnep.h"
+#include "common/mobile_config.h"
+
+#include <VP_Api/vp_api.h>
+#include <VP_Api/vp_api_error.h>
+#include <VP_Api/vp_api_thread_helper.h>
+#include <VP_Os/vp_os_print.h>
+#include <VP_Os/vp_os_types.h>
+#include <VP_Os/vp_os_malloc.h>
+#include <VP_Api/vp_api_io_com.h>
+
+#include "joystick.h"
+
+//#include <netdb.h>
+//#include <sys/socket.h>
+
+//#include <net/if.h>
+//#include <netinet/in.h>
+
+/* #include "Common.h" */
+
+
+// #include "pthread.h"
+/* #ifndef UART_LINK */
+/* #endif */
+
+
+// #include "mutex.h"
+// #include "thread.h"
+
+/* #include "commonControl.h" */
+
+/* #if defined(USE_AT_RESPONSES) && !defined(BITRATE_TEST) */
+/* #include "AT_Processing/AT_read.h" */
+/* #endif */
+
+/* #ifdef USE_IHM */
+/* #include "ihm.h" */
+/* #endif */
+
+/* #ifdef NAVDATA_CLIENT */
+/* #include "navdata_client.h" */
+/* #endif */
+
+#include "ref_send.h"
+#include "UI/ui.h"
+
+extern int connect_wifi();
+
+char shMemory[SH_MEMORY_SIZE];
+
+/************************************************************************
+ * Mutex related
+ ************************************************************************/
+
+/* extern vp_os_mutex_t PrintfLock; */
+/* vp_os_mutex_t SHMemoryLock; */
+/* extern vp_os_mutex_t SHMemoryReadLock; */
+/* extern vp_os_mutex_t SHMemoryWriteLock; */
+/* vp_os_mutex_t ResponseReceivedLock; */
+
+/* void init_all_mutex() */
+/* { */
+/*  vp_os_mutex_init(&PrintfLock); */
+/*  vp_os_mutex_init(&SHMemoryLock); */
+/* #ifdef BLUETOOTH_CARD */
+/*  vp_os_mutex_init(&SHMemoryReadLock); */
+/* #endif */
+/*  vp_os_mutex_init(&SHMemoryWriteLock); */
+/*  vp_os_mutex_init(&ResponseReceivedLock); */
+
+/*   vp_os_mutex_unlock(&PrintfLock); */
+/*   vp_os_mutex_unlock(&SHMemoryLock); */
+/* #ifdef BLUETOOTH_CARD */
+/*   vp_os_mutex_unlock(&SHMemoryReadLock); */
+/* #endif */
+/*   vp_os_mutex_unlock(&SHMemoryWriteLock); */
+/*   vp_os_mutex_unlock(&ResponseReceivedLock); */
+/* } */
+
+/* void delete_all_mutex() */
+/* { */
+/*   vp_os_mutex_destroy(&PrintfLock); */
+/*   vp_os_mutex_destroy(&SHMemoryLock); */
+/* #ifdef BLUETOOTH_CARD */
+/*   vp_os_mutex_destroy(&SHMemoryReadLock); */
+/* #endif */
+/*   vp_os_mutex_destroy(&SHMemoryWriteLock); */
+/*   vp_os_mutex_destroy(&ResponseReceivedLock); */
+/* } */
+
+#ifdef RFCOMM_OVER_IP
+#  define OPEN_AT_SOCKET(Server)  open_bnep_socket(SERVERHOST, PORT_AT)
+#  define READ_AT_SOCKET  read_bnep_socket
+#  define CLOSE_AT_SOCKET close_bnep_socket
+#else // ! RFCOMM_OVER_IP
+#  define OPEN_AT_SOCKET(Server)  open_rfcomm_socket(Server)
+#  define READ_AT_SOCKET  read_rfcomm_socket
+#  define CLOSE_AT_SOCKET close_rfcomm_socket
+#endif // <- RFCOMM_OVER_IP
+
+PROTO_THREAD_ROUTINE(raw_image_sequence_capture, params);
+
+BEGIN_THREAD_TABLE
+THREAD_TABLE_ENTRY(process_events  , 10)
+THREAD_TABLE_ENTRY(ref_send,       20)
+THREAD_TABLE_ENTRY(raw_image_sequence_capture,       20)
+END_THREAD_TABLE
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+///                            MAIN
+/////////////////////////////////////////////////////////////////////////////////////
+int main(int argc, char **argv)
+{
+/*   void *res; */
+/*   int attempt, ret; */
+  mobile_config_t cfg;
+
+/*   pthread_attr_t pthread_custom_attr; */
+
+/*   pthread_t process_events_thread;  /\* joystick *\/ */
+/*   pthread_t ref_send_thread; /\* envoie des consignes *\/ */
+
+
+
+  /* beginning of code */
+  /* ----------------- */
+  if(argc > 1)
+    {
+      fprintf(stderr, "Usage : raw_image_capture\n");
+      return EXIT_FAILURE;
+    }
+
+  ///////////////////////////  ///////////////////////////
+  //           STEP 1 : CONNECTION WIFI PAR CLE USB
+  ///////////////////////////  ///////////////////////////
+/*   attempt = 0; */
+/*   while((ret = connect_wifi()) && ++attempt < 5) */
+/*     { */
+/*       printf("Connexion attempt(s) failed : %i\n", attempt); */
+/*     } */
+/*   if(ret) */
+/*     { */
+/*       return EXIT_FAILURE; */
+/*     } */
+/*   printf("connect_wifi OK!\n"); */
+
+
+
+  ///////////////////////////  ///////////////////////////
+  //           STEP 1 : CONFIGURATION DU PAD
+  ///////////////////////////  ///////////////////////////
+/*   init_all_mutex(); */
+
+  if(mobile_init_config(&cfg))
+    {
+      return EXIT_FAILURE;
+    }
+  joystick_selection(&cfg);
+
+
+  ///////////////////////////  ///////////////////////////
+  //           STEP 1 : THREAD DES COMMANDES AT
+  ///////////////////////////  ///////////////////////////
+  if ((cfg.at_socket = OPEN_AT_SOCKET(cfg.addr)) == -1)
+    {
+      return EXIT_FAILURE;
+    }
+
+  START_THREAD(process_events, &cfg);
+  START_THREAD(ref_send, &cfg);
+  START_THREAD(raw_image_sequence_capture, &cfg);
+
+  JOIN_THREAD(process_events);
+  JOIN_THREAD(ref_send);
+  JOIN_THREAD(raw_image_sequence_capture);
+
+/*   pthread_kill_other_threads_np(); */
+
+/*   delete_all_mutex(); */
+  mobile_exit_config(&cfg);
+
+  return EXIT_SUCCESS;
+}
+
+
+/* void *video_decode(void *data) */
+PROTO_THREAD_ROUTINE(raw_image_sequence_capture, params)
+{
+  int size, sizeCumul;
+  uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
+
+  mobile_config_t *cfg = (mobile_config_t *) params;
+
+  if ((cfg->sock = open_bnep_socket(SERVERHOST, PORT)) == -1)
+    {
+      return NULL;
+    }
+
+  /* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
+  vp_os_memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
+  sizeCumul = 0;
+
+  for(;;) {
+
+    size = read(cfg->sock, inbuf, INBUF_SIZE);
+    printf(".");
+    if(size>0)
+      {
+       sizeCumul += size;
+       printf("READ SIZE = %d\t sizeCumul = %d\t image = %d\n", size, sizeCumul, sizeCumul / 25344);
+       fwrite(inbuf, sizeof(char), size, cfg->sample_file);
+       if(sizeCumul==253440)
+         {
+           break;
+         }
+      }
+
+    if (size == 0 || (size < 0 && errno == EAGAIN))
+      continue;
+    if (size < 0)
+      break;
+
+
+  }
+  fclose(cfg->sample_file);
+
+  if(do_exit(cfg))
+    {
+      close_bnep_socket(cfg->sock);
+      return (void *)-1;
+    }
+
+  
+  return NULL;
+}
+
+
+