[Firebug-cvs] fireboard/apps/TestNMEA .cvsignore,NONE,1.1 Makefile,NONE,1.1 NMEAC.nc,NONE,1.1 NMEAM.
Brought to you by:
doolin
From: David M. D. <do...@us...> - 2004-08-30 20:39:31
|
Update of /cvsroot/firebug/fireboard/apps/TestNMEA In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21465 Added Files: .cvsignore Makefile NMEAC.nc NMEAM.nc TestNMEA.nc TestNMEAM.nc Log Message: Added a test for gga parsing. --- NEW FILE: .cvsignore --- build *~ --- NEW FILE: NMEAC.nc --- /** * Configuration for NMEA - 0183 parser. */ configuration NMEAC { provides interface NMEA; } implementation { components NMEAM; NMEA = NMEAM; } --- NEW FILE: TestNMEA.nc --- configuration TestNMEA { } implementation { components Main, NMEAC, TestNMEAM; Main.StdControl -> TestNMEAM; TestNMEAM.nmea -> NMEAC; } --- NEW FILE: Makefile --- COMPONENT=TestNMEA MTS420CA = $(HOME)/sf.net/firebug/fireboard FIREBOARD_PATH = -I$(MTS420CA)/interfaces/ FIREBOARD_PATH += -I$(MTS420CA)/sensors/leadtek9546 LOCAL_PATH += $(FIREBOARD_PATH) PFLAGS := $(LOCAL_PATH) $(PFLAGS) #$(LOCAL_DEFINES) include $(TOSROOT)/apps/Makerules --- NEW FILE: NMEAM.nc --- /** * Module for parsing NMEA - 0183 sentences. * * @author David M. Doolin */ #define extract_num_sats_m(data) (10*(data[0]-'0') + (data[1]-'0')) #define extract_hours_m(data) (10*(data[0]-'0') + (data[1]-'0')) #define extract_minutes_m(data) (10*(data[2]-'0') + (data[3]-'0')) #define extract_dec_sec_m(data) (10*(data[4]-'0') + (data[5]-'0') + 0.1*(data[7]-'0') \ + 0.01*(data[8]-'0') \ + 0.001*(data[9]-'0')) #define extract_Lat_deg_m(data) (10*(data[0]-'0') + (data[1]-'0')) #define extract_Lat_dec_min_m(data) (10*(data[2]-'0') + (data[3]-'0') + 0.1*(data[5]-'0') \ + 0.01*(data[6]-'0') + 0.001*(data[7]-'0') + 0.0001*(data[8]-'0')) #define extract_Long_deg_m(data) (100*(data[0]-'0') + 10*(data[1]-'0') + (data[2]-'0')) #define extract_Long_dec_min_m(data) (10*(data[3]-'0') + (data[4]-'0') + 0.1*(data[6]-'0') \ + 0.01*(data[7]-'0') + 0.001*(data[8]-'0') + 0.0001*(data[9]-'0')) #define NS_m(foo) ((foo[28]=='N') ? 1 : 0) #define EW_m(foo) ((foo[41]=='W') ? 1 : 0) #define extract_NSEWind_m(foo) ((EW_m(foo)) | ((NS_m(foo))<<4)) includes nmea_parse; module NMEAM { provides interface NMEA; } implementation { command uint8_t NMEA.get_type (const char * nmeastring) { return 0; } command result_t NMEA.gga_parse (GGA_Data * ggad, const char * gga_string) { int i = 0; int numcommas = 0; int numsats = 0; const char * data; while (numcommas < 7) { if (gga_string[i] == ',') { numcommas++; } i++; } data = &gga_string[i]; numsats = extract_num_sats_m(data); if (numsats < 4) { return FAIL; } ggad->num_sats = numsats; data = &gga_string[7]; ggad->hours = extract_hours_m(data); ggad->minutes = extract_minutes_m(data); ggad->dec_sec = extract_dec_sec_m(data); data = &gga_string[18]; ggad->Lat_deg = extract_Lat_deg_m(data); ggad->Lat_dec_min = extract_Lat_dec_min_m(data); data = &gga_string[30]; ggad->Long_deg = extract_Long_deg_m(data); ggad->Long_dec_min = extract_Long_dec_min_m(data); ggad->NSEWind = extract_NSEWind_m(gga_string); return SUCCESS; } command result_t NMEA.gll_parse (GLL_Data * gll_data, const char * gll_string) { return FAIL; } command result_t NMEA.gsa_parse (GSA_Data * gsa_data, const char * gsa_string) { return FAIL; } command result_t NMEA.gsv_parse (GSV_Data * gsv_data, const char * gsv_string) { return FAIL; } command result_t NMEA.rmc_parse (RMC_Data * rmc_data, const char * rmc_string) { return FAIL; } command result_t NMEA.vtg_parse (VTG_Data * vtg_data, const char * vtg_string) { return FAIL; } command result_t NMEA.mss_parse (MSS_Data * mss_data, const char * mss_string) { return FAIL; } } --- NEW FILE: TestNMEAM.nc --- includes nmea_parse; module TestNMEAM { provides interface StdControl; uses { interface NMEA as nmea; } } implementation { #define SO_DEBUG 1 #include "SODebug.h" #define DBG_USR2 1 const char gga_string[] = {"$GPGGA,231622.994,3751.3086,N,12216.5235,W,1,09,1.1,-4.5,M,,,,0000*30"}; const char gll_string[] = {"$GPGLL,3723.2475,N,12158.3416,W,161229.487,A*2C"}; const char gsa_string[] = {"$GPGSA,A,3,07,02,26,27,09,04,15,,,,,,1.8,1.0,1.5*33"}; const char gsv_string1[] = {"$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42,*71"}; const char gsv_string2[] = {"$GPGSV,2,2,07,09,23,313,42,04,19,159,41,15,12,041,42,*41"}; const char mss_string[] = {"$GPMSS,55,27,318.0,100,*66"}; const char vtg_string[] = {"$GPVTG,309.62,T,,M,0.13,N,0.2,K*6E"}; command result_t StdControl.init() { init_debug(); return SUCCESS; } command result_t StdControl.start() { // Default test passes. uint8_t result = 1; GGA_Data gga_data; call nmea.gga_parse(&gga_data, gga_string); // If anyone of the following is incorrect, return FAIL; result *= (gga_data.hours == 23); result *= (gga_data.minutes == 16); result *= (gga_data.dec_sec == 22.994); result *= (gga_data.Lat_deg == 37); result *= (gga_data.Lat_dec_min == 51.3086); result *= (gga_data.Long_deg == 122); result *= (gga_data.Long_dec_min == 16.5235); result *= (gga_data.NSEWind == 17); result *= (gga_data.num_sats == 9); return result; } command result_t StdControl.stop() { return SUCCESS; } } |