[Firebug-cvs] fireboard/sensors/leadtek9546 gsaparse.c,NONE,1.1
Brought to you by:
doolin
From: David M. D. <do...@us...> - 2004-08-30 17:03:47
|
Update of /cvsroot/firebug/fireboard/sensors/leadtek9546 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7003 Added Files: gsaparse.c Log Message: nmea parsing code written in c added to enable testing of functionality when the c code implemented in nesc. --- NEW FILE: gsaparse.c --- #include <stdio.h> #include <stdlib.h> #include <memory.h> #include "nmea_parse.h" #include "leadtek_9546.h" GSA_Data * nmea_gsa_new(void) { GSA_Data * gsa_data; gsa_data = (GSA_Data*)malloc(sizeof(GSA_Data)); memset(gsa_data,0x0,sizeof(GSA_Data)); return gsa_data; } void nmea_gsa_delete(GSA_Data * gsa_data) { memset((void*)gsa_data,0xdd,sizeof(GSA_Data)); free(gsa_data); } void nmea_gsa_print(const GSA_Data * gsa_data) { int i; printf("Mode1: %c\n",gsa_data->mode1); printf("Mode2: %d\n",gsa_data->mode2); for (i=0; i<12; i++) { printf("Sat %d: %d\n",i,gsa_data->sat_used[i]); } printf("PDOP: %f\n",gsa_data->PDOP); printf("HDOP: %f\n",gsa_data->HDOP); printf("VDOP: %f\n",gsa_data->VDOP); } #define extract_mode2_m(data) (data[0] - '0') #define find_next_field_m(foo) while (*foo != ',')foo++;foo++ #define extract_sat_number_m(foo) (10*(foo[0]-'0') + (foo[1]-'0')) #define extract_DOP_m(foo) ((foo[0]-'0') + (0.1*(foo[2]-'0'))) GSA_Data * nmea_gsa_parse(const char * gsa_string) { int i; GSA_Data * gsa_data = nmea_gsa_new(); const char * p = gsa_string; find_next_field_m(p); gsa_data->mode1 = *p; find_next_field_m(p); gsa_data->mode2 = *p - '0'; for (i=0; i<12; i++) { find_next_field_m(p); //printf("current char: %c\n",*p); if (*p != ',') { gsa_data->sat_used[i] = extract_sat_number_m(p); } else { gsa_data->sat_used[i] = 0; } } find_next_field_m(p); gsa_data->PDOP = extract_DOP_m(p); find_next_field_m(p); gsa_data->HDOP = extract_DOP_m(p); find_next_field_m(p); gsa_data->VDOP = extract_DOP_m(p); return gsa_data; } |