rinex.h

Go to the documentation of this file.
00001 /**
00002 \file    rinex.h
00003 \brief   GNSS core 'c' function library: RINEX VERSION 2.11 related functions.
00004 \author  Glenn D. MacGougan (GDM)
00005 \date    2007-12-02
00006 \since   2007-12-02
00007 
00008 \b REFERENCES \n
00009 - - http://www.aiub-download.unibe.ch/rinex/rinex211.txt
00010 
00011 \b "LICENSE INFORMATION" \n
00012 Copyright (c) 2007, refer to 'author' doxygen tags \n
00013 All rights reserved. \n
00014 
00015 Redistribution and use in source and binary forms, with or without
00016 modification, are permitted provided the following conditions are met: \n
00017 
00018 - Redistributions of source code must retain the above copyright
00019   notice, this list of conditions and the following disclaimer. \n
00020 - Redistributions in binary form must reproduce the above copyright
00021   notice, this list of conditions and the following disclaimer in the
00022   documentation and/or other materials provided with the distribution. \n
00023 - The name(s) of the contributor(s) may not be used to endorse or promote 
00024   products derived from this software without specific prior written 
00025   permission. \n
00026 
00027 THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS 
00028 OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
00029 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00030 DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
00031 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00032 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
00033 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
00034 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
00035 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
00036 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
00037 SUCH DAMAGE.
00038 */
00039 
00040 #ifndef _RINEX_H_
00041 #define _RINEX_H_
00042 
00043 #ifdef __cplusplus
00044 extern "C" {
00045 #endif
00046 
00047 #include "basictypes.h"
00048 #include "gnss_types.h"
00049 #include "gps.h"
00050 
00051 
00052 /**
00053 \brief  NOT USED - A container for RINEX observation file header data. 
00054 Each parameter is the string (multiline is some cases) of columns 
00055 1-60 that corresponds to a record descriptor from columns 61-80.
00056 */
00057 typedef struct
00058 {
00059   char             version_type[64];   //!< RINEX VERSION / TYPE - File type: O for Observation Data - Satellite System: G: GPS, R: GLONASS, E: Galileo, S: SBAS payload, M: Mixed.
00060   char          pgm_run_by_date[64];   //!< Name of program creating current file - Name of agency creating current file - Date and time of file creation, Format: yyyymmdd hhmmss zone, zone: 3-4 char. code for time zone. UTC recommended! LCL if local time with unknown local time system code.
00061   char                 comments[1024]; //!< (Optional-multiline) Comment line(s). Enough space for 16 lines of comments.
00062   char              marker_name[64];   //!< Name of antenna marker.
00063   char                marker_nr[64];   //!< (Optional) Number of antenna marker . 
00064   char              marker_type[64];   //!< Type of the marker: GEODETIC : Earth-fixed, high-precision monumentation, NON_GEODETIC : Earth-fixed, low-precision monumentation, NON_PHYSICAL : Generated from network processing, SPACEBORNE : Orbiting space vehicle, AIRBORNE : Aircraft, balloon, etc. WATER_CRAFT : Mobile water craft, GROUND_CRAFT : Mobile terrestrial vehicle, FIXED_BUOY : "Fixed" on water surface, FLOATING_BUOY: Floating on water surface, FLOATING_ICE : Floating ice sheet, etc., GLACIER : "Fixed" on a glacier, BALLISTIC : Rockets, shells, etc, ANIMAL : Animal carrying a receiver, HUMAN : Human being, Record required except for GEODETIC and NON_GEODETIC marker types. Users may define other project-dependent keywords.
00065   char          observer_agency[64];   //!< Name of observer / agency.
00066   char receiver_nr_type_version[64];   //!< Receiver number, type, and version (Version: e.g. Internal Software Version).
00067   char          antenna_nr_type[64];   //!< Antenna number and type.
00068   char      approx_position_xyz[64];   //!< Geocentric approximate marker position (Units: Meters, System: ITRS recommended) Optional for moving platforms.
00069   char      antenna_delta_h_e_n[64];   //!< Antenna height: Height of the antenna reference point (ARP) above the marker - Horizontal eccentricity of ARP relative to the marker (east/north). All units in meters.
00070   char        antenna_delta_xyz[64];   //!< (Optional) Position of antenna reference point for antenna on vehicle (m). XYZ vector in body-fixed coord. system.
00071   char      antenna_phasecenter[64];   //!< (Optional) Average phase center position w/r to antenna reference point (m) - satellite system (g/r/e/s), - observation code - north/east/up (fixed station) or x/y/z in body-fixed system (vehicle).
00072   char      antenna_b_sight_xyz[64];   //!< (Optional) Direction of the “vertical” antenna axis towards the gnss satellites. Antenna on vehicle: unit vector in body-fixed coord. system tilted antenna on fixed station: unit vector in n/e/up left-handed system.
00073   char      antenna_zerodir_azi[64];   //!< (Optional) Azimuth of the zero-direction of a fixed antenna (degrees, from north).
00074   char      antenna_zerodir_xyz[64];   //!< (Optional) Zero-direction of antenna antenna on vehicle: Unit vector in body-fixed coord. system tilted antenna on fixed station: Unit vector in n/e/up left-handed system.
00075   char       center_of_mass_xyz[64];   //!< (Optional) Current center of mass (x,y,z, meters) of vehicle in body-fixed coordinate system. Same system as used for attitude.
00076   char    system_nrobs_obstypes[64];   //!< Satellite system - Number of observation types - List of observation types. Varies with RINEX version.
00077   char     signal_strength_unit[64];   //!< (Optional) The Unit of the signal strengt observables Snn (if present)  DBHZ : s/n given in dB-Hz.
00078   char                 interval[64];   //!< (Optional) Observation interval in seconds.
00079   char        time_of_first_obs[64];   //!< The time of first observation record (4-digit-year, month,day,hour,min,sec)- Time system: GPS=GPS time system, GLO=UTC time system, GAL=Galileo System Time. Compulsory in mixed GPS/GLONASS files, Defaults: GPS for pure GPS files, GLO for pure GLONASS files, GAL for pure Galileo files.
00080   char         time_of_last_obs[64];   //!< (Optional) The time of last observation record (4-digit-year, month,day,hour,min,sec)- time system: same value as in time_of_first_obs record.
00081   char      rcv_clock_offs_appl[64];   //!< (Optional) Epoch, code, and phase are corrected by applying the realtime-derived receiver clock offset: 1=yes, 0=no; default: 0=no. Record required if clock offsets are reported in the EPOCH/SAT records.
00082   char         sys_dcbs_applied[64];   //!< (Optional) Satellite system (G/R/E/S) - Program name used to apply differential code bias corrections - Source of corrections (URL). Repeat for each satellite system. No corrections applied: Blank fields or record not present. 
00083   char         sys_pcvs_applied[64];   //!< (Optional) Satellite system (G/R/E/S) - Program name used to apply phase center variation corrections - Source of corrections (URL). Repeat for each satellite system. No corrections applied: Blank fields or record not present.
00084   char         sys_scale_factor[512];  //!< (Optional-multiline) Satellite system (G/R/E/S) - Factor to divide stored observations with before use (1,10,100,1000) - Number of observation types involved. 0 or blank: All observation types - List of observation types. Use continuation line(s) for more than 12 observation types. Repeat record if different factors are applied to different observation types. A value of 1 is assumed if record is missing.
00085   char             leap_seconds[64];   //!< (Optional) Number of leap seconds since 6-Jan-1980. Recommended for mixed GPS/GLONASS files.
00086   char            nr_satellites[64];   //!< (Optional) Number of satellites, for which observations are stored in the file.
00087   char            prn_nr_of_obs[1024]; //!< (Optional-multiline) Satellite numbers, number of observations for each observation type indicated in the SYS / # / OBS TYPES record. If more than 9 observation types: Use continuation line(s). This record is (these records are) repeated for each satellite present in the data file.  
00088   
00089 } RINEX_structRawHeader;
00090 
00091 
00092 
00093 /// RINEX VERSION 2.11: An enumeration for RINEX file types.
00094 typedef enum
00095 {
00096   RINEX_FILE_TYPE_OBS       = 'O', //!< 'O' - Observation file.
00097   RINEX_FILE_TYPE_GPS_NAV   = 'N', //!< 'N' - GPS navigation file.
00098   RINEX_FILE_TYPE_MET       = 'M', //!< 'M' - Meteorological data file.
00099   RINEX_FILE_TYPE_GLO_NAV   = 'G', //!< 'G' - GLONASS navigation file.
00100   RINEX_FILE_TYPE_GEO_NAV   = 'H', //!< 'H' - Geostationary Navigation nile.
00101   RINEX_FILE_TYPE_GAL_NAV   = 'L', //!< 'L' - Galileo navigation message file.
00102   RINEX_FILE_TYPE_MIXED_NAV = 'P', //!< 'P' - Mixed GNSS navigation message file.
00103   RINEX_FILE_TYPE_SBAS      = 'B', //!< 'B' - SBAS broadcast data file (separate documentation).
00104   RINEX_FILE_TYPE_CLK       = 'C', //!< 'C' - Clock file (separate documentation).
00105   RINEX_FILE_TYPE_SUMMARY   = 'S', //!< 'S' - Summary file (used e.g., by IGS, not a standard!).
00106   RINEX_FILE_TYPE_UNKNOWN
00107 
00108 } RINEX_enumFileType;
00109 
00110 /// RINEX VERSION 2.11: An enumeration for the letter denoting the GPS satellite system. Used when determining which satellite observations are present.
00111 typedef enum
00112 {
00113   RINEX_SATELLITE_SYSTEM_GPS   = 'G', //!< 'G' GPS satellite.
00114   RINEX_SATELLITE_SYSTEM_GLO   = 'R', //!< 'R' GLONASS satellite.
00115   RINEX_SATELLITE_SYSTEM_GEO   = 'S', //!< 'S' Geostationary satellite (SBAS).
00116   RINEX_SATELLITE_SYSTEM_GAL   = 'E', //!< 'E' Galileo satellite
00117   RINEX_SATELLITE_SYSTEM_NSS   = 'T', //!< 'T' NNSS Transit.
00118   RINEX_SATELLITE_SYSTEM_MIXED = 'M', //!< 'M' Mixed.
00119   RINEX_SATELLITE_SYSTEM_UNKNOWN
00120 
00121 } RINEX_enumSatelliteSystemType;
00122 
00123 /// RINEX VERSION 2.11: An enumeration for the various types of obsevations allowed.
00124 typedef enum
00125 {
00126   RINEX_OBS_TYPE_L1,       //!< Phase on L1 [cycles].
00127   RINEX_OBS_TYPE_L2,       //!< Phase on L2 [cycles].
00128   RINEX_OBS_TYPE_L5,       //!< Phase on L5 [cycles].
00129   RINEX_OBS_TYPE_L6,       //!< Phase on L6 [cycles].
00130   RINEX_OBS_TYPE_L7,       //!< Phase on L7 [cycles].
00131   RINEX_OBS_TYPE_L8,       //!< Phase on L8 [cycles].
00132   RINEX_OBS_TYPE_C1,       //!< Pseudorange using Civil code on L1 [m].
00133   RINEX_OBS_TYPE_C2,       //!< Pseudorange using Civil code on L2 [m].
00134   RINEX_OBS_TYPE_C5,       //!< Pseudorange using Civil code on L5 [m].
00135   RINEX_OBS_TYPE_C6,       //!< Pseudorange using Civil code on L6 [m].
00136   RINEX_OBS_TYPE_C7,       //!< Pseudorange using Civil code on L7 [m].
00137   RINEX_OBS_TYPE_C8,       //!< Pseudorange using Civil code on L8 [m].
00138   RINEX_OBS_TYPE_P1,       //!< Pseudorange using P-Code on L1 [m].
00139   RINEX_OBS_TYPE_P2,       //!< Pseudorange using P-Code on L2 [m].
00140   RINEX_OBS_TYPE_P5,       //!< Pseudorange using P-Code on L5 [m].
00141   RINEX_OBS_TYPE_P6,       //!< Pseudorange using P-Code on L6 [m].
00142   RINEX_OBS_TYPE_P7,       //!< Pseudorange using P-Code on L7 [m].
00143   RINEX_OBS_TYPE_P8,       //!< Pseudorange using P-Code on L8 [m].
00144   RINEX_OBS_TYPE_D1,       //!< Doppler frequency on L1 [Hz].
00145   RINEX_OBS_TYPE_D2,       //!< Doppler frequency on L2 [Hz].
00146   RINEX_OBS_TYPE_D5,       //!< Doppler frequency on L5 [Hz].
00147   RINEX_OBS_TYPE_D6,       //!< Doppler frequency on L6 [Hz].
00148   RINEX_OBS_TYPE_D7,       //!< Doppler frequency on L7 [Hz].
00149   RINEX_OBS_TYPE_D8,       //!< Doppler frequency on L8 [Hz].    
00150   RINEX_OBS_TYPE_T1,       //!< Transit Integrated Doppler on 150 (T1) [cycles].
00151   RINEX_OBS_TYPE_T2,       //!< Transit Integrated Doppler on 400 MHz (T2) [cycles].
00152   RINEX_OBS_TYPE_S1,       //!< Raw signal strengths or SNR values as given by the receiver for the L1 phase observations [receiver-dependent].
00153   RINEX_OBS_TYPE_S2,       //!< Raw signal strengths or SNR values as given by the receiver for the L2 phase observations [receiver-dependent].
00154   RINEX_OBS_TYPE_S5,       //!< Raw signal strengths or SNR values as given by the receiver for the L1 phase observations [receiver-dependent].
00155   RINEX_OBS_TYPE_S6,       //!< Raw signal strengths or SNR values as given by the receiver for the L2 phase observations [receiver-dependent].
00156   RINEX_OBS_TYPE_S7,       //!< Raw signal strengths or SNR values as given by the receiver for the L1 phase observations [receiver-dependent].
00157   RINEX_OBS_TYPE_S8,       //!< Raw signal strengths or SNR values as given by the receiver for the L2 phase observations [receiver-dependent].  
00158   
00159   RINEX_OBS_TYPE_UNKNOWN
00160 
00161 } RINEX_enumObservationType;
00162 
00163 /// RINEX VERSION 2.11: An enumeration for wavelength factors.
00164 typedef enum
00165 {
00166   RINEX_WAVELENTH_FACTOR_SINGLE_FREQ = 0,
00167   RINEX_WAVELENTH_FACTOR_FULL_AMB    = 1,
00168   RINEX_WAVELENTH_FACTOR_HALF_CYCLE  = 2,
00169   RINEX_WAVELENTH_FACTOR_UNKOWN
00170   
00171 } RINEX_enumWavelenthFactorL1_L2;
00172 
00173 /// RINEX VERSION 2.11: An enumeration for the GNSS time system.
00174 typedef enum
00175 {
00176   RINEX_TIME_SYSTEM_GPS = 0, //!< GPS time system.
00177   RINEX_TIME_SYSTEM_GLO = 1, //!< GLONASS time system.
00178   RINEX_TIME_SYSTEM_GAL = 1, //!< GALILEO time system.
00179   RINEX_TIME_SYSTEM_UNKNOWN
00180 
00181 } RINEX_enumTimeSystem;
00182   
00183 
00184 /// RINEX VERSION 2.11: A container for a RINEX time.
00185 typedef struct
00186 {
00187   unsigned short year;
00188   unsigned char month;
00189   unsigned char day;
00190   unsigned char hour;
00191   unsigned char minute;
00192   float seconds;
00193   RINEX_enumTimeSystem time_system;
00194 
00195 } RINEX_TIME;
00196 
00197 
00198 /// RINEX VERSION 2.11: An enumeration for the epoch flag.
00199 typedef enum
00200 {
00201   RINEX_EPOCH_FLAG_OK             = 0, //!< OK
00202   RINEX_EPOCH_FLAG_PWR_FAIL       = 1, //!< power failure between previous and current epoch.
00203   RINEX_EPOCH_FLAG_MOVING_ANT     = 2, //!< start moving antenna.
00204   RINEX_EPOCH_FLAG_NEW_SITE       = 3, //!< new site occupation (end of kinem. data) (at least MARKER NAME record follows)
00205   RINEX_EPOCH_FLAG_HEADER_FOLLOWS = 4, //!< header information follows
00206   RINEX_EPOCH_FLAG_EXTERNAL_EVENT = 5, //!< external event (epoch is significant, same time frame as observation time tags).
00207   RINEX_EPOCH_FLAG_CYCLE_SLIP     = 6, //!< cycle slip records follow to optionally report detected and repaired cycle slips (same format as OBSERVATIONS records; slip instead of observation; LLI and signal strength blank or zero)
00208   RINEX_EPOCH_FLAG_EVENT         
00209 
00210 } RINEX_enumEpochFlag;
00211 
00212 
00213 /// RINEX VERSION 2.11: A container required information from a decode RINEX header.
00214 typedef struct
00215 {
00216   double              version;          //!< RINEX version.
00217   RINEX_enumFileType  type;             //!< RINEX file type.
00218   char                marker_name[64];  //!< The site marker name.
00219   double              x;                //!< Geocentric approximate marker position (Units: Meters, System: ITRS recommended) Optional for moving platforms.
00220   double              y;                //!< Geocentric approximate marker position (Units: Meters, System: ITRS recommended) Optional for moving platforms.
00221   double              z;                //!< Geocentric approximate marker position (Units: Meters, System: ITRS recommended) Optional for moving platforms.
00222   double              antenna_delta_h;  //!< Antenna height: Height of the antenna reference point (ARP) above the marker 
00223   double              antenna_ecc_e;    //!< Horizontal eccentricity of ARP relative to the marker (east). All units in meters.
00224   double              antenna_ecc_n;    //!< Horizontal eccentricity of ARP relative to the marker (north). All units in meters.
00225   unsigned            nr_obs_types;     //!< The number of valid observation types.
00226   RINEX_enumObservationType  obs_types[12]; //!< The observation types.
00227   
00228   RINEX_enumWavelenthFactorL1_L2 default_wavefactor_L1; //!< The default wavelenth factor for L1.
00229   RINEX_enumWavelenthFactorL1_L2 default_wavefactor_L2; //!< The default wavelenth factor for L2.
00230 
00231   char wavelength_factors[1024]; //!< A string containing any satellite specific wavelength factors.
00232 
00233   double interval;               //!< The interval between observatons. -1 if not present.
00234   RINEX_TIME time_of_first_obs;  //!< The time of the first observation record.
00235 
00236 } RINEX_structDecodedHeader;
00237 
00238 
00239 
00240 
00241 
00242 /**
00243 \brief  RINEX VERSION 2.11: Get the RINEX header, as a buffer, 
00244         from the specified file path. Determine the RINEX version and file type.
00245 
00246 \author Glenn D. MacGougan
00247 \date   2007-12-03
00248 \since  2007-12-03
00249 
00250 remarks
00251 - The "RINEX VERSION / TYPE" record must be the first record in a file.
00252 
00253 \return  TRUE(1) if successful, FALSE(0) otherwise.
00254 */
00255 BOOL RINEX_GetHeader( 
00256   const char* filepath,           //!< Path to the RINEX file.
00257   char* buffer,                   //!< (input/output) A character buffer in which to place the RINEX header.
00258   const unsigned buffer_max_size, //!< (input)  The maximum size of the buffer [bytes]. This value should be large enough to hold the entire header, (8192 to 16384).
00259   unsigned *buffer_size,          //!< (output) The length of the header data placed in the buffer [bytes].
00260   double *version,                //!< (output) The RINEX version number. e.g. 1.0, 2.0, 2.2, 3.0, etc.
00261   RINEX_enumFileType *file_type   //!< (output) The RINEX file type. 
00262   );
00263 
00264 
00265 
00266 /**
00267 \brief  RINEX VERSION 2.11: Decode the parts of the RINEX Observation 
00268         file header that are essential to
00269 
00270 \author Glenn D. MacGougan
00271 \date   2007-12-03
00272 \since  2007-12-03
00273 
00274 \return  TRUE(1) if successful, FALSE(0) otherwise.
00275 */
00276 BOOL RINEX_DecodeHeader_ObservationFile(
00277   const char* header_buffer,         //!< (input) The character buffer containing the RINEX header.
00278   const unsigned header_buffer_size, //!< (input) The size of the character buffer containing the RINEX header [bytes]. Not the maximum size, the size of the valid data in the buffer.
00279   RINEX_structDecodedHeader* header  //!< (output) The decoded header data.
00280   );
00281 
00282 
00283 /**
00284 \brief  RINEX VERSION 2.11: Decode the next set of observations 
00285         from the RINEX Observation file. Deal with any header 
00286         information changes that arise from special records.
00287 
00288 \author Glenn D. MacGougan
00289 \date   2007-12-06
00290 \since  2007-12-03
00291 
00292 \return  TRUE(1) if successful, FALSE(0) otherwise.
00293 */
00294 BOOL RINEX_GetNextObservationSet(
00295   FILE* fid,                               //!< (input) An open (not NULL) file pointer to the RINEX data.
00296   RINEX_structDecodedHeader* RINEX_header, //!< (input/output) The decoded RINEX header information. The wavelength markers can change as data is decoded.
00297   BOOL *wasEndOfFileReached,               //!< Has the end of the file been reached (output).
00298   BOOL *wasObservationFound,               //!< Was a valid observation found (output).
00299   unsigned *filePosition,                  //!< The file position for the start of the message found (output).  
00300   GNSS_structMeasurement* obsArray,        //!< A pointer to a user provided array of GNSS_structMeasurement (input/output).
00301   const unsigned char maxNrObs,            //!< The maximum number of elements in the array provided (input).
00302   unsigned *nrObs,                         //!< The number of valid elements set in the array (output).
00303   unsigned short* rx_gps_week,             //!< The receiver GPS week (0-1024+) [weeks].
00304   double* rx_gps_tow                       //!< The receiver GPS time of week (0-603799.99999) [s].
00305   );
00306 
00307 
00308 
00309 /**
00310 \brief  RINEX VERSION 2.11: Completely decode a RINEX GPS 
00311         Navigation file into an array of GPS ephemeris structs.
00312 
00313 \author Glenn D. MacGougan
00314 \date   2007-12-06
00315 \since  2007-12-06
00316 
00317 \return  TRUE(1) if successful, FALSE(0) otherwise.
00318 */
00319 BOOL RINEX_DecodeGPSNavigationFile(
00320   const char *filepath,                          //!< (input) The file path to the GPS Navigation message file.
00321   GNSS_structKlobuchar *iono_model,              //!< (input/output) A pointer to the ionospheric parameters struct.
00322   GPS_structEphemeris *ephemeris_array,          //!< (input/output) A pointer to the GPS ephemeris array.
00323   const unsigned int max_length_ephemeris_array, //!< (input) The maximum size of the GPS ephemeris array.
00324   unsigned int *length_ephemeris_array           //!< (input/output) The length of the GPS ephemeris array after decoding. The number of valid items.
00325   );
00326            
00327 
00328 /**
00329 \brief  RINEX VERSION 2.11: Decode a RINEX file name.
00330 
00331 \author Glenn D. MacGougan
00332 \date   2007-12-06
00333 \since  2007-12-06
00334 
00335 \code
00336 char *filepath = "c:\\data\\CGIM3280.07N";
00337 char station_name[5];
00338 unsigned short dayofyear = 0;
00339 unsigned char file_sequence_nr = 0;
00340 unsigned short year = 0;
00341 RINEX_enumFileType filetype = RINEX_FILE_TYPE_UNKNOWN;
00342 BOOL result = FALSE;
00343 
00344 result = RINEX_DecodeFileName( filepath, station_name, &dayofyear, &file_sequence_nr, &year, &filetype );
00345 // The results are
00346 // station_name == CGIM
00347 // dayofyear == 328
00348 // file_sequence_nr == 0
00349 // year == 2007
00350 // filetype == RINEX_FILE_TYPE_OBS
00351 \endcode
00352 
00353 \return  TRUE(1) if successful, FALSE(0) otherwise.
00354 */
00355 BOOL RINEX_DecodeFileName(
00356   const char *filepath,            //!< (input) A full filepath.
00357   char *station_name,              //!< (output) A 5 character C string. char station_name[5]. In which to place the 4-character station name designator. This must be at least 5 characters.
00358   unsigned short *dayofyear,       //!< (output) The day of year.
00359   unsigned char *file_sequence_nr, //!< (output) file sequence number within day. 0: file contains all the existing data of the current day.
00360   unsigned short *year,            //!< (output) The full year. e.g. 1999, 2001.
00361   RINEX_enumFileType *filetype     //!< (output) The RINEX file type.
00362   );
00363 
00364 
00365 
00366 /**
00367 \brief  RINEX VERSION 2.11: Decode the ionospheric parameters 
00368         from a RINEX GPS Navigation file.
00369 
00370 \author Glenn D. MacGougan
00371 \date   2007-12-07
00372 \since  2007-12-07
00373 
00374 \code
00375 char *filepath = "c:\\data\\brdc3400.07n";
00376 GNSS_structKlobuchar iono;
00377 BOOL result;
00378 
00379 result = RINEX_GetKlobucharIonoParametersFromNavFile( filepath, &iono );
00380 \endcode
00381 
00382 \return  TRUE(1) if successful, FALSE(0) otherwise.
00383 */
00384 BOOL RINEX_GetKlobucharIonoParametersFromNavFile(
00385   const char *filepath,             //!< (input) The file path to the GPS Navigation message file.
00386   GNSS_structKlobuchar *iono_model  //!< (input/output) A pointer to the ionospheric parameters struct.
00387   );
00388 
00389 
00390 
00391 #ifdef __cplusplus
00392 }
00393 #endif
00394 
00395 
00396 #endif // _RINEX_H_
00397