sirf.c: Small changes for testing.
authorBenoit Papillault <benoit.papillault@free.fr>
Mon, 28 Dec 2015 11:43:39 +0000 (12:43 +0100)
committerBenoit Papillault <benoit.papillault@free.fr>
Mon, 28 Dec 2015 11:46:45 +0000 (12:46 +0100)
sirf.c

diff --git a/sirf.c b/sirf.c
index 6f07ba6..8d0254b 100644 (file)
--- a/sirf.c
+++ b/sirf.c
@@ -8,6 +8,7 @@
 #include <sys/select.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <fcntl.h>
 #include <termios.h>
 #include <unistd.h>
@@ -246,16 +247,16 @@ int decode_sirf_msg_7(unsigned char *buf, int n)
        p += 1;
        printf("  Extended GPS Week : %u\n", get_sirf_2u(buf + p));
        p += 2;
-       printf("  GPS Time of Week : %f s\n",
+       printf("  GPS Time of Week : %.3f s\n",
               (double)get_sirf_4u(buf + p) / 100.0);
        p += 4;
        printf("  Satellites used : %u\n", buf[p]);
        p += 1;
        printf("  Clock Drift : %u Hz\n", get_sirf_4u(buf + p));
        p += 4;
-       printf("  Clock Bias : %u ns\n", get_sirf_4u(buf + p));
+       printf("  Clock Bias : %.9f s \n", 1e-9*(double)get_sirf_4u(buf + p));
        p += 4;
-       printf("  Estimated GPS Time : %u ms\n", get_sirf_4u(buf + p));
+       printf("  Estimated GPS Time : %.3f s\n", 1e-3*(double)get_sirf_4u(buf + p));
        p += 4;
 
        return 0;
@@ -532,6 +533,8 @@ void dump_msg(unsigned char *buf, int n) {
 int do_read(int fd, int * ack) {
        /* SiRF message size is limited to 912 bytes */
        int i, n;
+       struct timeval tv;
+       static struct timeval tv_last = { 0, 0 };
 
        static unsigned char sbuffer[912*2];
        static int p = 0;
@@ -543,6 +546,7 @@ int do_read(int fd, int * ack) {
        }
 
        n = read(fd, sbuffer + p, sizeof(sbuffer) - p);
+       gettimeofday(&tv, NULL);
        if (n <= 0) {
                perror("read");
                return -1;
@@ -553,6 +557,13 @@ int do_read(int fd, int * ack) {
                return 0;
        }
 
+       double diff = (tv.tv_sec+1e-6*tv.tv_usec) - 
+           (tv_last.tv_sec+1e-6*tv_last.tv_usec);
+
+       if (diff > 0.010)
+           printf("tv %lu.%06lu (diff %f)\n", tv.tv_sec, tv.tv_usec, diff);
+       tv_last = tv;
+
        /* for debug only :
        printf("%d bytes received (total = %d):", n, p+n);
        for (i=0; i<n; i++) {
@@ -695,7 +706,7 @@ int main(int argc, const char *argv[])
                return -1;
        }
 
-       /* switch to 4800 bauds */
+       /* switch to 115200 bauds */
        if (tcgetattr(fd, &term) != 0) {
                perror("tcgetattr");
        }
@@ -736,7 +747,7 @@ int main(int argc, const char *argv[])
                                    (baud >>  8) & 0xff,
                                    (baud >>  0) & 0xff,
                                    8, 1, 0, 0 };
-       sirf_msg_send(fd, msg_134, sizeof(msg_134));
+       //sirf_msg_send(fd, msg_134, sizeof(msg_134));
        /*
        if (tcgetattr(fd, &term) != 0) {
                perror("tcgetattr");
@@ -750,7 +761,7 @@ int main(int argc, const char *argv[])
 
        /* Poll Software Version */
        unsigned char msg_132[] = { 132, 0x00 };
-       sirf_msg_send(fd, msg_132, sizeof(msg_132));
+       //sirf_msg_send(fd, msg_132, sizeof(msg_132));
 
        /* Initialize GPS/DR Navigation */
        /*
@@ -775,20 +786,25 @@ int main(int argc, const char *argv[])
                                    0x00, 0x00, 0x00, 0x00,
                                    0x00, 0x00, 0x00, 0x00,
                                    0x00, 0x00,
-                                   12,
+                                   12, /* 12 channels */
                                    /* Clear memory */
                                    /* (1<<2) | */
-                                   /* Enable raw track & debug data */
-                                   (1<<4) | (1<<5) };
-       sirf_msg_send(fd, msg_128, sizeof(msg_128));
+                                   /*(1<<3)|*//* Factory Reset = reset baud rate */
+                                   (1<<4)| /* Enable raw track */
+                                   (1<<5)  /* debug data */ };
+       //sirf_msg_send(fd, msg_128, sizeof(msg_128));
+
+       /* Enable MID 8 */
+       unsigned char msg_166_8[] = { 166, 0, 8, 1, 0, 0, 0, 0 };
+       sirf_msg_send(fd, msg_166_8, sizeof(msg_166_8));
 
        /* Enable MID 29 */
        unsigned char msg_166_29[] = { 166, 0, 29, 1, 0, 0, 0, 0 };
-       sirf_msg_send(fd, msg_166_29, sizeof(msg_166_29));
+       //sirf_msg_send(fd, msg_166_29, sizeof(msg_166_29));
 
        /* Enable MID 52 : we got a NACK since this feature is not available */
-       unsigned char msg_166[] = { 166,  0, 52, 1, 0, 0, 0, 0 };
-       sirf_msg_send(fd, msg_166, sizeof(msg_166));
+       unsigned char msg_166_52[] = { 166,  0, 52, 1, 0, 0, 0, 0 };
+       //sirf_msg_send(fd, msg_166_52, sizeof(msg_166_52));
 
        /* Try to enable all messages. We got a ACK for :
             0, Undocumented (never received)
@@ -813,6 +829,7 @@ int main(int argc, const char *argv[])
            41, Geodetic Navigation Data
            46, Test Mode 3/4/5/6 (never received)
            50, SBAS Parameters
+           52, 1 PPS Time
            55, Test Mode 4 Track Data (never received)
           128, Undocumented (never received)
           255, Development Data
@@ -827,6 +844,7 @@ int main(int argc, const char *argv[])
        for (;;) {
                fd_set fdr;
                int r;
+               struct timeval tv;
 
                FD_ZERO(&fdr);
                FD_SET(fd, &fdr);