1 #ifndef __SATLIB_H
2 #define __SATLIB_H
3 
4 /* $Id: satlib.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */
5 
6 typedef struct _SatElem {
7     float  se_XMO;
8     float  se_XNODEO;
9     float  se_OMEGAO;
10     float  se_EO;
11     float  se_XINCL;
12     float  se_XNDD60;
13     float  se_BSTAR;
14     float  pad1;
15     double se_XNO;
16     double se_XNDT20;
17     double se_EPOCH;
18     struct {
19 	unsigned int catno	: 21;
20 	unsigned int classif	: 5;
21 	unsigned int elnum	: 10;
22 	unsigned int year	: 14;
23 	unsigned int launch	: 10;
24 	unsigned int piece	: 15;
25 	unsigned int ephtype	: 4;
26 	unsigned int orbit	: 17;
27     } se_id;
28 } SatElem;
29 
30 #if 0
31 struct sat_loc {
32     double sl_X;
33     double sl_XDOT;
34     double sl_Y;
35     double sl_YDOT;
36     double sl_Z;
37     double sl_ZDOT;
38 };
39 #endif
40 
41 struct sgp4_data {
42     unsigned int sgp4_flags;
43     unsigned int pad;
44     double sgp4_AODP;
45     double sgp4_AYCOF;
46     double sgp4_C1;
47     double sgp4_C4;
48     double sgp4_C5;
49     double sgp4_COSIO;
50     double sgp4_D2;
51     double sgp4_D3;
52     double sgp4_D4;
53     double sgp4_DELMO;
54     double sgp4_ETA;
55     double sgp4_OMGCOF;
56     double sgp4_OMGDOT;
57     double sgp4_SINIO;
58     double sgp4_SINMO;
59     double sgp4_T2COF;
60     double sgp4_T3COF;
61     double sgp4_T4COF;
62     double sgp4_T5COF;
63     double sgp4_X1MTH2;
64     double sgp4_X3THM1;
65     double sgp4_X7THM1;
66     double sgp4_XLCOF;
67     double sgp4_XMCOF;
68     double sgp4_XMDOT;
69     double sgp4_XNODCF;
70     double sgp4_XNODOT;
71     double sgp4_XNODP;
72 };
73 
74 struct deep_data {
75     struct {
76 	unsigned int IRESFL : 1;
77 	unsigned int ISYNFL : 1;
78     } deep_flags;
79     double deep_s_SINIQ;
80     double deep_s_COSIQ;
81     double deep_s_OMGDT;
82     double deep_ATIME;
83     double deep_D2201;
84     double deep_D2211;
85     double deep_D3210;
86     double deep_D3222;
87     double deep_D4410;
88     double deep_D4422;
89     double deep_D5220;
90     double deep_D5232;
91     double deep_D5421;
92     double deep_D5433;
93     double deep_DEL1;
94     double deep_DEL2;
95     double deep_DEL3;
96     double deep_E3;
97     double deep_EE2;
98     double deep_FASX2;
99     double deep_FASX4;
100     double deep_FASX6;
101     double deep_OMEGAQ;
102     double deep_PE;
103     double deep_PINC;
104     double deep_PL;
105     double deep_SAVTSN;
106     double deep_SE2;
107     double deep_SE3;
108     double deep_SGH2;
109     double deep_SGH3;
110     double deep_SGH4;
111     double deep_SGHL;
112     double deep_SGHS;
113     double deep_SH2;
114     double deep_SH3;
115     double deep_SHS;
116     double deep_SHL;
117     double deep_SI2;
118     double deep_SI3;
119     double deep_SL2;
120     double deep_SL3;
121     double deep_SL4;
122     double deep_SSE;
123     double deep_SSG;
124     double deep_SSH;
125     double deep_SSI;
126     double deep_SSL;
127     double deep_STEP2;
128     double deep_STEPN;
129     double deep_STEPP;
130     double deep_THGR;
131     double deep_XFACT;
132     double deep_XGH2;
133     double deep_XGH3;
134     double deep_XGH4;
135     double deep_XH2;
136     double deep_XH3;
137     double deep_XI2;
138     double deep_XI3;
139     double deep_XL2;
140     double deep_XL3;
141     double deep_XL4;
142     double deep_XLAMO;
143     double deep_XLI;
144     double deep_XNI;
145     double deep_XNQ;
146     double deep_XQNCL;
147     double deep_ZMOL;
148     double deep_ZMOS;
149 };
150 
151 struct sdp4_data {
152     double sdp4_AODP;	/* dpa */
153     double sdp4_AYCOF;
154     double sdp4_BETAO;	/* dpa */
155     double sdp4_BETAO2;	/* dpa */
156     double sdp4_C1;
157     double sdp4_C4;
158     double sdp4_COSG;	/* dpa */
159     double sdp4_COSIO;	/* dpa */
160     double sdp4_EOSQ;	/* dpa */
161     double sdp4_OMGDOT;	/* dpa */
162     double sdp4_SING;	/* dpa */
163     double sdp4_SINIO;	/* dpa */
164     double sdp4_T2COF;
165     double sdp4_THETA2;	/* dpa */
166     double sdp4_X1MTH2;
167     double sdp4_X3THM1;
168     double sdp4_X7THM1;
169     double sdp4_XLCOF;
170     double sdp4_XMDOT;	/* dpa */
171     double sdp4_XNODCF;
172     double sdp4_XNODOT;	/* dpa */
173     double sdp4_XNODP;	/* dpa */
174 
175     double sdp4_XMDF_seco;
176     double sdp4_OMGADF_seco;
177     double sdp4_XNODE_seco;
178     double sdp4_EM_seco;
179     double sdp4_XINC_seco;
180     double sdp4_XN_seco;
181 
182     double sdp4_E_pero;
183     double sdp4_XINC_pero;
184     double sdp4_OMGADF_pero;
185     double sdp4_XNODE_pero;
186     double sdp4_XMAM_pero;
187 };
188 
189 typedef struct _SatData {
190     struct _SatElem *elem;
191     union {
192 	struct sgp4_data *sgp4;
193 	struct sdp4_data *sdp4;
194     } prop;
195     struct deep_data *deep;
196 } SatData;
197 
198 void sgp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double t);
199 
200 void sdp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double TSINCE);
201 
202 #endif /* __SATLIB_H */
203 
204