X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fao_gps.c;h=562899cd030c2a24405ea9b0ac00e34bad82747b;hp=f83361eb5d9cdcbedaa571059787e1365d7030be;hb=bfe1e76c82738baaf65abbc58c3244a07ea8fefe;hpb=0b35447d05a0c7eaf4fefcbcf0065fe3320bba82 diff --git a/src/ao_gps.c b/src/ao_gps.c index f83361eb..562899cd 100644 --- a/src/ao_gps.c +++ b/src/ao_gps.c @@ -27,6 +27,11 @@ const char ao_gps_set_binary[] = { '9', '6', '0', '0', ',', '8', ',', '1', ',', '0', '*', '0', 'C', '\r','\n', + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0xa2, 0x00, 0x09, /* length 9 bytes */ 134, /* Set binary serial port */ 0, 0, 0x25, 0x80, /* 9600 baud */ @@ -56,22 +61,6 @@ const char ao_gps_config[] = { 143, /* static navigation */ 0, /* disable */ 0x00, 0x8f, 0xb0, 0xb3, - - 0xa0, 0xa2, 0x00, 0x08, /* length: 8 bytes */ - 166, /* Set message rate */ - 2, /* enable/disable all messages */ - 0, /* message id (ignored) */ - 0, /* update rate (0 = disable) */ - 0, 0, 0, 0, /* reserved */ - 0x00, 0xa8, 0xb0, 0xb3, - - 0xa0, 0xa2, 0x00, 0x08, /* length: 8 bytes */ - 166, /* Set message rate */ - 0, /* enable/disable one message */ - 41, /* message 41 */ - 1, /* once per second */ - 0, 0, 0, 0, /* reserved */ - 0x00, 0xd0, 0xb0, 0xb3, }; #define NAV_TYPE_GPS_FIX_TYPE_MASK (7 << 0) @@ -224,27 +213,21 @@ ao_sirf_parse_41(void) { uint8_t i, offset; - printf("parse 41\n"); for (i = 0; ; i++) { offset = geodetic_nav_data_packet[i].offset; switch (geodetic_nav_data_packet[i].type) { case SIRF_END: - printf("parse 41 done\n"); return; case SIRF_DISCARD: - printf("parse 41 discard %d\n", offset); sirf_discard(offset); break; case SIRF_U8: - printf("parse 41 u8 %d\n", offset); sirf_u8(offset); break; case SIRF_U16: - printf("parse 41 u16 %d\n", offset); sirf_u16(offset); break; case SIRF_U32: - printf("parse 41 u32 %d\n", offset); sirf_u32(offset); break; } @@ -259,11 +242,53 @@ ao_gps_setup(void) __reentrant #ifdef AO_GPS_TEST ao_serial_set_speed(j); #endif + for (i = 255; i != 0; i--) + ao_serial_putchar(0); + for (i = 0; i < sizeof (ao_gps_set_binary); i++) ao_serial_putchar(ao_gps_set_binary[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, + 4, +}; + void ao_gps(void) __reentrant { @@ -272,6 +297,9 @@ ao_gps(void) __reentrant for (i = 0; i < sizeof (ao_gps_config); i++) ao_serial_putchar(ao_gps_config[i]); + for (i = 0; i < sizeof (sirf_disable); i++) + ao_sirf_set_message_rate(sirf_disable[i], 0); + ao_sirf_set_message_rate(41, 1); for (;;) { /* Locate the begining of the next record */ while (ao_sirf_byte() != 0xa0) @@ -336,7 +364,6 @@ ao_gps(void) __reentrant ao_gps_data.v_error = 65535; else ao_gps_data.v_error = ao_sirf_data.v_error / 100; - ao_gps_data.h_error = ao_sirf_data.h_error; ao_mutex_put(&ao_gps_mutex); ao_wakeup(&ao_gps_data); break;