diff options
| author | Keith Packard <keithp@keithp.com> | 2012-12-25 14:20:42 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-12-25 14:20:42 -0800 | 
| commit | 868ef0c9c4b208c02a87180b0eede329369bdc77 (patch) | |
| tree | 1f20d312d56bac34bad12f287629a2651bbbccf8 /src/drivers/ao_gps_skytraq.c | |
| parent | 669cde8a87d88ceae89e369c1d38b88c9f8198cf (diff) | |
| parent | 57487e78b90465a21c87cf30deb0aeaba0887332 (diff) | |
Merge branch 'master' into micropeak-logging
Diffstat (limited to 'src/drivers/ao_gps_skytraq.c')
| -rw-r--r-- | src/drivers/ao_gps_skytraq.c | 40 | 
1 files changed, 40 insertions, 0 deletions
diff --git a/src/drivers/ao_gps_skytraq.c b/src/drivers/ao_gps_skytraq.c index d80da97c..d2f67e6b 100644 --- a/src/drivers/ao_gps_skytraq.c +++ b/src/drivers/ao_gps_skytraq.c @@ -21,6 +21,7 @@  #ifndef ao_gps_getchar  #define ao_gps_getchar	ao_serial1_getchar +#define ao_gps_fifo	ao_serial1_rx_fifo  #endif  #ifndef ao_gps_putchar @@ -453,6 +454,8 @@ ao_gps_nmea_parse(void)  	}  } +static uint8_t	ao_gps_updating; +  void  ao_gps(void) __reentrant  { @@ -468,6 +471,13 @@ ao_gps(void) __reentrant  		if (ao_gps_getchar() == '$') {  			ao_gps_nmea_parse();  		} +#ifndef AO_GPS_TEST +		while (ao_gps_updating) { +			ao_usb_putchar(ao_gps_getchar()); +			if (ao_fifo_empty(ao_gps_fifo)) +				flush(); +		} +#endif  	}  } @@ -492,8 +502,38 @@ gps_dump(void) __reentrant  	ao_mutex_put(&ao_gps_mutex);  } +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()); +} +  __code struct ao_cmds ao_gps_cmds[] = {  	{ gps_dump, 	"g\0Display GPS" }, +	{ gps_update,	"U\0Update GPS firmware" },  	{ 0, NULL },  };  | 
