Satellite Observers Workbench. NOT yet complete, just published for forum posters to \"cherry pick\" pieces of code as requiered as an example.
Diff: sgp4sdp4/sgp4sdp4.h
- Revision:
- 0:0a841b89d614
diff -r 000000000000 -r 0a841b89d614 sgp4sdp4/sgp4sdp4.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sgp4sdp4/sgp4sdp4.h Mon Oct 11 10:34:55 2010 +0000 @@ -0,0 +1,237 @@ +/* + * kelso.h April 9 2001 + * + * Header file for kelso + */ + +#ifndef KELSO_H +#define KELSO_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +#include <math.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <time.h> +/* #include <unistd.h> */ + +/* from David Kaelbling <drk@sgi.com> */ +#define select duplicate_select +//#include <unistd.h> +#undef select + + + +/** Type definitions **/ + +/* Two-line-element satellite orbital data */ +typedef struct +{ + double + epoch, xndt2o, xndd6o, bstar, + xincl, xnodeo, eo, omegao, xmo, xno; + int + catnr, /* Catalogue Number */ + elset, /* Element Set */ + revnum; /* Revolution Number */ + char + sat_name[25], /* Satellite name string */ + idesg[9]; /* International Designator */ + /* values needed for squint calculations */ + double xincl1, xnodeo1, omegao1; +} tle_t; + + +/* Geodetic position structure */ +typedef struct +{ + double + lat, lon, alt, theta; +} geodetic_t; + +/* General three-dimensional vector structure */ +typedef struct +{ + double + x, y, z, w; +} vector_t; + +/* Common arguments between deep-space functions */ +typedef struct +{ + /* Used by dpinit part of Deep() */ + double + eosq,sinio,cosio,betao,aodp,theta2,sing,cosg, + betao2,xmdot,omgdot,xnodot,xnodp; + /* Used by dpsec and dpper parts of Deep() */ + double + xll,omgadf,xnode,em,xinc,xn,t; + /* Used by thetg and Deep() */ + double + ds50; +} deep_arg_t; + +/** Table of constant values **/ +#define de2ra 1.74532925E-2 /* Degrees to Radians */ +#define pi 3.1415926535898 /* Pi */ +#define pio2 1.5707963267949 /* Pi/2 */ +#define x3pio2 4.71238898 /* 3*Pi/2 */ +#define twopi 6.2831853071796 /* 2*Pi */ +#define e6a 1.0E-6 +#define tothrd 6.6666667E-1 /* 2/3 */ +#define xj2 1.0826158E-3 /* J2 Harmonic */ +#define xj3 -2.53881E-6 /* J3 Harmonic */ +#define xj4 -1.65597E-6 /* J4 Harmonic */ +#define xke 7.43669161E-2 +#define xkmper 6.378135E3 /* Earth radius km */ +#define xmnpda 1.44E3 /* Minutes per day */ +#define ae 1.0 +#define ck2 5.413079E-4 +#define ck4 6.209887E-7 +#define __f 3.352779E-3 +#define ge 3.986008E5 +#define __s__ 1.012229 +#define qoms2t 1.880279E-09 +#define secday 8.6400E4 /* Seconds per day */ +#define omega_E 1.0027379 +#define omega_ER 6.3003879 +#define zns 1.19459E-5 +#define c1ss 2.9864797E-6 +#define zes 1.675E-2 +#define znl 1.5835218E-4 +#define c1l 4.7968065E-7 +#define zel 5.490E-2 +#define zcosis 9.1744867E-1 +#define zsinis 3.9785416E-1 +#define zsings -9.8088458E-1 +#define zcosgs 1.945905E-1 +#define zcoshs 1 +#define zsinhs 0 +#define q22 1.7891679E-6 +#define q31 2.1460748E-6 +#define q33 2.2123015E-7 +#define g22 5.7686396 +#define g32 9.5240898E-1 +#define g44 1.8014998 +#define g52 1.0508330 +#define g54 4.4108898 +#define root22 1.7891679E-6 +#define root32 3.7393792E-7 +#define root44 7.3636953E-9 +#define root52 1.1428639E-7 +#define root54 2.1765803E-9 +#define thdt 4.3752691E-3 +#define rho 1.5696615E-1 +#define mfactor 7.292115E-5 +#define __sr__ 6.96000E5 /*Solar radius - kilometers (IAU 76)*/ +#define SGPAU 1.49597870E8 /*Astronomical unit - kilometers (IAU 76)*/ + +/* Entry points of Deep() */ +#define dpinit 1 /* Deep-space initialization code */ +#define dpsec 2 /* Deep-space secular code */ +#define dpper 3 /* Deep-space periodic code */ + +/* Carriage return and line feed */ +#define CR 0x0A +#define LF 0x0D + +/* Flow control flag definitions */ +#define ALL_FLAGS -1 +#define SGP_INITIALIZED_FLAG 0x000001 +#define SGP4_INITIALIZED_FLAG 0x000002 +#define SDP4_INITIALIZED_FLAG 0x000004 +#define SGP8_INITIALIZED_FLAG 0x000008 +#define SDP8_INITIALIZED_FLAG 0x000010 +#define SIMPLE_FLAG 0x000020 +#define DEEP_SPACE_EPHEM_FLAG 0x000040 +#define LUNAR_TERMS_DONE_FLAG 0x000080 +#define NEW_EPHEMERIS_FLAG 0x000100 +#define DO_LOOP_FLAG 0x000200 +#define RESONANCE_FLAG 0x000400 +#define SYNCHRONOUS_FLAG 0x000800 +#define EPOCH_RESTART_FLAG 0x001000 +#define VISIBLE_FLAG 0x002000 +#define SAT_ECLIPSED_FLAG 0x004000 + + +/** Funtion prototypes **/ + +/* main.c */ +/* int main(void); */ +/* sgp4sdp4.c */ +void SGP4(double tsince, tle_t *tle, vector_t *pos, vector_t *vel, double* phase); +void SDP4(double tsince, tle_t *tle, vector_t *pos, vector_t *vel, double* phase); +void Deep(int ientry, tle_t *tle, deep_arg_t *deep_arg); +int isFlagSet(int flag); +int isFlagClear(int flag); +void SetFlag(int flag); +void ClearFlag(int flag); +/* sgp_in.c */ +int Checksum_Good(char *tle_set); +int Good_Elements(char *tle_set); +void Convert_Satellite_Data(char *tle_set, tle_t *tle); +int Get_Next_Tle_Set( char lines[3][80], tle_t *tle ); +void select_ephemeris(tle_t *tle); +/* sgp_math.c */ +int Sign(double arg); +double Sqr(double arg); +double Cube(double arg); +double Radians(double arg); +double Degrees(double arg); +double ArcSin(double arg); +double ArcCos(double arg); +void SgpMagnitude(vector_t *v); +void Vec_Add(vector_t *v1, vector_t *v2, vector_t *v3); +void Vec_Sub(vector_t *v1, vector_t *v2, vector_t *v3); +void Scalar_Multiply(double k, vector_t *v1, vector_t *v2); +void Scale_Vector(double k, vector_t *v); +double Dot(vector_t *v1, vector_t *v2); +double Angle(vector_t *v1, vector_t *v2); +void Cross(vector_t *v1, vector_t *v2, vector_t *v3); +void Normalize(vector_t *v); +double AcTan(double sinx, double cosx); +double FMod2p(double x); +double Modulus(double arg1, double arg2); +double Frac(double arg); +int Round(double arg); +double Int(double arg); +void Convert_Sat_State(vector_t *pos, vector_t *vel); +/* sgp_obs.c */ +void Calculate_User_PosVel(double _time, geodetic_t *geodetic, + vector_t *obs_pos, vector_t *obs_vel); +void Calculate_LatLonAlt(double _time, vector_t *pos, geodetic_t *geodetic); +void Calculate_Obs(double _time, vector_t *pos, vector_t *vel, + geodetic_t *geodetic, vector_t *obs_set); +void Calculate_RADec(double _time, vector_t *pos, vector_t *vel, + geodetic_t *geodetic, vector_t *obs_set); +/* sgp_time.c */ +double Julian_Date_of_Epoch(double epoch); +double Epoch_Time(double jd); +int DOY(int yr, int mo, int dy); +double Fraction_of_Day(int hr, int mi, int se); +void Calendar_Date(double jd, struct tm *cdate); +void Time_of_Day(double jd, struct tm *cdate); +double Julian_Date(struct tm *cdate); +void Date_Time(double jd, struct tm *cdate); +int Check_Date(struct tm *cdate); +struct tm Time_to_UTC(struct tm *cdate); +struct tm Time_from_UTC(struct tm *cdate); +double JD_to_UTC(double jt); +double JD_from_UTC(double jt); +double Delta_ET(double year); +double Julian_Date_of_Year(double year); +double ThetaG(double epoch, deep_arg_t *deep_arg); +double ThetaG_JD(double jd); +void UTC_Calendar_Now(struct tm *cdate); +/* solar.c */ +void Calculate_Solar_Position(double _time, vector_t *solar_vector); +int Sat_Eclipsed(vector_t *pos, vector_t *sol, double *depth); + +#ifdef __cplusplus +} +#endif + +#endif