2001-12-27 22:01:34 +00:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Very simple test program to check locator convertion against some other --SF
|
|
|
|
|
* This is mainly to test longlat2locator and locator2longlat functions.
|
|
|
|
|
*
|
|
|
|
|
* Takes at least one argument, which is a locator.
|
|
|
|
|
* If two locators are given, then the qrb is also calculated.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <hamlib/rotator.h>
|
|
|
|
|
|
|
|
|
|
|
2003-08-21 03:11:27 +00:00
|
|
|
|
int main (int argc, char *argv[]) {
|
|
|
|
|
char recodedloc[13], *loc1, *loc2;
|
2003-08-19 21:28:22 +00:00
|
|
|
|
double lon1 = 0, lat1, lon2, lat2;
|
2003-09-11 01:04:14 +00:00
|
|
|
|
double distance, az, min, sec;
|
|
|
|
|
float deg;
|
2003-08-21 20:22:06 +00:00
|
|
|
|
int retcode, locator_length;
|
2001-12-27 22:01:34 +00:00
|
|
|
|
|
2003-08-21 20:22:06 +00:00
|
|
|
|
if (argc < 3) {
|
|
|
|
|
fprintf(stderr, "Usage: %s <locator1> <precision> [<locator2>]\n", argv[0]);
|
2003-08-19 21:28:22 +00:00
|
|
|
|
exit(1);
|
2001-12-27 22:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
loc1 = argv[1];
|
2003-08-21 20:22:06 +00:00
|
|
|
|
locator_length = atoi(argv[2]);
|
|
|
|
|
loc2 = argc > 3 ? argv[3] : NULL;
|
2001-12-27 22:01:34 +00:00
|
|
|
|
|
|
|
|
|
printf("Locator1: %s\n", loc1);
|
2002-08-22 23:42:20 +00:00
|
|
|
|
retcode = locator2longlat(&lon1, &lat1, loc1);
|
2003-08-19 21:28:22 +00:00
|
|
|
|
if (retcode != RIG_OK) {
|
|
|
|
|
fprintf(stderr, "locator2longlat() failed with malformed input.\n");
|
|
|
|
|
exit(2);
|
|
|
|
|
}
|
2002-08-22 23:42:20 +00:00
|
|
|
|
|
2001-12-27 22:01:34 +00:00
|
|
|
|
dec2dms(lon1, °, &min, &sec);
|
2003-09-11 01:04:14 +00:00
|
|
|
|
printf(" Longitude: %f, %.0f<EFBFBD> %.0f' %.2f\"\n", lon1, deg, min, sec);
|
2002-08-22 23:42:20 +00:00
|
|
|
|
lon1 = dms2dec(deg, min, sec);
|
|
|
|
|
printf(" Recoded lon: %f\n", lon1);
|
|
|
|
|
|
2001-12-27 22:01:34 +00:00
|
|
|
|
dec2dms(lat1, °, &min, &sec);
|
2003-09-11 01:04:14 +00:00
|
|
|
|
printf(" Latitude: %f, %.0f<EFBFBD> %.0f' %.2f\"\n", lat1, deg, min, sec);
|
2002-08-22 23:42:20 +00:00
|
|
|
|
lat1 = dms2dec(deg, min, sec);
|
|
|
|
|
printf(" Recoded lat: %f\n", lat1);
|
|
|
|
|
|
2003-08-21 20:37:10 +00:00
|
|
|
|
retcode = longlat2locator(lon1, lat1, recodedloc, locator_length);
|
|
|
|
|
if (retcode != RIG_OK) {
|
|
|
|
|
fprintf(stderr, "longlat2locator() failed, precision out of range.\n");
|
|
|
|
|
exit(2);
|
|
|
|
|
}
|
2001-12-27 22:01:34 +00:00
|
|
|
|
printf(" Recoded: %s\n", recodedloc);
|
|
|
|
|
|
|
|
|
|
if (loc2 == NULL)
|
2003-08-21 20:22:06 +00:00
|
|
|
|
exit(0);
|
2001-12-27 22:01:34 +00:00
|
|
|
|
|
|
|
|
|
printf("\nLocator2: %s\n", loc2);
|
2002-08-22 23:42:20 +00:00
|
|
|
|
retcode = locator2longlat(&lon2, &lat2, loc2);
|
2003-08-19 21:28:22 +00:00
|
|
|
|
if (retcode != RIG_OK) {
|
|
|
|
|
fprintf(stderr, "locator2longlat() failed with malformed input.\n");
|
|
|
|
|
exit(2);
|
|
|
|
|
}
|
2002-08-22 23:42:20 +00:00
|
|
|
|
|
2001-12-27 22:01:34 +00:00
|
|
|
|
dec2dms(lon2, °, &min, &sec);
|
2003-09-11 01:04:14 +00:00
|
|
|
|
printf(" Longitude: %f, %.0f<EFBFBD> %.0f' %.2f\"\n", lon2, deg, min, sec);
|
2002-08-22 23:42:20 +00:00
|
|
|
|
lon2 = dms2dec(deg, min, sec);
|
|
|
|
|
printf(" Recoded lon: %f\n", lon2);
|
|
|
|
|
|
2001-12-27 22:01:34 +00:00
|
|
|
|
dec2dms(lat2, °, &min, &sec);
|
2003-09-11 01:04:14 +00:00
|
|
|
|
printf(" Latitude: %f, %.0f<EFBFBD> %.0f' %.2f\"\n", lat2, deg, min, sec);
|
2002-08-22 23:42:20 +00:00
|
|
|
|
lat2 = dms2dec(deg, min, sec);
|
|
|
|
|
printf(" Recoded lat: %f\n", lat2);
|
|
|
|
|
|
2003-08-21 20:37:10 +00:00
|
|
|
|
retcode = longlat2locator(lon2, lat2, recodedloc, locator_length);
|
|
|
|
|
if (retcode != RIG_OK) {
|
|
|
|
|
fprintf(stderr, "longlat2locator() failed, precision out of range.\n");
|
|
|
|
|
exit(2);
|
|
|
|
|
}
|
2001-12-27 22:01:34 +00:00
|
|
|
|
printf(" Recoded: %s\n", recodedloc);
|
|
|
|
|
|
2002-08-22 23:42:20 +00:00
|
|
|
|
retcode = qrb(lon1, lat1, lon2, lat2, &distance, &az);
|
2001-12-27 22:01:34 +00:00
|
|
|
|
if (retcode != 0) {
|
2003-08-21 20:37:10 +00:00
|
|
|
|
fprintf(stderr, "QRB error: %d\n", retcode);
|
|
|
|
|
exit(2);
|
2001-12-27 22:01:34 +00:00
|
|
|
|
}
|
|
|
|
|
dec2dms(az, °, &min, &sec);
|
2002-08-22 23:42:20 +00:00
|
|
|
|
printf("\nDistance: %.2fkm\n", distance);
|
2003-09-11 01:04:14 +00:00
|
|
|
|
printf("Bearing: %f, %.0f<EFBFBD> %.0f' %.2f\"\n", az, deg, min, sec);
|
2001-12-27 22:01:34 +00:00
|
|
|
|
|
2003-08-21 20:37:10 +00:00
|
|
|
|
exit(0);
|
2001-12-27 22:01:34 +00:00
|
|
|
|
}
|