summaryrefslogtreecommitdiff
path: root/sirfmon.c
diff options
context:
space:
mode:
Diffstat (limited to 'sirfmon.c')
-rw-r--r--sirfmon.c544
1 files changed, 271 insertions, 273 deletions
diff --git a/sirfmon.c b/sirfmon.c
index 003e7de8..75a54495 100644
--- a/sirfmon.c
+++ b/sirfmon.c
@@ -277,189 +277,188 @@ static void decode_ecef(double x, double y, double z,
}
/*@ -globstate */
-static void sirf_update(size_t len)
+static void sirf_update(void)
{
- if (len > 0 && session.packet.outbuflen > 0)
+ int i,j,ch,off,cn;
+ unsigned char *buf;
+ size_t len;
+
+ assert(mid27win != NULL);
+ buf = session.packet.outbuffer + 4;
+ len = session.packet.outbuflen - 8;
+ switch (buf[0])
{
- int i,j,ch,off,cn;
- unsigned char *buf;
+ case 0x02: /* Measured Navigation Data */
+ (void)wmove(mid2win, 1,6); /* ECEF position */
+ (void)wprintw(mid2win, "%8d %8d %8d",getbesl(buf, 1),getbesl(buf, 5),getbesl(buf, 9));
+ (void)wmove(mid2win, 2,6); /* ECEF velocity */
+ (void)wprintw(mid2win, "%8.1f %8.1f %8.1f",
+ (double)getbesw(buf, 13)/8,(double)getbesw(buf, 15)/8,(double)getbesw(buf, 17)/8);
+ decode_ecef((double)getbesl(buf, 1),(double)getbesl(buf, 5),(double)getbesl(buf, 9),
+ (double)getbesw(buf, 13)/8,(double)getbesw(buf, 15)/8,(double)getbesw(buf, 17)/8);
+ decode_time((int)getbeuw(buf, 22),getbesl(buf, 24));
+ /* line 4 */
+ (void)wmove(mid2win, 4,49);
+ (void)wprintw(mid2win, "%4.1f",(double)getub(buf, 20)/5); /* HDOP */
+ (void)wmove(mid2win, 4,58);
+ (void)wprintw(mid2win, "%02x",getub(buf, 19)); /* Mode 1 */
+ (void)wmove(mid2win, 4,70);
+ (void)wprintw(mid2win, "%02x",getub(buf, 21)); /* Mode 2 */
+ (void)wmove(mid2win, 5,7);
+ nfix = (int)getub(buf, 28);
+ (void)wprintw(mid2win, "%d = ",nfix); /* SVs in fix */
+ for (i = 0; i < SIRF_CHANNELS; i++) { /* SV list */
+ if (i < nfix)
+ (void)wprintw(mid2win, "%3d",fix[i] = (int)getub(buf, 29+i));
+ else
+ (void)wprintw(mid2win, " ");
+ }
+ (void)wprintw(packetwin, "MND 0x02=");
+ break;
- assert(mid27win != NULL);
- buf = session.packet.outbuffer + 4;
- len = session.packet.outbuflen - 8;
- switch (buf[0])
- {
- case 0x02: /* Measured Navigation Data */
- (void)wmove(mid2win, 1,6); /* ECEF position */
- (void)wprintw(mid2win, "%8d %8d %8d",getbesl(buf, 1),getbesl(buf, 5),getbesl(buf, 9));
- (void)wmove(mid2win, 2,6); /* ECEF velocity */
- (void)wprintw(mid2win, "%8.1f %8.1f %8.1f",
- (double)getbesw(buf, 13)/8,(double)getbesw(buf, 15)/8,(double)getbesw(buf, 17)/8);
- decode_ecef((double)getbesl(buf, 1),(double)getbesl(buf, 5),(double)getbesl(buf, 9),
- (double)getbesw(buf, 13)/8,(double)getbesw(buf, 15)/8,(double)getbesw(buf, 17)/8);
- decode_time((int)getbeuw(buf, 22),getbesl(buf, 24));
- /* line 4 */
- (void)wmove(mid2win, 4,49);
- (void)wprintw(mid2win, "%4.1f",(double)getub(buf, 20)/5); /* HDOP */
- (void)wmove(mid2win, 4,58);
- (void)wprintw(mid2win, "%02x",getub(buf, 19)); /* Mode 1 */
- (void)wmove(mid2win, 4,70);
- (void)wprintw(mid2win, "%02x",getub(buf, 21)); /* Mode 2 */
- (void)wmove(mid2win, 5,7);
- nfix = (int)getub(buf, 28);
- (void)wprintw(mid2win, "%d = ",nfix); /* SVs in fix */
- for (i = 0; i < SIRF_CHANNELS; i++) { /* SV list */
- if (i < nfix)
- (void)wprintw(mid2win, "%3d",fix[i] = (int)getub(buf, 29+i));
- else
- (void)wprintw(mid2win, " ");
- }
- (void)wprintw(packetwin, "MND 0x02=");
- break;
-
- case 0x04: /* Measured Tracking Data */
- decode_time((int)getbeuw(buf, 1),getbesl(buf, 3));
- ch = (int)getub(buf, 7);
- for (i = 0; i < ch; i++) {
- int sv,st;
+ case 0x04: /* Measured Tracking Data */
+ decode_time((int)getbeuw(buf, 1),getbesl(buf, 3));
+ ch = (int)getub(buf, 7);
+ for (i = 0; i < ch; i++) {
+ int sv,st;
- off = 8 + 15 * i;
- (void)wmove(mid4win, i+2, 3);
- sv = (int)getub(buf, off);
- (void)wprintw(mid4win, " %3d",sv);
-
- (void)wprintw(mid4win, " %3d%3d %04x",((int)getub(buf, off+1)*3)/2,(int)getub(buf, off+2)/2,(int)getbesw(buf, off+3));
-
- st = ' ';
- if ((int)getbeuw(buf, off+3) == 0xbf)
- st = 'T';
- for (j = 0; j < nfix; j++)
- if (sv == fix[j]) {
- st = 'N';
- break;
- }
+ off = 8 + 15 * i;
+ (void)wmove(mid4win, i+2, 3);
+ sv = (int)getub(buf, off);
+ (void)wprintw(mid4win, " %3d",sv);
+
+ (void)wprintw(mid4win, " %3d%3d %04x",((int)getub(buf, off+1)*3)/2,(int)getub(buf, off+2)/2,(int)getbesw(buf, off+3));
+
+ st = ' ';
+ if ((int)getbeuw(buf, off+3) == 0xbf)
+ st = 'T';
+ for (j = 0; j < nfix; j++)
+ if (sv == fix[j]) {
+ st = 'N';
+ break;
+ }
- cn = 0;
+ cn = 0;
- for (j = 0; j < 10; j++)
- cn += (int)getub(buf, off+5+j);
+ for (j = 0; j < 10; j++)
+ cn += (int)getub(buf, off+5+j);
- (void)wprintw(mid4win, "%5.1f %c",(double)cn/10,st);
+ (void)wprintw(mid4win, "%5.1f %c",(double)cn/10,st);
- if (sv == 0) /* not tracking? */
- (void)wprintw(mid4win, " "); /* clear other info */
- }
- (void)wprintw(packetwin, "MTD 0x04=");
- break;
+ if (sv == 0) /* not tracking? */
+ (void)wprintw(mid4win, " "); /* clear other info */
+ }
+ (void)wprintw(packetwin, "MTD 0x04=");
+ break;
#ifdef __UNUSED__
- case 0x05: /* raw track data */
- for (off = 1; off < len; off += 51) {
- ch = getbeul(buf, off);
- (void)wmove(mid4win, ch+2, 19);
- cn = 0;
+ case 0x05: /* raw track data */
+ for (off = 1; off < len; off += 51) {
+ ch = getbeul(buf, off);
+ (void)wmove(mid4win, ch+2, 19);
+ cn = 0;
- for (j = 0; j < 10; j++)
- cn += getub(buf, off+34+j);
+ for (j = 0; j < 10; j++)
+ cn += getub(buf, off+34+j);
- printw("%5.1f",(double)cn/10);
+ printw("%5.1f",(double)cn/10);
- printw("%9d%3d%5d",getbeul(buf, off+8),(int)getbeuw(buf, off+12),(int)getbeuw(buf, off+14));
- printw("%8.5f %10.5f",
- (double)getbeul(buf, off+16)/65536,(double)getbeul(buf, off+20)/1024);
- }
- (void)wprintw(packetwin, "RTD 0x05=");
- break;
+ printw("%9d%3d%5d",getbeul(buf, off+8),(int)getbeuw(buf, off+12),(int)getbeuw(buf, off+14));
+ printw("%8.5f %10.5f",
+ (double)getbeul(buf, off+16)/65536,(double)getbeul(buf, off+20)/1024);
+ }
+ (void)wprintw(packetwin, "RTD 0x05=");
+ break;
#endif /* __UNUSED */
- case 0x06: /* firmware version */
- display(mid6win, 1, 10, "%s",buf + 1);
- (void)wprintw(packetwin, "FV 0x06=");
- break;
-
- case 0x07: /* Response - Clock Status Data */
- decode_time((int)getbeuw(buf, 1),getbesl(buf, 3));
- display(mid7win, 1, 5, "%2d", getub(buf, 7)); /* SVs */
- display(mid7win, 1, 16, "%lu", getbeul(buf, 8)); /* Clock drift */
- display(mid7win, 1, 29, "%lu", getbeul(buf, 12)); /* Clock Bias */
- display(mid7win, 2, 21, "%lu", getbeul(buf, 16)); /* Estimated Time */
- (void)wprintw(packetwin, "CSD 0x07=");
- break;
-
- case 0x08: /* 50 BPS data */
- ch = (int)getub(buf, 1);
- display(mid4win, ch+2, 27, "Y");
- (void)wprintw(packetwin, "50B 0x08=");
- subframe_enabled = true;
- break;
-
- case 0x09: /* Throughput */
- display(mid9win, 1, 6, "%.3f",(double)getbeuw(buf, 1)/186); /*SegStatMax*/
- display(mid9win, 1, 18, "%.3f",(double)getbeuw(buf, 3)/186); /*SegStatLat*/
- display(mid9win, 1, 31, "%.3f",(double)getbeuw(buf, 5)/186); /*SegStatTime*/
- display(mid9win, 1, 42, "%3d",(int)getbeuw(buf, 7)); /* Last Millisecond */
- (void)wprintw(packetwin, "THR 0x09=");
- break;
-
- case 0x0b: /* Command Acknowledgement */
- (void)wprintw(packetwin, "ACK 0x0b=");
- break;
-
- case 0x0c: /* Command NAcknowledgement */
- (void)wprintw(packetwin, "NAK 0x0c=");
- break;
-
- case 0x0d: /* Visible List */
- display(mid13win, 1, 6, "%d",getub(buf, 1));
- (void)wmove(mid13win, 1, 10);
- for (i = 0; i < SIRF_CHANNELS; i++) {
- if (i < (int)getub(buf, 1))
- (void)wprintw(mid13win, " %2d",getub(buf, 2 + 5 * i));
- else
- (void)wprintw(mid13win, " ");
+ case 0x06: /* firmware version */
+ display(mid6win, 1, 10, "%s",buf + 1);
+ (void)wprintw(packetwin, "FV 0x06=");
+ break;
- }
- (void)wprintw(packetwin, "VL 0x0d=");
- break;
+ case 0x07: /* Response - Clock Status Data */
+ decode_time((int)getbeuw(buf, 1),getbesl(buf, 3));
+ display(mid7win, 1, 5, "%2d", getub(buf, 7)); /* SVs */
+ display(mid7win, 1, 16, "%lu", getbeul(buf, 8)); /* Clock drift */
+ display(mid7win, 1, 29, "%lu", getbeul(buf, 12)); /* Clock Bias */
+ display(mid7win, 2, 21, "%lu", getbeul(buf, 16)); /* Estimated Time */
+ (void)wprintw(packetwin, "CSD 0x07=");
+ break;
+
+ case 0x08: /* 50 BPS data */
+ ch = (int)getub(buf, 1);
+ display(mid4win, ch+2, 27, "Y");
+ (void)wprintw(packetwin, "50B 0x08=");
+ subframe_enabled = true;
+ break;
+
+ case 0x09: /* Throughput */
+ display(mid9win, 1, 6, "%.3f",(double)getbeuw(buf, 1)/186); /*SegStatMax*/
+ display(mid9win, 1, 18, "%.3f",(double)getbeuw(buf, 3)/186); /*SegStatLat*/
+ display(mid9win, 1, 31, "%.3f",(double)getbeuw(buf, 5)/186); /*SegStatTime*/
+ display(mid9win, 1, 42, "%3d",(int)getbeuw(buf, 7)); /* Last Millisecond */
+ (void)wprintw(packetwin, "THR 0x09=");
+ break;
- case 0x13:
+ case 0x0b: /* Command Acknowledgement */
+ (void)wprintw(packetwin, "ACK 0x0b=");
+ break;
+
+ case 0x0c: /* Command NAcknowledgement */
+ (void)wprintw(packetwin, "NAK 0x0c=");
+ break;
+
+ case 0x0d: /* Visible List */
+ display(mid13win, 1, 6, "%d",getub(buf, 1));
+ (void)wmove(mid13win, 1, 10);
+ for (i = 0; i < SIRF_CHANNELS; i++) {
+ if (i < (int)getub(buf, 1))
+ (void)wprintw(mid13win, " %2d",getub(buf, 2 + 5 * i));
+ else
+ (void)wprintw(mid13win, " ");
+
+ }
+ (void)wprintw(packetwin, "VL 0x0d=");
+ break;
+
+ case 0x13:
#define YESNO(n) (((int)getub(buf, n) != 0)?'Y':'N')
- display(mid19win, 1, 20, "%d", getub(buf, 5)); /* Alt. hold mode */
- display(mid19win, 2, 20, "%d", getub(buf, 6)); /* Alt. hold source*/
- display(mid19win, 3, 20, "%dm", (int)getbeuw(buf, 7)); /* Alt. source input */
- if (getub(buf, 9) != (unsigned char)'\0')
- display(mid19win, 4, 20, "%dsec", getub(buf, 10)); /* Degraded timeout*/
- else
- display(mid19win, 4, 20, "N/A ");
- display(mid19win, 5, 20, "%dsec",getub(buf, 11)); /* DR timeout*/
- display(mid19win, 6, 20, "%c", YESNO(12));/* Track smooth mode*/
- display(mid19win, 7, 20, "%c", YESNO(13)); /* Static Nav.*/
- display(mid19win, 8, 20, "0x%x", getub(buf, 14)); /* 3SV Least Squares*/
- display(mid19win, 9 ,20, "0x%x", getub(buf, 19)); /* DOP Mask mode*/
- display(mid19win, 10,20, "0x%x", (int)getbeuw(buf, 20)); /* Nav. Elev. mask*/
- display(mid19win, 11,20, "0x%x", getub(buf, 22)); /* Nav. Power mask*/
- display(mid19win, 12,20, "0x%x", getub(buf, 27)); /* DGPS Source*/
- display(mid19win, 13,20, "0x%x", getub(buf, 28)); /* DGPS Mode*/
- display(mid19win, 14,20, "%dsec",getub(buf, 29)); /* DGPS Timeout*/
- display(mid19win, 1, 42, "%c", YESNO(34));/* LP Push-to-Fix */
- display(mid19win, 2, 42, "%dms", getbeul(buf, 35)); /* LP On Time */
- display(mid19win, 3, 42, "%d", getbeul(buf, 39)); /* LP Interval */
- display(mid19win, 4, 42, "%c", YESNO(43));/* User Tasks enabled */
- display(mid19win, 5, 42, "%d", getbeul(buf, 44)); /* User Task Interval */
- display(mid19win, 6, 42, "%c", YESNO(48));/* LP Power Cycling Enabled */
- display(mid19win, 7, 42, "%d", getbeul(buf, 49));/* LP Max Acq Search Time */
- display(mid19win, 8, 42, "%d", getbeul(buf, 53));/* LP Max Off Time */
- display(mid19win, 9, 42, "%c", YESNO(57));/* APM Enabled */
- display(mid19win,10, 42, "%d", (int)getbeuw(buf, 58));/* # of fixes */
- display(mid19win,11, 42, "%d", (int)getbeuw(buf, 60));/* Time Between fixes */
- display(mid19win,12, 42, "%d", getub(buf, 62));/* H/V Error Max */
- display(mid19win,13, 42, "%d", getub(buf, 63));/* Response Time Max */
- display(mid19win,14, 42, "%d", getub(buf, 64));/* Time/Accu & Duty Cycle Priority */
+ display(mid19win, 1, 20, "%d", getub(buf, 5)); /* Alt. hold mode */
+ display(mid19win, 2, 20, "%d", getub(buf, 6)); /* Alt. hold source*/
+ display(mid19win, 3, 20, "%dm", (int)getbeuw(buf, 7)); /* Alt. source input */
+ if (getub(buf, 9) != (unsigned char)'\0')
+ display(mid19win, 4, 20, "%dsec", getub(buf, 10)); /* Degraded timeout*/
+ else
+ display(mid19win, 4, 20, "N/A ");
+ display(mid19win, 5, 20, "%dsec",getub(buf, 11)); /* DR timeout*/
+ display(mid19win, 6, 20, "%c", YESNO(12));/* Track smooth mode*/
+ display(mid19win, 7, 20, "%c", YESNO(13)); /* Static Nav.*/
+ display(mid19win, 8, 20, "0x%x", getub(buf, 14)); /* 3SV Least Squares*/
+ display(mid19win, 9 ,20, "0x%x", getub(buf, 19)); /* DOP Mask mode*/
+ display(mid19win, 10,20, "0x%x", (int)getbeuw(buf, 20)); /* Nav. Elev. mask*/
+ display(mid19win, 11,20, "0x%x", getub(buf, 22)); /* Nav. Power mask*/
+ display(mid19win, 12,20, "0x%x", getub(buf, 27)); /* DGPS Source*/
+ display(mid19win, 13,20, "0x%x", getub(buf, 28)); /* DGPS Mode*/
+ display(mid19win, 14,20, "%dsec",getub(buf, 29)); /* DGPS Timeout*/
+ display(mid19win, 1, 42, "%c", YESNO(34));/* LP Push-to-Fix */
+ display(mid19win, 2, 42, "%dms", getbeul(buf, 35)); /* LP On Time */
+ display(mid19win, 3, 42, "%d", getbeul(buf, 39)); /* LP Interval */
+ display(mid19win, 4, 42, "%c", YESNO(43));/* User Tasks enabled */
+ display(mid19win, 5, 42, "%d", getbeul(buf, 44)); /* User Task Interval */
+ display(mid19win, 6, 42, "%c", YESNO(48));/* LP Power Cycling Enabled */
+ display(mid19win, 7, 42, "%d", getbeul(buf, 49));/* LP Max Acq Search Time */
+ display(mid19win, 8, 42, "%d", getbeul(buf, 53));/* LP Max Off Time */
+ display(mid19win, 9, 42, "%c", YESNO(57));/* APM Enabled */
+ display(mid19win,10, 42, "%d", (int)getbeuw(buf, 58));/* # of fixes */
+ display(mid19win,11, 42, "%d", (int)getbeuw(buf, 60));/* Time Between fixes */
+ display(mid19win,12, 42, "%d", getub(buf, 62));/* H/V Error Max */
+ display(mid19win,13, 42, "%d", getub(buf, 63));/* Response Time Max */
+ display(mid19win,14, 42, "%d", getub(buf, 64));/* Time/Accu & Duty Cycle Priority */
#undef YESNO
- break;
+ break;
- case 0x1b:
- /******************************************************************
+ case 0x1b:
+ /******************************************************************
Not actually documented in any published materials.
Here is what Chris Kuethe got from the SiRF folks,
(plus some corrections from the GpsPaSsion forums):
@@ -499,124 +498,123 @@ static void sirf_update(size_t len)
Correction (cm) 2 bytes (signed short)
total 3 x 12 = 36 bytes
- ******************************************************************/
- display(mid27win, 1, 14, "%d (%s)",
- getub(buf, 1), dgpsvec[(int)getub(buf, 1)]);
- /*@ -type @*/
- //(void) wmove(mid27win, 2, 0);
- for (i = j = 0; i < 12; i++) {
- if (getub(buf, 16+3*i) != '\0') {
- //(void)wprintw(mid27win, " %d=%d", getub(buf, 16+3*i), getbesw(buf, 16+3*i+1));
- j++;
- }
+ ******************************************************************/
+ display(mid27win, 1, 14, "%d (%s)",
+ getub(buf, 1), dgpsvec[(int)getub(buf, 1)]);
+ /*@ -type @*/
+ //(void) wmove(mid27win, 2, 0);
+ for (i = j = 0; i < 12; i++) {
+ if (getub(buf, 16+3*i) != '\0') {
+ //(void)wprintw(mid27win, " %d=%d", getub(buf, 16+3*i), getbesw(buf, 16+3*i+1));
+ j++;
}
- /*@ +type @*/
- display(mid27win, 1, 44, "%d", j);
- (void)wprintw(packetwin, "DST 0x1b=");
- break;
-
- case 0x1C: /* NL Measurement Data */
- case 0x1D: /* DGPS Data */
- case 0x1E: /* SV State Data */
- case 0x1F: /* NL Initialized Data */
- subframe_enabled = true;
- break;
- case 0x29: /* Geodetic Navigation Message */
- (void)wprintw(packetwin, "GNM 0x29=");
- break;
- case 0x32: /* SBAS Parameters */
- (void)wprintw(packetwin, "SBP 0x32=");
- break;
- case 0x34: /* PPS Time */
- (void)wprintw(packetwin, "PPS 0x34=");
- break;
+ }
+ /*@ +type @*/
+ display(mid27win, 1, 44, "%d", j);
+ (void)wprintw(packetwin, "DST 0x1b=");
+ break;
+
+ case 0x1C: /* NL Measurement Data */
+ case 0x1D: /* DGPS Data */
+ case 0x1E: /* SV State Data */
+ case 0x1F: /* NL Initialized Data */
+ subframe_enabled = true;
+ break;
+ case 0x29: /* Geodetic Navigation Message */
+ (void)wprintw(packetwin, "GNM 0x29=");
+ break;
+ case 0x32: /* SBAS Parameters */
+ (void)wprintw(packetwin, "SBP 0x32=");
+ break;
+ case 0x34: /* PPS Time */
+ (void)wprintw(packetwin, "PPS 0x34=");
+ break;
#ifdef __UNUSED__
- case 0x62:
- attrset(A_BOLD);
- move(2,40);
- printw("%9.5f %9.5f",(double)(RAD_2_DEG*1e8*getbesl(buf, 1)),
- (double)(RAD_2_DEG*1e8*getbesl(buf, 5)));
- move(2,63);
- printw("%8d",getbesl(buf, 9)/1000);
-
- move(3,63);
-
- printw("%8.1f",(double)getbesl(buf, 17)/1000);
-
- move(4,54);
- if (getbeul(buf, 13) > 50) {
- double heading = RAD_2_DEG*1e8*getbesl(buf, 21);
- if (heading < 0)
- heading += 360;
- printw("%5.1f",heading);
- } else
- printw(" 0.0");
-
- move(4,63);
- printw("%8.1f",(double)getbesl(buf, 13)/1000);
- attrset(A_NORMAL);
-
- move(5,13);
- printw("%04d-%02d-%02d %02d:%02d:%02d.%02d",
- (int)getbeuw(buf, 26),getub(buf, 28),getub(buf, 29),getub(buf, 30),getub(buf, 31),
- (unsigned short)getbeuw(buf, 32)/1000,
- ((unsigned short)getbeuw(buf, 32)%1000)/10);
- {
- struct timeval clk,gps;
- struct tm tm;
-
- gettimeofday(&clk,NULL);
-
- memset(&tm,0,sizeof(tm));
- tm.tm_sec = (unsigned short)getbeuw(buf, 32)/1000;
- tm.tm_min = (int)getub(buf, 31);
- tm.tm_hour = (int)getub(buf, 30);
- tm.tm_mday = (int)getub(buf, 29);
- tm.tm_mon = (int)getub(buf, 28) - 1;
- tm.tm_year = (int)getbeuw(buf, 26) - 1900;
-
- gps.tv_sec = mkgmtime(&tm);
- gps.tv_usec = (((unsigned short)getbeuw(buf, 32)%1000)/10) * 10000;
-
- move(5,2);
- printw(" ");
- move(5,2);
+ case 0x62:
+ attrset(A_BOLD);
+ move(2,40);
+ printw("%9.5f %9.5f",(double)(RAD_2_DEG*1e8*getbesl(buf, 1)),
+ (double)(RAD_2_DEG*1e8*getbesl(buf, 5)));
+ move(2,63);
+ printw("%8d",getbesl(buf, 9)/1000);
+
+ move(3,63);
+
+ printw("%8.1f",(double)getbesl(buf, 17)/1000);
+
+ move(4,54);
+ if (getbeul(buf, 13) > 50) {
+ double heading = RAD_2_DEG*1e8*getbesl(buf, 21);
+ if (heading < 0)
+ heading += 360;
+ printw("%5.1f",heading);
+ } else
+ printw(" 0.0");
+
+ move(4,63);
+ printw("%8.1f",(double)getbesl(buf, 13)/1000);
+ attrset(A_NORMAL);
+
+ move(5,13);
+ printw("%04d-%02d-%02d %02d:%02d:%02d.%02d",
+ (int)getbeuw(buf, 26),getub(buf, 28),getub(buf, 29),getub(buf, 30),getub(buf, 31),
+ (unsigned short)getbeuw(buf, 32)/1000,
+ ((unsigned short)getbeuw(buf, 32)%1000)/10);
+ {
+ struct timeval clk,gps;
+ struct tm tm;
+
+ gettimeofday(&clk,NULL);
+
+ memset(&tm,0,sizeof(tm));
+ tm.tm_sec = (unsigned short)getbeuw(buf, 32)/1000;
+ tm.tm_min = (int)getub(buf, 31);
+ tm.tm_hour = (int)getub(buf, 30);
+ tm.tm_mday = (int)getub(buf, 29);
+ tm.tm_mon = (int)getub(buf, 28) - 1;
+ tm.tm_year = (int)getbeuw(buf, 26) - 1900;
+
+ gps.tv_sec = mkgmtime(&tm);
+ gps.tv_usec = (((unsigned short)getbeuw(buf, 32)%1000)/10) * 10000;
+
+ move(5,2);
+ printw(" ");
+ move(5,2);
#if 1
- printw("%ld",(gps.tv_usec - clk.tv_usec) +
- ((gps.tv_sec - clk.tv_sec) % 3600) * 1000000);
+ printw("%ld",(gps.tv_usec - clk.tv_usec) +
+ ((gps.tv_sec - clk.tv_sec) % 3600) * 1000000);
#else
- printw("%ld %ld %ld %ld",gps.tv_sec % 3600,gps.tv_usec,
- clk.tv_sec % 3600,clk.tv_usec);
+ printw("%ld %ld %ld %ld",gps.tv_sec % 3600,gps.tv_usec,
+ clk.tv_sec % 3600,clk.tv_usec);
#endif
- }
- (void)wprintw(packetwin, "??? 0x62=");
- break;
+ }
+ (void)wprintw(packetwin, "??? 0x62=");
+ break;
#endif /* __UNUSED__ */
- case 0xff: /* Development Data */
- /*@ +ignoresigns @*/
- while (len > 0 && buf[len-1] == '\n')
- len--;
- while (len > 0 && buf[len-1] == ' ')
- len--;
- /*@ -ignoresigns @*/
- buf[len] = '\0';
- j = 1;
- for (i = 0; verbpat[i] != NULL; i++)
- if (strncmp((char *)(buf+1),verbpat[i],strlen(verbpat[i])) == 0) {
- j = 0;
- break;
- }
- if (j != 0)
- (void)wprintw(packetwin, "%s\n",buf+1);
- (void)wprintw(packetwin, "DD 0xff=");
- break;
-
- default:
- (void)wprintw(packetwin, " 0x%02x=", buf[4]);
- break;
- }
+ case 0xff: /* Development Data */
+ /*@ +ignoresigns @*/
+ while (len > 0 && buf[len-1] == '\n')
+ len--;
+ while (len > 0 && buf[len-1] == ' ')
+ len--;
+ /*@ -ignoresigns @*/
+ buf[len] = '\0';
+ j = 1;
+ for (i = 0; verbpat[i] != NULL; i++)
+ if (strncmp((char *)(buf+1),verbpat[i],strlen(verbpat[i])) == 0) {
+ j = 0;
+ break;
+ }
+ if (j != 0)
+ (void)wprintw(packetwin, "%s\n",buf+1);
+ (void)wprintw(packetwin, "DD 0xff=");
+ break;
+
+ default:
+ (void)wprintw(packetwin, " 0x%02x=", buf[4]);
+ break;
}
/* elicit navigation parameters */