-
Notifications
You must be signed in to change notification settings - Fork 50
/
almanac.h
50 lines (42 loc) · 2 KB
/
almanac.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* multi-sdr-gps-sim generates a IQ data stream on-the-fly to simulate a
* GPS L1 baseband signal using a SDR platform like HackRF or ADLAM-Pluto.
*
* This file is part of the Github project at
* https://github.com/mictronics/multi-sdr-gps-sim.git
*
* Copyright © 2021 Mictronics
* Distributed under the MIT License.
*
*/
#ifndef ALMANAC_H
#define ALMANAC_H
#include <curl/curl.h>
#include "gps.h"
#define ALMANAC_DOWNLOAD_SEM_URL "https://www.celestrak.com/GPS/almanac/SEM/almanac.sem.txt"
typedef struct {
unsigned char ura; // User Range Accuracy lookup code, [0-15], see p. 91 IS-GPS-200L, 0 <2.4m, 15 is >6144m
unsigned char health; // 0=healthy, unhealthy otherwise [], subframe 4 and 5, page 25 six-bit health code
unsigned char config_code; // configuration code [], if >=9 Anti-Spoofing is on
unsigned short svid; // GPS SV id or prn number 1-32 []
unsigned short svn; // Satellite vehicle number []
unsigned int valid; // Validity of this almanac
double e; // eccentricity []
double delta_i; // orbital inclination at reference time [rad]
double omegadot; // rate of right ascension [rad/s]
double sqrta; // square root of the semi-major axis [m^(1/2)]
double omega0; // longitude of ascending node of orbit plane at weekly epoch [rad]
double aop; // argument of perigee [rad]
double m0; // mean anomaly at reference time [rad]
double af0; // polynomial clock correction coefficient (clock bias) [s], Note: parameters from ephemeris preferred vs almanac (22 vs 11 bits)
double af1; // polynomial clock correction coefficient (clock drift) [s/s], Note: parameters from ephemeris preferred vs almanac (16 vs 11 bits)
gpstime_t toa; // almanac time of applicability (reference time) [s]
} almanac_prn_t;
typedef struct {
unsigned int valid; // Almanac validity
almanac_prn_t sv[MAX_SAT]; // 32 SV's almanac
} almanac_gps_t;
almanac_gps_t* almanac_init(void);
CURLcode almanac_read_file(void);
CURLcode almanac_download(void);
#endif /* ALMANAC_H */