X-Git-Url: http://git.droids-corp.org/?p=protos%2Fimu.git;a=blobdiff_plain;f=gps_venus.c;h=7150ef2fcadbb575fd2b91c9993584a67e5c160a;hp=7119f8ccca504ec79758594c5c0a34ee6a7411c8;hb=b80b5b2fa35d632456556f9940314b565a60e802;hpb=80d45bc2bf74e4f2833ec9427d145ecd7d8c13b7 diff --git a/gps_venus.c b/gps_venus.c index 7119f8c..7150ef2 100644 --- a/gps_venus.c +++ b/gps_venus.c @@ -652,13 +652,19 @@ static struct fat_file_struct *open_log_file(void) return fd; } +void gps_get_pos(struct gps_pos *pos) +{ + memcpy(pos, &gps_pos, sizeof(*pos)); +} + int gps_loop(void) { struct fat_file_struct *fd = NULL; uint32_t ms; - uint8_t flags; + uint8_t flags, prio; int16_t len; char buf[128]; + struct gps_pos pos; if (1) { fd = open_log_file(); @@ -672,18 +678,24 @@ int gps_loop(void) ms = global_ms; IRQ_UNLOCK(flags); - if (fd != NULL) { + /* get position (prevent modification of gps pos during copy) */ + prio = callout_mgr_set_prio(&imuboard.intr_cm, GPS_PRIO); + gps_get_pos(&pos); + callout_mgr_restore_prio(&imuboard.intr_cm, prio); - /* XXX copy */ - len = snprintf(buf, sizeof(buf), - "%"PRIu32" " - "svnum %.2X lat %3.5f long %3.5f " - "alt %3.5f sea_alt %3.5f\n", - ms, gps_pos.sv_num, - (double)gps_pos.latitude/10000000., - (double)gps_pos.longitude/10000000., - (double)gps_pos.altitude/100., - (double)gps_pos.sea_altitude/100.); + /* XXX copy */ + len = snprintf(buf, sizeof(buf), + "%"PRIu32" " + "svnum %.2X lat %3.5f long %3.5f " + "alt %3.5f sea_alt %3.5f\n", + ms, gps_pos.sv_num, + (double)gps_pos.latitude/10000000., + (double)gps_pos.longitude/10000000., + (double)gps_pos.altitude/100., + (double)gps_pos.sea_altitude/100.); + + + if (fd != NULL) { if (fat_write_file(fd, (unsigned char *)buf, len) != len) { printf_P(PSTR("error writing to file\n"));