+void
+ao_gps_setup(void) __reentrant
+{
+ uint8_t i, j, k;
+ for (j = 0; j < 2; j++) {
+#ifdef AO_GPS_TEST
+ ao_serial_set_speed(j);
+#endif
+ for (i = 0; i < 128; i++)
+ ao_serial_putchar(0x55);
+ for (k = 0; k < 4; k++)
+ for (i = 0; i < sizeof (ao_gps_set_nmea); i++)
+ ao_serial_putchar(ao_gps_set_nmea[i]);
+ for (i = 0; i < 128; i++)
+ ao_serial_putchar(0x55);
+ for (k = 0; k < 4; k++)
+ for (i = 0; i < sizeof (ao_gps_set_sirf); i++)
+ ao_serial_putchar(ao_gps_set_sirf[i]);
+ }
+}
+
+static const char ao_gps_set_message_rate[] = {
+ 0xa0, 0xa2, 0x00, 0x08,
+ 166,
+ 0,
+#define SET_MESSAGE_RATE_ID 6
+#define SET_MESSAGE_RATE 7
+
+};
+
+void
+ao_sirf_set_message_rate(uint8_t msg, uint8_t rate)
+{
+ uint16_t cksum = 0x00a6;
+ uint8_t i;
+
+ for (i = 0; i < sizeof (ao_gps_set_message_rate); i++)
+ ao_serial_putchar(ao_gps_set_message_rate[i]);
+ ao_serial_putchar(msg);
+ ao_serial_putchar(rate);
+ cksum = 0xa6 + msg + rate;
+ for (i = 0; i < 4; i++)
+ ao_serial_putchar(0);
+ ao_serial_putchar((cksum >> 8) & 0x7f);
+ ao_serial_putchar(cksum & 0xff);
+ ao_serial_putchar(0xb0);
+ ao_serial_putchar(0xb3);
+}
+
+static const uint8_t sirf_disable[] = {
+ 2,
+ 4,
+ 9,
+ 10,
+ 27,
+ 50,
+ 52,
+};
+