Changeset - 6a57c40fdde2
[Not reviewed]
default
0 2 0
mkanning@CL-SEC241-10.cedarville.edu - 13 years ago 2012-11-15 11:39:24
mkanning@CL-SEC241-10.cedarville.edu
gps.c and gps.h changes
2 files changed with 10 insertions and 5 deletions:
0 comments (0 inline, 0 general)
master/master/lib/trackuinoGPS/gps.c
Show inline comments
 
@@ -61,53 +61,49 @@ static const t_nmea_parser gga_parsers[]
 
	NULL              // DGPS station ID number
 
};
 

	
 
static const t_nmea_parser rmc_parsers[] = {
 
	NULL,             // $GPRMC
 
	parse_time,       // Time
 
	parse_status,     // A=active, V=void
 
	parse_lat,        // Latitude,
 
	parse_lat_hemi,   // N/S
 
	parse_lon,        // Longitude
 
	parse_lon_hemi,   // E/W
 
	parse_speed,      // Speed over ground in knots
 
	parse_course,     // Track angle in degrees (true)
 
	NULL,             // Date (DDMMYY)
 
	NULL,             // Magnetic variation
 
	NULL              // E/W
 
};
 

	
 

	
 

	
 
static const int NUM_OF_UNK_PARSERS = (sizeof(unk_parsers) / sizeof(t_nmea_parser));
 
static const int NUM_OF_GGA_PARSERS = (sizeof(gga_parsers) / sizeof(t_nmea_parser));
 
static const int NUM_OF_RMC_PARSERS = (sizeof(rmc_parsers) / sizeof(t_nmea_parser));
 

	
 
enum t_sentence_type {
 
	SENTENCE_UNK,
 
	SENTENCE_GGA,
 
	SENTENCE_RMC
 
};
 

	
 

	
 
// Module variables
 
static t_sentence_type sentence_type = SENTENCE_UNK;
 
static bool at_checksum = false;
 
static unsigned char our_checksum = '$';
 
static unsigned char their_checksum = 0;
 
static char token[16];
 
static int num_tokens = 0;
 
static unsigned int offset = 0;
 
static bool active = false;
 
static char gga_time[7] = "", rmc_time[7] = "";
 
static char new_time[7];
 
static uint32_t new_seconds;
 
static float new_lat;
 
static float new_lon;
 
static char new_aprs_lat[9];
 
static char new_aprs_lon[10];
 
static float new_course;
 
static float new_speed;
 
static float new_altitude;
 

	
 
// Public (extern) variables, readable from other modules
 
char gps_time[7];       // HHMMSS
 
uint32_t gps_seconds = 0;   // seconds after midnight
 
@@ -235,59 +231,61 @@ void parse_speed(const char *token)
 
}
 

	
 
/// we do not need to record course
 
void parse_course(const char *token)
 
{
 
	new_course = atof(token);
 
}
 

	
 
/// will use this to validate pressure readings
 
void parse_altitude(const char *token)
 
{
 
	new_altitude = atof(token);
 
}
 

	
 

	
 
//
 
// Exported functions
 
//
 
/// void zeroing of data. presumably to be called at start
 
void gps_setup() {
 
	strcpy(gps_time, "000000");
 
	strcpy(gps_aprs_lat, "0000.00N");
 
	strcpy(gps_aprs_lon, "00000.00E");
 
}
 

	
 
/// MKa GPS transmission parser
 
void parse_gps_transmission(char c){
 
	// i think c is the most recent character of transmission and is constantly 
 
	// tested if terminal character. if terminal then do parse on previous transmission.
 
	 
 
	// $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx
 
	if(c == '\n') //end of transmission sentence. may need more checks
 
	{
 
				
 
	}
 
}
 

	
 
/// process gps transmission 
 
bool gps_decode(char c)
 
{
 
	int ret = false;
 

	
 
	switch(c) {
 
		case '\r':
 
		case '\n': // End of sentence
 
			if (num_tokens && our_checksum == their_checksum) { ///checksum is valid (good transmission)
 
				#ifdef DEBUG_GPS
 
				Serial.print(" (OK!) ");
 
				Serial.print(millis());
 
				#endif
 
				// Return a valid position only when we have two rmc and gga
 
				// messages with the same timestamp.
 
				switch (sentence_type) {
 
					case SENTENCE_UNK:
 
						break;    // Keeps gcc happy
 
					case SENTENCE_GGA:
 
						strcpy(gga_time, new_time);
 
						break;
 
					case SENTENCE_RMC:
 
						strcpy(rmc_time, new_time);
 
						break;
master/master/lib/trackuinoGPS/gps.h
Show inline comments
 
@@ -13,28 +13,35 @@
 
 * You should have received a copy of the GNU General Public License
 
 * along with this program; if not, write to the Free Software
 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 */
 

	
 
#ifndef __GPS_H__
 
#define __GPS_H__
 

	
 
#include <stdint.h>
 
#include <stdlib.h>
 
#include <string.h>
 
#include <stdbool.h>
 

	
 
extern char gps_time[7];       // HHMMSS
 
extern uint32_t gps_seconds;   // seconds after midnight
 
extern char gps_date[7];       // DDMMYY
 
extern float gps_lat;
 
extern float gps_lon;
 
extern char gps_aprs_lat[9];
 
extern char gps_aprs_lon[10];
 
extern float gps_course;
 
extern float gps_speed;
 
extern float gps_altitude;
 

	
 

	
 

	
 
void gps_setup();
 
bool gps_decode(char c);
 

	
 
#endif
 
enum t_sentence_type {
 
	SENTENCE_UNK,
 
	SENTENCE_GGA,
 
	SENTENCE_RMC
 
};
 
\ No newline at end of file
0 comments (0 inline, 0 general)