www.pudn.com > BncSource.zip > rtigs_records.h
/***************************************************************************
rtigs_records.h - description
-------------------
begin : Wed Aug 27 2003
copyright : (C) 2003 by Ken MacLeod
email : ken.macleod@nrcan.gc.ca.
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
#ifndef _RTIGS_T
#define _RTIGS_T
/*****************************************************************************
* RT-IGS record structures
*
* General:
*
* Every record will have a defined number. We propose the following:
* 1) Station record number 100;
* 2) Observation record number 200;
* 3) Ephemeris record number 300;
* 4) Meteorological record number 400;
*
* Every station will have a unique number. We propose the following:
*
* 1-99 reserved for JPL
* 100-199 reserved for NRCan
* 200-299 reserved for NGS
* 300-399 reserved for ESOC
* 400-499 reserved for GFZ
* 500-599 reserved for BKG
* 600-699 reserved for GEOSCIENCE AUS.
* 700-799 others
* etc
* The number of bytes in each real time message will include the header as
* well as the data content, but NOT the pointer. For example :
*
* 1) A station message is output once per hour and is 20 bytes
*
* 2) An observation message is output once per second. The header is
* 12 bytes long and the SOC data is 21 bytes per PRN. So a typical
* RTIGSO_T message will be 390 bytes if 8 sats are being tracked
*
* 3) An ephemeris message is output when the ephemeris is decoded by the
* GPS receiver. The time in the Ephemeris header is the collected time.
* One ephemeris can be bundled in a RTIGSE_T.
* A RTIGSE_T message contains one eph. the message consists of 12 header
* bytes and 72 ephemeris bytes, for a total of 84 bytes.
*
* 4) The RTIGSM_T (met) message should be issues once every 15 minutes.
* A basic met message consists of a 12 byte header and 3 longs (temp,
* press and relative humidity) for a total of 24 bytes.
*
* All records will be related to a station configuration indicated by the
* Issue of Data Station(IODS). The IODS will enable the user to identify
* the equipment and software that was used to derive the observation data.
*
* Each record header will contain the GPS Time in seconds which is
* continuous from ((6 Jan-1980)).
*
* The data payload of each record will consist of observations. The
* structures shown below indicate a pointer to data but in fact the broadcast
* messages will not contain the pointed only the data. Users will have to
* manage the data and the pointer is shown to illustrate where the data is
* located in the message and one possible data management option.
*
*
* All record data in network byte order (Big Endian), ie IA32 users will
* have to swap bytes ;-)
******************************************************************************
* Developed by Ken MacLeod Aug. 27/2003
* Updated and revised Feb. 10/2004 with comments from R. Muellershoen
*****************************************************************************/
#define MAXSTA 256
#define MAXSOC 264 /* 12 + (12 * 21) = 264*/
#define MAXEPH 876 /* 12 + (12 * 72) = 876*/
#define MAXMETS 6
/*****************************************************************************
* Structure name : RTIGSS_T
*
* Purpose:
*
* Encapsulate the station information that is required for real-time users
*
* Users should use this record is to link data to a specific station
* configuration.
* The station message should be transmitted by station operator every
* hour and upon update.
* If the stations record Issue of Data Station(IODS) and the IODS in the
* observation record do not match then the data should be used without
* further investigation
*
*
*
* This record is not intended to replace the IGS Station log but it is
* seen as a subset of the IGS log and contains information that enables
* real-time users to monitor station changes.
*
*
*Version: 1.0
*
*By Ken MacLeod Aug. 27/2003
*Changes: Revised Feb. 10/2004 updated the message description info.
****************************************************************************/
typedef struct rtigs_station
{
unsigned short rec_id; /*100 indicates station record this message */
/* to be issued once per hour*/
unsigned short sta_id; /*unique number assigned to each station. */
/* Uniquely linked to an IGS Station log by */
/* the station record*/
unsigned long GPSTime; /* time of issue, GPS time is seconds from */
/* the beginning of GPS (6 Jan-1980)*/
unsigned short num_bytes; /* total number of bytes in the message, */
/* including the header*/
unsigned char IODS; /* a flag indicating the current station */
/* configuration this will change every time */
/* the station hardware changes*/
unsigned char sta_rec_type; /* could be various station data formats: */
/* 0 indicates that there is no additional */
/* station data*/
char IGS_UniqueID[8]; /* IGS ID eg NRC1 will use IGS 4 character */
/* standard but c requires a \0 to terminate */
/* the string */
unsigned char *data; /* default station headers Does Not */
/* contain data. The current message does */
/* not contain additional station */
/* information the pointer is shown only */
/* to illustrate options*/
}RTIGSS_T;
/******************************************************************************
* Structure name : RTIGSO_T
*
* Purpose : GPS Observations
* Currently the JPL Soc format is used to compress the
* observation data.
* See JPL's website for a description of the SOC
* compression routine
*Version: 1.0
*
*By Ken MacLeod Aug. 27/2003
*Changes: Revised Feb. 10/2004 Remove station clock and obs time
* in milliseconds and add to the message description
*****************************************************************************/
typedef struct rtigs_obs
{
unsigned short rec_id; /* 200 indicates rt-igs gps observation*/
unsigned short sta_id; /* Unique num. assigned to each station */
/* Uniquely linked to an IGS Station log y */
/* the station record*/
unsigned long GPSTime; /* observation time of issue, GPS time is */
/* seconds from the beginning of GPS */
/* (6 Jan-1980)*/
unsigned short num_bytes; /* total number of bytes in the message, */
/* including the header, but not the data */
/* pointer*/
unsigned char IODS; /* a flag indicating the current station */
/* configuration that derived the */
/* observations this value will change */
/* every time the station configuration */
/* changes*/
unsigned char num_obs; /* number of GPS Observations in data block*/
unsigned char *data; /* pointer to soc observation data (4 byte pointer), this pointer */
/* is not in the message the data starts */
/* here, the pointer is used to manage the */
/* SOC data once the RTIGS0_T message has */
/* been decoded */
} RTIGSO_T;
/*****************************************************************************
* Structure name : RTIGSE_T
*
* Purpose : SV Ephemeris in Broadcast format parity removed
*
*Version: 1.0
*
*By Ken MacLeod Aug. 27/2003
*Changes: Revised Feb. 10/2004
*****************************************************************************/
typedef struct rtigs_ephemeris
{
unsigned short rec_id; /* 300 indicates rt-igs eph*/
unsigned short sta_id; /* unique number assigned */
/* to each station*/
unsigned long CollectedGPSTime; /* time ephemeris received at */
/*station, GPS time is seconds */
/* from the beginning of GPS */
/* (6 Jan-1980)*/
unsigned short num_bytes; /* total number of bytes in the message, */
/* including the header, but not the size */
/* of the data pointer*/
unsigned char IODS; /* a flag indicating the current station */
/* configuration that derived the */
/* observations this will change every */
/* time the sta config changes*/
unsigned char prn; /* PRN*/
unsigned char *data; /* In the RTIGSE_T message the data */
/* starts here, the pointer is used to */
/* manage the eph data once the RTIGSE_T */
/* message has been decoded */
/* The RTIGSE_T eph. format consists of */
/* the 3 broadcast sub frames with the */
/* parity bits removed so 3 */
/* subframes = 72 bytes */
} RTIGSE_T;
/***********************************************************************
* Structure name : RTIGSM_T
*
* Purpose : Station Meteorological observations
*
*Version: 1.0
*
*By Ken MacLeod Aug. 27/2003
*Changes: Changed the met array to an long pointer
***********************************************************************/
typedef struct rtigs_mets
{
unsigned short rec_id; /* 400 indicates rt-igs met*/
unsigned short sta_id; /* unique number assigned to each */
/* station*/
unsigned long GPSTime; /* time of issue, GPS time is seconds */
/* from the beginning of GPS (6 Jan-1980)*/
unsigned short num_bytes; /* total number of bytes in the message,*/
/* including the header but not the pointer*/
unsigned char IODS; /* a flag indicating the current station */
/* config that derived the observations */
/* this will change every time the station */
/* configuration changes*/
unsigned char numobs; /* if only temp, press, rel hum then : 3 */
long *mets; /* temp(Deg C), press (mb), */
/* rel humid(%), zenith Wet(metres), */
/* Zenith Dry(metres), Zenith Total */
/* (metres) and each scaled by 1000 so */
/* 1000.123 mb = 1000123*/
/*if the zenith observations are not */
/* present only enter 3 for the num of obs.*/
} RTIGSM_T;
#endif