+static __code uint8_t ao_gps_115200[] = {
+ SKYTRAQ_MSG_3(5,0,5,0) /* Set to 115200 baud */
+};
+
+static void
+ao_gps_set_speed_delay(uint8_t speed) {
+ ao_delay(AO_MS_TO_TICKS(500));
+ ao_gps_set_speed(speed);
+ ao_delay(AO_MS_TO_TICKS(500));
+}
+
+static void
+gps_update(void) __reentrant
+{
+ ao_gps_updating = 1;
+ ao_task_minimize_latency = 1;
+#if HAS_ADC
+ ao_timer_set_adc_interval(0);
+#endif
+ ao_skytraq_sendstruct(ao_gps_115200);
+ ao_gps_set_speed_delay(AO_SERIAL_SPEED_4800);
+ ao_skytraq_sendstruct(ao_gps_115200);
+ ao_gps_set_speed_delay(AO_SERIAL_SPEED_115200);
+
+ /* It's a binary protocol; abandon attempts to escape */
+ for (;;)
+ ao_gps_putchar(ao_usb_getchar());
+}
+