/* Code starts here - call it GPSLogger_v2.1 :) */ // this is a generic logger that does checksum testing so the data written should be always good // Assumes a sirf III chipset logger attached to pin 0 and 1 #include "AF_SDLog.h" #include "util.h" #include #include // power saving modes #define SLEEPDELAY 0 #define TURNOFFGPS 0 #define LOG_RMC_FIXONLY 1 AF_SDLog card; File f; #define led1Pin 4 #define led2Pin 3 #define powerPin 2 #define BUFFSIZE 75 char buffer[BUFFSIZE]; uint8_t bufferidx = 0; uint8_t fix = 0; // current fix data uint8_t i; /* EXAMPLE $PSRF103,,,,*CKSUM 00=GGA,01=GLL,02=GSA,03=GSV,04=RMC,05=VTG 00=SetRate,01=Query Output every seconds, off=00,max=255 00=disable Checksum,01=Enable checksum for specified message Note: checksum is required Example 1: Query the GGA message with checksum enabled $PSRF103,00,01,00,01*25 Example 2: Enable VTG message for a 1Hz constant output with checksum enabled $PSRF103,05,00,01,01*20 Example 3: Disable VTG message $PSRF103,05,00,00,01*21 */ #define SERIAL_SET "$PSRF100,01,4800,08,01,00*0E\r\n" // GGA-Global Positioning System Fixed Data, message 103,00 #define LOG_GGA 0 #define GGA_ON "$PSRF103,00,00,01,01*25\r\n" #define GGA_OFF "$PSRF103,00,00,00,01*24\r\n" // GLL-Geographic Position-Latitude/Longitude, message 103,01 #define LOG_GLL 0 #define GLL_ON "$PSRF103,01,00,01,01*26\r\n" #define GLL_OFF "$PSRF103,01,00,00,01*27\r\n" // GSA-GNSS DOP and Active Satellites, message 103,02 #define LOG_GSA 0 #define GSA_ON "$PSRF103,02,00,01,01*27\r\n" #define GSA_OFF "$PSRF103,02,00,00,01*26\r\n" // GSV-GNSS Satellites in View, message 103,03 #define LOG_GSV 0 #define GSV_ON "$PSRF103,03,00,01,01*26\r\n" #define GSV_OFF "$PSRF103,03,00,00,01*27\r\n" // RMC-Recommended Minimum Specific GNSS Data, message 103,04 #define LOG_RMC 1 #define RMC_ON "$PSRF103,04,00,01,01*21\r\n" #define RMC_OFF "$PSRF103,04,00,00,01*20\r\n" // VTG-Course Over Ground and Ground Speed, message 103,05 #define LOG_VTG 0 #define VTG_ON "$PSRF103,05,00,01,01*20\r\n" #define VTG_OFF "$PSRF103,05,00,00,01*21\r\n" // Switch Development Data Messages On/Off, message 105 #define LOG_DDM 1 #define DDM_ON "$PSRF105,01*3E\r\n" #define DDM_OFF "$PSRF105,00*3F\r\n" #define USE_WAAS 0 // useful in US, but slower fix #define WAAS_ON "$PSRF151,01*3F\r\n" // the command for turning on WAAS #define WAAS_OFF "$PSRF151,00*3E\r\n" // the command for turning off WAAS // read a Hex value and return the decimal equivalent uint8_t parseHex(char c) { if (c < '0') return 0; if (c <= '9') return c - '0'; if (c < 'A') return 0; if (c <= 'F') return (c - 'A')+10; } // blink out an error code void error(uint8_t errno) { while(1) { for (i=0; i