\qquad 下面是HD-GR GNSS导航软件的BDS B1I星历处理相关定义:
// b1i_ephemeris.h -- Header file for the b1i_ephemeris.c file
/*
* Copyright (C) 2005 Andrew Greenberg
* Distributed under the GNU GENERAL PUBLIC LICENSE (GPL) Version 2 (June 1991).
* See the "COPYING" file distributed with this software for more information.
*/
/* Namuru GPS receiver project
* Original : ephemeris.h
* Modes : None
* version : V1.0
* date : 21st/Dec/2006
*/
/*
* HD-GR GNSS receiver project
* Modes : Inherited the definitions of ephemeris.h and ephemeris.c in the
* Namuru GPS receiver project V1.0 and made necessary adjustments
* to adapt to the new RTOS and functions.
* version : V1.0
* date : xx/xx/2015
*/
#ifndef __B1I_EPHEMERIS_H__
#define __B1I_EPHEMERIS_H__
#include "main_ephemeris.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/*******************************************************************************
* Declarations
******************************************************************************/
typedef struct {
unsigned short prn; // which satellite we're talkin' about
unsigned short valid; // Use me, I'm valid.
unsigned short have_subframe; // 5bits of how many valid subframe we have;
// have all = 0x1F (or 0x7 if no 4/5)
unsigned short iode_new_flag; // new iode flag
// Subframe 1:
unsigned short sath1; // satellite health flag (1bit)
unsigned short iodc; // issue of data, clock (5bit)
unsigned short ura; // user range accuracy index (4bit)
double toc; // reference time: s (max = 604792, 17b * 2^3)
double tgd1; // group delay differential 1: s (2C 10b*10^ -10)
double tgd2; // group delay differential 2: s (2C 10b*10^ -10)
// 64 bits parameters for ionospheric delay model
bc_ion_t ion;
// double alf0; // : s (2C 8b * 2^ -30)
// double alf1; // : s/PI (2C 8b * 2^ -27)
// double alf2; // : s/PI^2 (2C 8b * 2^ -24)
// double alf3; // : s/PI^3 (2C 8b * 2^ -24)
// double bta0; // : s (2C 8b * 2^ +11)
// double bta1; // : s/PI (2C 8b * 2^ +14)
// double bta2; // : s/PI^2 (2C 8b * 2^ +16)
// double bta3; // : s/PI^3 (2C 8b * 2^ +16)
double af2; // Squared term: s (2C 11b * 2^ -66)
double af0; // Constant term: s/s (2C 24b * 2^ -33)
double af1; // Linear term: s/s^2 (2C 22b * 2^ -50)
unsigned short iode; // issue of data, ephemeris (5bit)
// Subframe 2
double dn; // Delta n: mean motion difference: PI/s (2C 16b * 2^-43)
double cuc; // C(uc): COS correction latitude: rad (2C 18b * 2^-31)
double ma; // M(0): mean anomaly: PI (2C 32b * 2^-31)
double ety; // e: eccentricity of orbit (max=0.5, 32b * 2^-33)
double cus; // C(us): SIN correctoin latitude: rad (2C 18b * 2^-31)
double crc; // C(rc): COS correction radius: m (2C 18b * 2^ -6)
double crs; // C(rs): SIN correction radius: m (2C 18b * 2^ -6)
double sqra; // (A)^1/2: sqrt semimajor axis: m^0.5 (32b * 2^-19)
double toe; // T(oe):ephemeris ref. time: s (max=604792, 17b * 2^3)
unsigned long ul_toe;
// Subframe 3: ephemeris
double inc0; // I(0): inclination angle @ ref. : PI (2C 32b * 2^-31)
double cic; // C(ic): COS correction inclination: rad (2C 18b * 2^-31)
double omegadot;// OMEGADOT: rate of right asc. : PI/s (2C 24b * 2^-43)
double cis; // C(is): SIN correction inclination: rad (2C 18b * 2^-31)
double idot; // IDOT: rate of inclination angle: PI/s (2C 14b * 2^-43)
double w0; // Omega(0): longitude of asc. node: PI (2C 32b * 2^-31)
double w; // Omega: arguemnt of perigee: PI (2C 32b * 2^-31)
// D2 nav. message supports
unsigned short have_sf1_page; // 10bits of how many valid page in Subframe 1
// we have, all = 0x3ff
unsigned short iodc_new_flag; // new iodc flag
unsigned long ul_ety;
signed long sl_af1, sl_cuc, sl_cic, sl_inc0, sl_omegadot, sl_w;
} b1i_ephemeris_t;
void b1i_ephemeris_task(OS_FLAGS channels_ready);
void b1i_clear_ephemeris(unsigned short ch);
void b1i_initialize_ephetable( void);
/*******************************************************************************
* Externs
******************************************************************************/
extern b1i_ephemeris_t m_b1i_ephetable[B1I_MAX_SATELLITES];
extern unsigned short m_b1i_new_almanac;
#endif // __B1I_EPHEMERIS_H__