#include #include #include int main (int argc, char **argv) { int status, used, visible; struct gps_data_t gpsdata; #define OID_VISIBLE ".1.3.6.1.2.1.25.1.31" #define OID_USED ".1.3.6.1.2.1.25.1.32" #define OID_SNR_AVG ".1.3.6.1.2.1.25.1.33" if ((argc > 2) && (strcmp ("-g", argv[1]) == 0)) { status = gps_open (GPSD_SHARED_MEMORY, DEFAULT_GPSD_PORT, &gpsdata); status = gps_read (&gpsdata); used = gpsdata.satellites_used; visible = gpsdata.satellites_visible; int i; double snr_total=0; for(i=0;i<=used;i++) { if (gpsdata.skyview[i].used> 0 && gpsdata.skyview[i].ss > 1) { // printf("i: %d, P:%d, ss: %f\n", i, gpsdata.PRN[i], gpsdata.ss[i]); snr_total+=gpsdata.skyview[i].ss; } } gps_close (&gpsdata); double snr_avg = 0.0; if (used > 0) { snr_avg = snr_total / used; } if (strcmp (OID_VISIBLE, argv[2]) == 0) { printf (OID_VISIBLE); printf ("\n"); printf ("gauge\n"); printf ("%d\n", visible); } if (strcmp (OID_USED, argv[2]) == 0) { printf (OID_USED); printf ("\n"); printf ("gauge\n"); printf ("%d\n", used); } if (strcmp (OID_SNR_AVG, argv[2]) == 0) { printf (OID_SNR_AVG); printf ("\n"); printf ("gauge\n"); printf ("%lf\n", snr_avg); } } return 0; }