uint16_t dev_read_DEV_MICA2_GPS(void* buffer, uint16_t len) { uint16_t ret_val = 1; // if the GPS is turned off, turn it on. if (gps_mode == DEV_MODE_OFF) { gps_on(); gps_enable_bits(GPS_TX_RX); } gps_enable_bits(GPS_TX_ADDR); // determine what type of variable we should store in buffer. switch(read_type) { case MICA2_GPS_READ_GGA: // we should store a gps_gga_t in buffer. // if buffer is not the size of a gps_gga_t, we have a problem. if (len != sizeof(gps_gga_t)) { ret_val = 0; break; } // loop until we read a GGA packet do { mica2_gps_readline(gps_buffer, GPS_BUFFER_SIZE); }while(!mica2_gps_is_gga(gps_buffer)); // parse the packet into buffer. mica2_gps_parse_gga(gps_buffer, (gps_gga_t*)buffer); break; case MICA2_GPS_READ_STRING: // we should store a simple string in buffer. mica2_gps_readline(buffer, len); break; } // if the GPS was turned off, turn it back off. if (gps_mode == DEV_MODE_OFF) { gps_disable_bits(GPS_TX_RX); gps_off(); } return 1; }
uint8_t dev_mode_DEV_MICA2_GPS(uint8_t md) { if (md == DEV_MODE_OFF) { gps_mode = md; gps_disable_bits(GPS_TX_RX); gps_off(); return DEV_OK; } else if (md == DEV_MODE_ON) { gps_mode = md; gps_disable_bits(GPS_TX_RX); gps_on(); return DEV_OK; } else return DEV_UNSUPPORTED; }
static void cmd_nmea(Stream *chp, int argc, char* argv[]) { if (argc < 1) { chprintf(chp, "Usage: GPS on|off|nmea|pos\r\n"); return; } else if (strncasecmp("on", argv[0], 2) == 0) { chprintf(chp, "***** GPS ON *****\r\n"); gps_on(); return; } else if (strncasecmp("off", argv[0], 2) == 0) { chprintf(chp, "***** GPS OFF *****\r\n"); gps_off(); return; } else if (strncasecmp("nmea", argv[0], 1) == 0) { chprintf(chp, "***** NMEA PACKETS *****\r\n"); gps_mon_raw(); } else if (strncasecmp("pos", argv[0], 3) == 0){ chprintf(chp, "***** VALID POSITION REPORTS (GPRMC) *****\r\n"); gps_mon_pos(); } else if (strncasecmp("test", argv[0], 4) == 0) { float x; sscanf(argv[1], "%f", &x); chprintf(chp, "%f\r\n", x); } else return; /* And wait until some character has been typed */ getch(chp); gps_mon_off(); }