void
evermore80(Place pl, int baud)
{
char buf[32], *s;
long now, seconds, week;
fprint(2, "Evermore80");
time(&now);
seconds = now - 315964800;
week = (seconds / (7*24*3600));
seconds = seconds % (7*24*3600);
s = buf;
s = putbyte(s, 0x80); /* message ID */
s = putshort(s, week); /* week number */
s = putlong(s, seconds*100); /* seconds */
s = putshort(s, pl.lat*10.0); /* latitude tenths degree */
s = putshort(s, pl.lon*10.0); /* longitude tenths degree */
s = putshort(s, 100); /* altitude meters */
s = putshort(s, 0); /* datumn ID */
s = putbyte(s, 2); /* warm start */
s = putbyte(s, GGAon|GSAon|GSVon|RMCon|CRCon);
switch(baud){
case 4800: s = putbyte(s, 0); break;
case 9600: s = putbyte(s, 1); break;
case 19200: s = putbyte(s, 2); break;
case 38400: s = putbyte(s, 3); break;
default:
sysfatal("Illegal baud rate");
}
evermoresend(buf, s - buf);
fprint(2, "\n");
}
void
evermore89(int baud)
{
char buf[32], *s;
fprint(2, "Evermore89");
s = buf;
s = putbyte(s, 0x89); /* message ID */
s = putbyte(s, 0x01); /* set main serial port */
switch(baud){
case 4800: s = putbyte(s, 0x00); break;
case 9600: s = putbyte(s, 0x01); break;
case 19200: s = putbyte(s, 0x02); break;
case 38400: s = putbyte(s, 0x03); break;
default:
sysfatal("illegal baud rate %d", baud);
}
evermoresend(buf, s - buf);
fprint(2, "\n");
}
void
evermore8e(void)
{
char buf[32], *s;
fprint(2, "Evermore8e");
s = buf;
s = putbyte(s, 0x8e); /* message ID */
s = putbyte(s, GGAon|GSAon|GSVon|RMCon); /* all messages except GLL and VTG */
s = putbyte(s, 0x01); /* checksum on */
s = putbyte(s, 0x01); /* GGA update rate */
s = putbyte(s, 0x0b); /* GLL update rate */
s = putbyte(s, 0x0a); /* GSA update rate */
s = putbyte(s, 0x14); /* GSV update rate */
s = putbyte(s, 0x08); /* RMC update rate */
s = putbyte(s, 0x0d); /* VTG update rate */
evermoresend(buf, s - buf);
fprint(2, "\n");
}
void
main(int argc, char*argv[])
{
char *p;
Place pl;
int newbaud;