altos: Remove 8051 address space specifiers
[fw/altos] / src / test / ao_gps_test_skytraq.c
index a78fae0fefcda4f49ecf6a3b04107976fc57baf0..11c54601b9cee77d5a784848afb3a7f44033114b 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  */
 
 #define AO_GPS_TEST
+#define HAS_GPS 1
 #include "ao_host.h"
 #include <termios.h>
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <unistd.h>
 #define AO_GPS_NUM_SAT_MASK    (0xf << 0)
 #define AO_GPS_NUM_SAT_SHIFT   (0)
 
+#define AO_GPS_NEW_DATA                1
+#define AO_GPS_NEW_TRACKING    2
+
 #define AO_GPS_VALID           (1 << 4)
 #define AO_GPS_RUNNING         (1 << 5)
 #define AO_GPS_DATE_VALID      (1 << 6)
@@ -49,6 +55,9 @@ struct ao_gps_orig {
        uint16_t                v_error;        /* m */
 };
 
+#define AO_TELEMETRY_LOCATION_ALTITUDE(l)      ((l)->altitude)
+#define AO_TELEMETRY_LOCATION_SET_ALTITUDE(l,a) ((l)->altitude = (a))
+
 #define SIRF_SAT_STATE_ACQUIRED                        (1 << 0)
 #define SIRF_SAT_STATE_CARRIER_PHASE_VALID     (1 << 1)
 #define SIRF_SAT_BIT_SYNC_COMPLETE             (1 << 2)
@@ -74,6 +83,11 @@ struct ao_gps_tracking_orig {
 #define ao_telemetry_satellite ao_gps_tracking_orig
 #define ao_telemetry_satellite_info ao_gps_sat_orig
 
+extern struct ao_telemetry_location    ao_gps_data;
+extern struct ao_telemetry_satellite   ao_gps_tracking_data;
+
+uint8_t ao_gps_mutex;
+
 void
 ao_mutex_get(uint8_t *mutex)
 {
@@ -87,6 +101,7 @@ ao_mutex_put(uint8_t *mutex)
 static int
 ao_gps_fd;
 
+#if 0
 static void
 ao_dbg_char(char c)
 {
@@ -102,6 +117,7 @@ ao_dbg_char(char c)
        }
        write(1, line, strlen(line));
 }
+#endif
 
 #define QUEUE_LEN      4096
 
@@ -222,6 +238,8 @@ check_skytraq_message(char *from, uint8_t *msg, int len)
                get_u16(h_v_error);
 
 
+               (void) mag_var;
+               (void) id;
                printf ("Geodetic Navigation Data (41):\n");
                printf ("\tNav valid %04x\n", nav_valid);
                printf ("\tNav type %04x\n", nav_type);
@@ -259,6 +277,7 @@ check_skytraq_message(char *from, uint8_t *msg, int len)
                get_u32(gps_tow);
                get_u8(channels);
 
+               (void) id;
                printf ("Measured Tracker Data (4):\n");
                printf ("GPS week: %d\n", gps_week);
                printf ("GPS time of week: %d\n", gps_tow);
@@ -319,7 +338,7 @@ static uint8_t      skytraq_in_message[4096];
 static int     skytraq_in_len;
 
 char
-ao_serial_getchar(void)
+ao_serial1_getchar(void)
 {
        char    c;
        uint8_t uc;
@@ -354,7 +373,7 @@ ao_serial_getchar(void)
 
 
 void
-ao_serial_putchar(char c)
+ao_serial1_putchar(char c)
 {
        int     i;
        uint8_t uc = (uint8_t) c;
@@ -371,10 +390,11 @@ ao_serial_putchar(char c)
                i = write(ao_gps_fd, &c, 1);
                if (i == 1) {
                        if ((uint8_t) c == 0xb3 || c == '\r') {
-                               static const struct timespec delay = {
+/*                             static const struct timespec delay = {
                                        .tv_sec = 0,
                                        .tv_nsec = 100 * 1000 * 1000
                                };
+*/
                                tcdrain(ao_gps_fd);
 //                             nanosleep(&delay, NULL);
                        }
@@ -390,9 +410,10 @@ ao_serial_putchar(char c)
 #define AO_SERIAL_SPEED_4800   0
 #define AO_SERIAL_SPEED_9600   1
 #define AO_SERIAL_SPEED_57600  2
+#define AO_SERIAL_SPEED_115200 3
 
 static void
-ao_serial_set_speed(uint8_t speed)
+ao_serial1_set_speed(uint8_t speed)
 {
        int     fd = ao_gps_fd;
        struct termios  termios;
@@ -404,11 +425,14 @@ ao_serial_set_speed(uint8_t speed)
                cfsetspeed(&termios, B4800);
                break;
        case AO_SERIAL_SPEED_9600:
-               cfsetspeed(&termios, B38400);
+               cfsetspeed(&termios, B9600);
                break;
        case AO_SERIAL_SPEED_57600:
                cfsetspeed(&termios, B57600);
                break;
+       case AO_SERIAL_SPEED_115200:
+               cfsetspeed(&termios, B115200);
+               break;
        }
        tcsetattr(fd, TCSAFLUSH, &termios);
        tcflush(fd, TCIFLUSH);
@@ -416,20 +440,19 @@ ao_serial_set_speed(uint8_t speed)
 
 #define ao_time() 0
 
+uint8_t        ao_task_minimize_latency;
+
+#define ao_usb_getchar()       0
+
 #include "ao_gps_print.c"
+#include "ao_gps_show.c"
 #include "ao_gps_skytraq.c"
 
 void
 ao_dump_state(void *wchan)
 {
-       double  lat, lon;
-       int     i;
-       if (wchan == &ao_gps_data)
-               ao_gps_print(&ao_gps_data);
-       else
-               ao_gps_tracking_print(&ao_gps_tracking_data);
-       putchar('\n');
-       return;
+       if (wchan == &ao_gps_new)
+               ao_gps_show();
 }
 
 int
@@ -487,4 +510,5 @@ main (int argc, char **argv)
                exit (1);
        }
        ao_gps();
+       return 0;
 }