ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / VP_SDK / VP_Os / vp_os_error_handling.c
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Os/vp_os_error_handling.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Os/vp_os_error_handling.c
new file mode 100644 (file)
index 0000000..a7bd237
--- /dev/null
@@ -0,0 +1,59 @@
+/**
+ *  \brief    VP OS. Error Handling
+ *  \author   Sylvain Gaeremynck <sylvain.gaeremynck@parrot.fr>
+ *  \version  1.0
+ *  \date     first release 26/03/2007
+ */
+
+#include <VP_Os/vp_os_error_handling.h>
+#include <VP_Os/vp_os_malloc.h>
+
+#define VP_OS_ERROR_MESSAGE "Erreur"
+
+typedef struct _vp_os_error_handlers_t
+{
+
+  uint32_t                signature;
+  vp_os_error_handler_t   error_handler;
+
+} vp_os_error_handlers_t;
+
+static uint32_t vp_os_num_handlers = 0;
+static vp_os_error_handlers_t vp_os_error_handlers[VP_OS_MAX_NUM_ERROR_HANDLERS];
+static char vp_os_error_message[VP_OS_MAX_NUM_ERROR_MESSAGE_SIZE];
+
+void vp_os_install_error_handler(uint32_t signature, vp_os_error_handler_t error_handler)
+{
+  vp_os_error_handlers[vp_os_num_handlers].signature      = signature;
+  vp_os_error_handlers[vp_os_num_handlers].error_handler  = error_handler;
+
+  vp_os_num_handlers ++;
+}
+
+const char* vp_os_get_error_message(uint32_t error_code)
+{
+  uint32_t signature  = error_code >> 16;
+  uint32_t found      = 0;
+  uint32_t i;
+
+  vp_os_memset(vp_os_error_message, 0, VP_OS_MAX_NUM_ERROR_MESSAGE_SIZE);
+
+  for( i = 0; !found && i < vp_os_num_handlers; i++)
+  {
+    if(signature == vp_os_error_handlers[i].signature)
+      found++;
+  }
+
+  if(found)
+  {
+    strcpy(vp_os_error_message, vp_os_error_handlers[i].error_handler(error_code) );
+  }
+  else
+  {
+    // generic error message
+    strcpy(vp_os_error_message, VP_OS_ERROR_MESSAGE);
+    return vp_os_error_message;
+  }
+
+  return vp_os_error_message;
+}