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;
}
|