Add glibc support(default)

Change-Id: I7675edcf14df8707ecd424a962e4cc464a4c6ae4
diff --git a/mbtk/aboot-tiny/jacana/jacana_main.c b/mbtk/aboot-tiny/jacana/jacana_main.c
new file mode 100755
index 0000000..96b4c53
--- /dev/null
+++ b/mbtk/aboot-tiny/jacana/jacana_main.c
@@ -0,0 +1,250 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <time.h>
+#include <fcntl.h>
+#include <include/log.h>
+
+#include "jacana_download.h"
+#include "jacana_mem.h"
+#include "jacana_log.h"
+#include "jacana_usleep.h"
+
+#undef LOG_TAG
+#define LOG_TAG	"ABoot"
+
+#ifdef PATH_MAX
+#undef PATH_MAX
+#define PATH_MAX    127
+#else
+#define PATH_MAX    127
+#endif
+/*---------------------------------------------------------------------------*/
+char jacana_firmware_file_name[PATH_MAX];
+char jacana_pvt_file_name[PATH_MAX];
+#define ABOOT_PM_NAME	  "aboot.pm"
+#define ABOOT_CPU_FREQ  "aboot 1248000"
+#define ABOOT_CPU       "aboot"
+
+char gpioCtrlPath[128] = "/sys/devices/platform/asr-gps/ctrl";
+
+
+static void dubheWrite(char* str)
+{
+    int fd;
+    fd = open((const char*)gpioCtrlPath, O_WRONLY);
+
+    if (fd >= 0)    {
+        write(fd, str, strlen(str));
+        close(fd);
+    }
+}
+
+
+
+static int gpsHalReset()
+{
+	dubheWrite("reset 0");
+    jacana_delay_msleep(100);
+    dubheWrite("reset 1");
+    jacana_delay_msleep(100);
+    return 0;
+}
+
+static int gpsHalFWDone()
+{
+    dubheWrite("on");  
+    return 0;
+}
+
+static int gpsHalFWFail()
+{
+    dubheWrite("off");  
+    return 0;
+}
+/*---------------------------------------------------------------------------*/
+void *
+jacana_mem_alloc(size_t size)
+{
+  void *ptr;  
+  ptr = malloc(size);
+  return ptr;
+}
+/*---------------------------------------------------------------------------*/
+void
+jacana_mem_free(void *ptr)
+{
+  free(ptr);
+}
+/*---------------------------------------------------------------------------*/
+extern int slogFd;
+int
+jacana_log_printf(const char *format, ...)
+{
+  int write_length = 0;
+  va_list args;
+  char buf[1024];
+  va_start(args, format);
+  write_length = vsnprintf(buf, 1024, format, args);
+  va_end(args);
+
+  __android_log_printf(LOG_ID_RADIO, LOG_ERR_LEVEL, "%s", buf);
+
+  return write_length;
+}
+
+/*---------------------------------------------------------------------------*/
+int
+jacana_delay_usleep(unsigned long useconds)
+{
+
+  (void)useconds;
+  jacana_log_printf("jacana_delay_usleep: %d\n", useconds);
+
+  return 0;
+}
+
+
+/*---------------------------------------------------------------------------*/
+int
+jacana_delay_msleep(unsigned long mseconds)
+{
+  struct timespec wait;
+  wait.tv_sec = mseconds / 1000;
+  wait.tv_nsec = (mseconds % 1000) * 1000 * 1000;
+  nanosleep(&wait, NULL);
+
+  return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+static int
+gnss_module_lock( void )
+{
+    FILE *flk;
+    int ret = -1;
+
+    flk = fopen("/sys/power/wake_lock", "w");
+    if(flk) {
+        fprintf(flk, ABOOT_PM_NAME);
+        ret = fclose(flk);
+    }
+
+    flk = fopen("/sys/power/cpu_freq_min_pm_qos", "w");
+    if(flk) {
+        fprintf(flk, ABOOT_CPU_FREQ);
+        ret = fclose(flk);
+    }
+    return ret;
+}
+
+/*---------------------------------------------------------------------------*/
+static int
+gnss_module_unlock( void )
+{
+    FILE *flk;
+    int ret = -1;
+
+    flk = fopen("/sys/power/wake_unlock", "w");
+    if(flk) {
+        fprintf(flk, ABOOT_PM_NAME);
+        ret = fclose(flk);
+    }
+
+    flk = fopen("/sys/power/cpu_freq_min_pm_unqos", "w");
+    if(flk) {
+        fprintf(flk, ABOOT_CPU);
+        ret = fclose(flk);
+    }
+    return ret;
+}
+
+/*---------------------------------------------------------------------------*/
+static void
+usage(const char *prog)
+{
+  fprintf(stderr, "usage:  %s [options]\n", prog);
+  fprintf(stderr, "example: jacana_download -B 115200 -s ttyUSB1 -F firmware.bin -P pvt.bin\n");
+  fprintf(stderr, "Options are:\n");
+  fprintf(stderr, " -B baudrate    9600,19200,38400,57600,115200,921600 (default 115200)\n");
+  fprintf(stderr, " -s siodev      Serial device (e.x. /dev/ttyUSB0)\n");
+  fprintf(stderr, " -F firmware    Firmware file name\n");
+  fprintf(stderr, " -P pvt         PVT file name\n");
+}
+/*---------------------------------------------------------------------------*/
+int
+main(int argc, char *argv[])
+{
+  const char *prog;
+  char serial_dev[32];
+  int baudrate = 115200;
+  int c;
+  int ret = 0;
+//  int i = 0;
+
+  /*LOGCAT showing with ACAT Tool */
+  set_service_log_tag(LOG_TAG);
+
+    prog = argv[0];
+    while((c = getopt(argc, argv, "B:s:F:P:h?")) != -1) {
+    switch(c) {
+    case 'B':
+      baudrate = atoi(optarg);
+      break;
+
+    case 's':
+      if(strncmp("/dev/", optarg, 5) == 0) {
+        strcpy(serial_dev, optarg);
+      } else {
+        sprintf(serial_dev, "/dev/%s", optarg);
+      }
+      break;
+
+    case 'F':
+      strcpy(jacana_firmware_file_name, optarg);
+      break;
+
+    case 'P':
+      strcpy(jacana_pvt_file_name, optarg);
+      break;
+
+    case '?':
+    case 'h':
+    default:
+      usage(prog);
+      exit(1);
+      break;
+    }
+  }
+
+  if(!strlen(serial_dev) || !strlen(jacana_firmware_file_name)
+     || !strlen(jacana_pvt_file_name)) {
+    usage(prog);
+    exit(1);
+  }
+
+//for( i=0; i<3; i++)   {
+    /* Reset Jacana Module..*/
+    gpsHalReset();
+
+    /* Disable PM. */
+    gnss_module_lock();
+    ret = jacana_aboot_tiny_download(serial_dev, baudrate);
+    gnss_module_unlock();
+
+//    if (!ret)
+//      break;
+//  }
+
+  /* Mark Done. */
+  if (!ret)  
+    gpsHalFWDone();
+  else
+    gpsHalFWFail();
+  
+  return ret;
+}