diff --git a/src/input/mpegts/linuxdvb/linuxdvb_rotor.c b/src/input/mpegts/linuxdvb/linuxdvb_rotor.c index 92794b1f..68583ba2 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_rotor.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_rotor.c @@ -17,6 +17,7 @@ * along with this program. If not, see . */ +#ifndef ROTOR_TEST #include "tvheadend.h" #include "linuxdvb_private.h" #include "settings.h" @@ -30,19 +31,47 @@ #include #include +#else /* ROTOR_TEST */ + +#include +#include +#include +#include +#include + +typedef struct { + double ls_site_lat; + double ls_site_lon; + double ls_site_altitude; + int ls_site_lat_south; + int ls_site_lon_west; +} linuxdvb_satconf_t; + +typedef struct { + linuxdvb_satconf_t *lse_parent; +} linuxdvb_satconf_ele_t; + +double gazimuth, gelevation; + +#endif + /* ************************************************************************** * Class definition * *************************************************************************/ typedef struct linuxdvb_rotor { +#ifndef ROTOR_TEST linuxdvb_diseqc_t; +#endif double lr_sat_lon; uint32_t lr_position; } linuxdvb_rotor_t; +#ifndef ROTOR_TEST + static const char * linuxdvb_rotor_class_get_title ( idnode_t *o ) { @@ -100,6 +129,8 @@ const idclass_t linuxdvb_rotor_usals_class = } }; +#endif /* ROTOR_TEST */ + /* * */ @@ -201,10 +232,20 @@ sat_angle( linuxdvb_rotor_t *lr, linuxdvb_satconf_ele_t *ls ) double azimuth, elevation; +#ifndef ROTOR_TEST + tvhtrace("diseqc", "site: lat %.4f, lon %.4f, alt %.4f; sat lon %.4f", + site_lat, site_lon, site_alt, sat_lon); +#endif + sat_azimuth_and_elevation(site_lat, site_lon, site_alt, sat_lon, &azimuth, &elevation); +#ifndef ROTOR_TEST tvhtrace("diseqc", "rotor angle azimuth %.4f elevation %.4f", azimuth, elevation); +#else + gazimuth = azimuth; + gelevation = elevation; +#endif double rad_azimuth = to_radians(azimuth); double rad_elevation = to_radians(elevation); @@ -241,6 +282,8 @@ sat_angle( linuxdvb_rotor_t *lr, linuxdvb_satconf_ele_t *ls ) return ret; } +#ifndef ROTOR_TEST + /* ************************************************************************** * Class methods * *************************************************************************/ @@ -445,6 +488,46 @@ linuxdvb_rotor_destroy ( linuxdvb_diseqc_t *lr ) free(lr); } +#else /* ROTOR_TEST */ + +int main(int argc, char *argv[]) +{ + if (argc < 5) { + fprintf(stderr, "Usage: \n"); + return 1; + } + linuxdvb_rotor_t lr; + linuxdvb_satconf_t ls; + linuxdvb_satconf_ele_t lse; + int angle; + + memset(&lr, 0, sizeof(lr)); + memset(&ls, 0, sizeof(ls)); + memset(&lse, 0, sizeof(lse)); + + lse.lse_parent = &ls; + + ls.ls_site_lat = atof(argv[1]); + ls.ls_site_lon = atof(argv[2]); + ls.ls_site_altitude = atof(argv[3]); + lr.lr_sat_lon = atof(argv[4]); + + angle = sat_angle(&lr, &lse); + + printf("Input values:\n"); + printf(" %20s: %.4f\n", "Site Latidude", ls.ls_site_lat); + printf(" %20s: %.4f\n", "Site Longtitude", ls.ls_site_lon); + printf(" %20s: %.4f\n", "Site Altitude", ls.ls_site_altitude); + printf(" %20s: %.4f\n", "Satellite Longtitude", lr.lr_sat_lon); + printf("\nResult:\n"); + printf(" %20s: %.4f\n", "Azimuth", gazimuth); + printf(" %20s: %.4f\n", "Elevation", gelevation); + printf(" %20s: %.1f %sclockwise\n", "Angle", (double)abs(angle) / 10.0, angle < 0 ? "counter-" : ""); + return 0; +} + +#endif + /****************************************************************************** * Editor Configuration *