154359Sroberto/*
2182007Sroberto * /src/NTP/REPOSITORY/ntp4-dev/libparse/data_mbg.c,v 4.8 2006/06/22 18:40:01 kardel RELEASE_20060622_A
354359Sroberto *
4182007Sroberto * data_mbg.c,v 4.8 2006/06/22 18:40:01 kardel RELEASE_20060622_A
5182007Sroberto *
654359Sroberto * $Created: Sun Jul 20 12:08:14 1997 $
754359Sroberto *
8182007Sroberto * Copyright (c) 1997-2005 by Frank Kardel <kardel <AT> ntp.org>
9182007Sroberto *
10182007Sroberto * Redistribution and use in source and binary forms, with or without
11182007Sroberto * modification, are permitted provided that the following conditions
12182007Sroberto * are met:
13182007Sroberto * 1. Redistributions of source code must retain the above copyright
14182007Sroberto *    notice, this list of conditions and the following disclaimer.
15182007Sroberto * 2. Redistributions in binary form must reproduce the above copyright
16182007Sroberto *    notice, this list of conditions and the following disclaimer in the
17182007Sroberto *    documentation and/or other materials provided with the distribution.
18182007Sroberto * 3. Neither the name of the author nor the names of its contributors
19182007Sroberto *    may be used to endorse or promote products derived from this software
20182007Sroberto *    without specific prior written permission.
21182007Sroberto *
22182007Sroberto * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23182007Sroberto * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24182007Sroberto * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25182007Sroberto * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26182007Sroberto * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27182007Sroberto * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28182007Sroberto * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29182007Sroberto * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30182007Sroberto * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31182007Sroberto * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32182007Sroberto * SUCH DAMAGE.
33182007Sroberto *
3454359Sroberto */
3554359Sroberto
3654359Sroberto#ifdef PARSESTREAM
3754359Sroberto#define NEED_BOPS
3854359Sroberto#include "ntp_string.h"
3954359Sroberto#else
4054359Sroberto#include <stdio.h>
4154359Sroberto#endif
4254359Sroberto#include "ntp_types.h"
4354359Sroberto#include "ntp_stdlib.h"
4454359Sroberto#include "ntp_fp.h"
4554359Sroberto#include "mbg_gps166.h"
4654359Sroberto#include "binio.h"
4754359Sroberto#include "ieee754io.h"
4854359Sroberto
4954359Srobertostatic void get_mbg_tzname P((unsigned char **, char *));
50182007Srobertostatic void mbg_time_status_str P((char **, unsigned int, int));
5154359Sroberto
5254359Sroberto#if 0				/* no actual floats on Meinberg binary interface */
5354359Srobertostatic offsets_t mbg_float  = { 1, 0, 3, 2, 0, 0, 0, 0 }; /* byte order for meinberg floats */
5454359Sroberto#endif
5554359Srobertostatic offsets_t mbg_double = { 1, 0, 3, 2, 5, 4, 7, 6 }; /* byte order for meinberg doubles */
5654359Srobertostatic int32   rad2deg_i = 57;
5754359Srobertostatic u_int32 rad2deg_f = 0x4BB834C7; /* 57.2957795131 == 180/PI */
5854359Sroberto
5954359Srobertovoid
6054359Srobertoput_mbg_header(
6154359Sroberto	unsigned char **bufpp,
6254359Sroberto	GPS_MSG_HDR *headerp
6354359Sroberto	)
6454359Sroberto{
6554359Sroberto  put_lsb_short(bufpp, headerp->gps_cmd);
6654359Sroberto  put_lsb_short(bufpp, headerp->gps_len);
6754359Sroberto  put_lsb_short(bufpp, headerp->gps_data_csum);
6854359Sroberto  put_lsb_short(bufpp, headerp->gps_hdr_csum);
6954359Sroberto}
7054359Sroberto
7154359Srobertovoid
7254359Srobertoget_mbg_sw_rev(
7354359Sroberto	unsigned char **bufpp,
7454359Sroberto	SW_REV *sw_revp
7554359Sroberto	)
7654359Sroberto{
7754359Sroberto  sw_revp->code = get_lsb_short(bufpp);
7854359Sroberto  memcpy(sw_revp->name, *bufpp, sizeof(sw_revp->name));
7954359Sroberto  *bufpp += sizeof(sw_revp->name);
8054359Sroberto}
8154359Sroberto
8254359Srobertovoid
8354359Srobertoget_mbg_ascii_msg(
8454359Sroberto	unsigned char **bufpp,
8554359Sroberto	ASCII_MSG *ascii_msgp
8654359Sroberto	)
8754359Sroberto{
8854359Sroberto  ascii_msgp->csum  = get_lsb_short(bufpp);
8954359Sroberto  ascii_msgp->valid = get_lsb_short(bufpp);
9054359Sroberto  memcpy(ascii_msgp->s, *bufpp, sizeof(ascii_msgp->s));
9154359Sroberto  *bufpp += sizeof(ascii_msgp->s);
9254359Sroberto}
9354359Sroberto
9454359Srobertovoid
9554359Srobertoget_mbg_svno(
9654359Sroberto	unsigned char **bufpp,
9754359Sroberto	SVNO *svnop
9854359Sroberto	)
9954359Sroberto{
10054359Sroberto  *svnop = get_lsb_short(bufpp);
10154359Sroberto}
10254359Sroberto
10354359Srobertovoid
10454359Srobertoget_mbg_health(
10554359Sroberto	unsigned char **bufpp,
10654359Sroberto	HEALTH *healthp
10754359Sroberto	)
10854359Sroberto{
10954359Sroberto  *healthp = get_lsb_short(bufpp);
11054359Sroberto}
11154359Sroberto
11254359Srobertovoid
11354359Srobertoget_mbg_cfg(
11454359Sroberto	unsigned char **bufpp,
11554359Sroberto	CFG *cfgp
11654359Sroberto	)
11754359Sroberto{
11854359Sroberto  *cfgp = get_lsb_short(bufpp);
11954359Sroberto}
12054359Sroberto
12154359Srobertovoid
12254359Srobertoget_mbg_tgps(
12354359Sroberto	unsigned char **bufpp,
12454359Sroberto	T_GPS *tgpsp
12554359Sroberto	)
12654359Sroberto{
12754359Sroberto  tgpsp->wn = get_lsb_short(bufpp);
12854359Sroberto  tgpsp->sec = get_lsb_long(bufpp);
12954359Sroberto  tgpsp->tick = get_lsb_long(bufpp);
13054359Sroberto}
13154359Sroberto
13254359Srobertovoid
13354359Srobertoget_mbg_tm(
13454359Sroberto	unsigned char **buffpp,
13554359Sroberto	TM *tmp
13654359Sroberto	)
13754359Sroberto{
13854359Sroberto  tmp->year = get_lsb_short(buffpp);
13954359Sroberto  tmp->month = *(*buffpp)++;
14054359Sroberto  tmp->mday  = *(*buffpp)++;
14154359Sroberto  tmp->yday  = get_lsb_short(buffpp);
14254359Sroberto  tmp->wday  = *(*buffpp)++;
14354359Sroberto  tmp->hour  = *(*buffpp)++;
14454359Sroberto  tmp->minute = *(*buffpp)++;
14554359Sroberto  tmp->second = *(*buffpp)++;
14654359Sroberto  tmp->frac  = get_lsb_long(buffpp);
14754359Sroberto  tmp->offs_from_utc = get_lsb_long(buffpp);
14854359Sroberto  tmp->status= get_lsb_short(buffpp);
14954359Sroberto}
15054359Sroberto
15154359Srobertovoid
15254359Srobertoget_mbg_ttm(
15354359Sroberto	unsigned char **buffpp,
15454359Sroberto	TTM *ttmp
15554359Sroberto	)
15654359Sroberto{
15754359Sroberto  ttmp->channel = get_lsb_short(buffpp);
15854359Sroberto  get_mbg_tgps(buffpp, &ttmp->t);
15954359Sroberto  get_mbg_tm(buffpp, &ttmp->tm);
16054359Sroberto}
16154359Sroberto
16254359Srobertovoid
16354359Srobertoget_mbg_synth(
16454359Sroberto	unsigned char **buffpp,
16554359Sroberto	SYNTH *synthp
16654359Sroberto	)
16754359Sroberto{
16854359Sroberto  synthp->freq  = get_lsb_short(buffpp);
16954359Sroberto  synthp->range = get_lsb_short(buffpp);
17054359Sroberto  synthp->phase = get_lsb_short(buffpp);
17154359Sroberto}
17254359Sroberto
17354359Srobertostatic void
17454359Srobertoget_mbg_tzname(
17554359Sroberto	unsigned char **buffpp,
17654359Sroberto	char *tznamep
17754359Sroberto	)
17854359Sroberto{
17954359Sroberto  strncpy(tznamep, (char *)*buffpp, sizeof(TZ_NAME));
18054359Sroberto  *buffpp += sizeof(TZ_NAME);
18154359Sroberto}
18254359Sroberto
18354359Srobertovoid
18454359Srobertoget_mbg_tzdl(
18554359Sroberto	unsigned char **buffpp,
18654359Sroberto	TZDL *tzdlp
18754359Sroberto	)
18854359Sroberto{
18954359Sroberto  tzdlp->offs = get_lsb_long(buffpp);
19054359Sroberto  tzdlp->offs_dl = get_lsb_long(buffpp);
19154359Sroberto  get_mbg_tm(buffpp, &tzdlp->tm_on);
19254359Sroberto  get_mbg_tm(buffpp, &tzdlp->tm_off);
19354359Sroberto  get_mbg_tzname(buffpp, (char *)tzdlp->name[0]);
19454359Sroberto  get_mbg_tzname(buffpp, (char *)tzdlp->name[1]);
19554359Sroberto}
19654359Sroberto
19754359Srobertovoid
19854359Srobertoget_mbg_antinfo(
19954359Sroberto	unsigned char **buffpp,
20054359Sroberto	ANT_INFO *antinfop
20154359Sroberto	)
20254359Sroberto{
20354359Sroberto  antinfop->status = get_lsb_short(buffpp);
20454359Sroberto  get_mbg_tm(buffpp, &antinfop->tm_disconn);
20554359Sroberto  get_mbg_tm(buffpp, &antinfop->tm_reconn);
20654359Sroberto  antinfop->delta_t = get_lsb_long(buffpp);
20754359Sroberto}
20854359Sroberto
20954359Srobertostatic void
21054359Srobertombg_time_status_str(
211182007Sroberto	char **buffpp,
212182007Sroberto	unsigned int status,
213182007Sroberto	int size
21454359Sroberto	)
21554359Sroberto{
216182007Sroberto	static struct state
217182007Sroberto	{
218182007Sroberto		int         flag;		/* bit flag */
219182007Sroberto		const char *string;	/* bit name */
220182007Sroberto	} states[] =
221182007Sroberto		  {
222182007Sroberto			  { TM_UTC,    "UTC CORR" },
223182007Sroberto			  { TM_LOCAL,  "LOCAL TIME" },
224182007Sroberto			  { TM_DL_ANN, "DST WARN" },
225182007Sroberto			  { TM_DL_ENB, "DST" },
226182007Sroberto			  { TM_LS_ANN, "LEAP WARN" },
227182007Sroberto			  { TM_LS_ENB, "LEAP SEC" },
228182007Sroberto			  { 0, "" }
229182007Sroberto		  };
23054359Sroberto
231182007Sroberto	if (status)
232182007Sroberto	{
233182007Sroberto		char *start, *p;
234182007Sroberto		struct state *s;
23554359Sroberto
236182007Sroberto		start = p = *buffpp;
23754359Sroberto
238182007Sroberto		for (s = states; s->flag; s++)
23954359Sroberto		{
240182007Sroberto			if (s->flag & status)
241182007Sroberto			{
242182007Sroberto				if (p != *buffpp)
243182007Sroberto				{
244182007Sroberto					strncpy(p, ", ", size - (p - start));
245182007Sroberto					p += 2;
246182007Sroberto				}
247182007Sroberto				strncpy(p, s->string, size - (p - start));
248182007Sroberto				p += strlen(p);
249182007Sroberto			}
25054359Sroberto		}
251182007Sroberto		*buffpp = p;
25254359Sroberto	}
25354359Sroberto}
25454359Sroberto
25554359Srobertovoid
25654359Srobertombg_tm_str(
257182007Sroberto	char **buffpp,
258182007Sroberto	TM *tmp,
259182007Sroberto	int size
26054359Sroberto	)
26154359Sroberto{
262182007Sroberto	char *s = *buffpp;
263182007Sroberto
264182007Sroberto	snprintf(*buffpp, size, "%04d-%02d-%02d %02d:%02d:%02d.%07ld (%c%02d%02d) ",
265182007Sroberto		 tmp->year, tmp->month, tmp->mday,
266182007Sroberto		 tmp->hour, tmp->minute, tmp->second, tmp->frac,
267182007Sroberto		 (tmp->offs_from_utc < 0) ? '-' : '+',
268182007Sroberto		 abs(tmp->offs_from_utc) / 3600,
269182007Sroberto		 (abs(tmp->offs_from_utc) / 60) % 60);
270182007Sroberto	*buffpp += strlen(*buffpp);
271182007Sroberto
272182007Sroberto	mbg_time_status_str(buffpp, tmp->status, size - (*buffpp - s));
27354359Sroberto}
27454359Sroberto
27554359Srobertovoid
27654359Srobertombg_tgps_str(
277182007Sroberto	char **buffpp,
278182007Sroberto	T_GPS *tgpsp,
279182007Sroberto	int size
28054359Sroberto	)
28154359Sroberto{
282182007Sroberto	snprintf(*buffpp, size, "week %d + %ld days + %ld.%07ld sec",
283182007Sroberto		 tgpsp->wn, tgpsp->sec / 86400,
284182007Sroberto		 tgpsp->sec % 86400, tgpsp->tick);
285182007Sroberto	*buffpp += strlen(*buffpp);
28654359Sroberto}
28754359Sroberto
28854359Srobertovoid
28954359Srobertoget_mbg_cfgh(
29054359Sroberto	unsigned char **buffpp,
29154359Sroberto	CFGH *cfghp
29254359Sroberto	)
29354359Sroberto{
29454359Sroberto  int i;
29554359Sroberto
29654359Sroberto  cfghp->csum = get_lsb_short(buffpp);
29754359Sroberto  cfghp->valid = get_lsb_short(buffpp);
29854359Sroberto  get_mbg_tgps(buffpp, &cfghp->tot_51);
29954359Sroberto  get_mbg_tgps(buffpp, &cfghp->tot_63);
30054359Sroberto  get_mbg_tgps(buffpp, &cfghp->t0a);
30154359Sroberto
30254359Sroberto  for (i = MIN_SVNO; i <= MAX_SVNO; i++)
30354359Sroberto    {
30454359Sroberto      get_mbg_cfg(buffpp, &cfghp->cfg[i]);
30554359Sroberto    }
30654359Sroberto
30754359Sroberto  for (i = MIN_SVNO; i <= MAX_SVNO; i++)
30854359Sroberto    {
30954359Sroberto      get_mbg_health(buffpp, &cfghp->health[i]);
31054359Sroberto    }
31154359Sroberto}
31254359Sroberto
31354359Srobertovoid
31454359Srobertoget_mbg_utc(
31554359Sroberto	unsigned char **buffpp,
31654359Sroberto	UTC *utcp
31754359Sroberto	)
31854359Sroberto{
31954359Sroberto  utcp->csum  = get_lsb_short(buffpp);
32054359Sroberto  utcp->valid = get_lsb_short(buffpp);
32154359Sroberto
32254359Sroberto  get_mbg_tgps(buffpp, &utcp->t0t);
32354359Sroberto
32454359Sroberto  if (fetch_ieee754(buffpp, IEEE_DOUBLE, &utcp->A0, mbg_double) != IEEE_OK)
32554359Sroberto    {
32654359Sroberto      L_CLR(&utcp->A0);
32754359Sroberto    }
32854359Sroberto
32954359Sroberto  if (fetch_ieee754(buffpp, IEEE_DOUBLE, &utcp->A1, mbg_double) != IEEE_OK)
33054359Sroberto    {
33154359Sroberto      L_CLR(&utcp->A1);
33254359Sroberto    }
33354359Sroberto
33454359Sroberto  utcp->WNlsf      = get_lsb_short(buffpp);
33554359Sroberto  utcp->DNt        = get_lsb_short(buffpp);
33654359Sroberto  utcp->delta_tls  = *(*buffpp)++;
33754359Sroberto  utcp->delta_tlsf = *(*buffpp)++;
33854359Sroberto}
33954359Sroberto
34054359Srobertovoid
34154359Srobertoget_mbg_lla(
34254359Sroberto	unsigned char **buffpp,
34354359Sroberto	LLA lla
34454359Sroberto	)
34554359Sroberto{
34654359Sroberto  int i;
34754359Sroberto
34854359Sroberto  for (i = LAT; i <= ALT; i++)
34954359Sroberto    {
35054359Sroberto      if  (fetch_ieee754(buffpp, IEEE_DOUBLE, &lla[i], mbg_double) != IEEE_OK)
35154359Sroberto	{
35254359Sroberto	  L_CLR(&lla[i]);
35354359Sroberto	}
35454359Sroberto      else
35554359Sroberto	if (i != ALT)
35654359Sroberto	  {			/* convert to degrees (* 180/PI) */
35754359Sroberto	    mfp_mul(&lla[i].l_i, &lla[i].l_uf, lla[i].l_i, lla[i].l_uf, rad2deg_i, rad2deg_f);
35854359Sroberto	  }
35954359Sroberto    }
36054359Sroberto}
36154359Sroberto
36254359Srobertovoid
36354359Srobertoget_mbg_xyz(
36454359Sroberto	unsigned char **buffpp,
36554359Sroberto	XYZ xyz
36654359Sroberto	)
36754359Sroberto{
36854359Sroberto  int i;
36954359Sroberto
37054359Sroberto  for (i = XP; i <= ZP; i++)
37154359Sroberto    {
37254359Sroberto      if  (fetch_ieee754(buffpp, IEEE_DOUBLE, &xyz[i], mbg_double) != IEEE_OK)
37354359Sroberto	{
37454359Sroberto	  L_CLR(&xyz[i]);
37554359Sroberto	}
37654359Sroberto    }
37754359Sroberto}
37854359Sroberto
37954359Srobertostatic void
38054359Srobertoget_mbg_comparam(
38154359Sroberto	unsigned char **buffpp,
38254359Sroberto	COM_PARM *comparamp
38354359Sroberto	)
38454359Sroberto{
38554359Sroberto  int i;
38654359Sroberto
38754359Sroberto  comparamp->baud_rate = get_lsb_long(buffpp);
38854359Sroberto  for (i = 0; i < sizeof(comparamp->framing); i++)
38954359Sroberto    {
39054359Sroberto      comparamp->framing[i] = *(*buffpp)++;
39154359Sroberto    }
39254359Sroberto  comparamp->handshake = get_lsb_short(buffpp);
39354359Sroberto}
39454359Sroberto
39554359Srobertovoid
39654359Srobertoget_mbg_portparam(
39754359Sroberto	unsigned char **buffpp,
39854359Sroberto	PORT_PARM *portparamp
39954359Sroberto	)
40054359Sroberto{
40154359Sroberto  int i;
40254359Sroberto
40354359Sroberto  for (i = 0; i < N_COM; i++)
40454359Sroberto    {
40554359Sroberto      get_mbg_comparam(buffpp, &portparamp->com[i]);
40654359Sroberto    }
40754359Sroberto  for (i = 0; i < N_COM; i++)
40854359Sroberto    {
40954359Sroberto      portparamp->mode[i] = *(*buffpp)++;
41054359Sroberto    }
41154359Sroberto}
41254359Sroberto
41354359Sroberto#define FETCH_DOUBLE(src, addr)							\
41454359Sroberto	if  (fetch_ieee754(src, IEEE_DOUBLE, addr, mbg_double) != IEEE_OK)	\
41554359Sroberto	{									\
41654359Sroberto	  L_CLR(addr);								\
41754359Sroberto	}
41854359Sroberto
41954359Srobertovoid
42054359Srobertoget_mbg_eph(
42154359Sroberto	unsigned char ** buffpp,
42254359Sroberto	EPH *ephp
42354359Sroberto	)
42454359Sroberto{
42554359Sroberto  ephp->csum   = get_lsb_short(buffpp);
42654359Sroberto  ephp->valid  = get_lsb_short(buffpp);
42754359Sroberto
42854359Sroberto  ephp->health = get_lsb_short(buffpp);
42954359Sroberto  ephp->IODC   = get_lsb_short(buffpp);
43054359Sroberto  ephp->IODE2  = get_lsb_short(buffpp);
43154359Sroberto  ephp->IODE3  = get_lsb_short(buffpp);
43254359Sroberto
43354359Sroberto  get_mbg_tgps(buffpp, &ephp->tt);
43454359Sroberto  get_mbg_tgps(buffpp, &ephp->t0c);
43554359Sroberto  get_mbg_tgps(buffpp, &ephp->t0e);
43654359Sroberto
43754359Sroberto  FETCH_DOUBLE(buffpp, &ephp->sqrt_A);
43854359Sroberto  FETCH_DOUBLE(buffpp, &ephp->e);
43954359Sroberto  FETCH_DOUBLE(buffpp, &ephp->M0);
44054359Sroberto  FETCH_DOUBLE(buffpp, &ephp->omega);
44154359Sroberto  FETCH_DOUBLE(buffpp, &ephp->OMEGA0);
44254359Sroberto  FETCH_DOUBLE(buffpp, &ephp->OMEGADOT);
44354359Sroberto  FETCH_DOUBLE(buffpp, &ephp->deltan);
44454359Sroberto  FETCH_DOUBLE(buffpp, &ephp->i0);
44554359Sroberto  FETCH_DOUBLE(buffpp, &ephp->idot);
44654359Sroberto  FETCH_DOUBLE(buffpp, &ephp->crc);
44754359Sroberto  FETCH_DOUBLE(buffpp, &ephp->crs);
44854359Sroberto  FETCH_DOUBLE(buffpp, &ephp->cuc);
44954359Sroberto  FETCH_DOUBLE(buffpp, &ephp->cus);
45054359Sroberto  FETCH_DOUBLE(buffpp, &ephp->cic);
45154359Sroberto  FETCH_DOUBLE(buffpp, &ephp->cis);
45254359Sroberto
45354359Sroberto  FETCH_DOUBLE(buffpp, &ephp->af0);
45454359Sroberto  FETCH_DOUBLE(buffpp, &ephp->af1);
45554359Sroberto  FETCH_DOUBLE(buffpp, &ephp->af2);
45654359Sroberto  FETCH_DOUBLE(buffpp, &ephp->tgd);
45754359Sroberto
45854359Sroberto  ephp->URA = get_lsb_short(buffpp);
45954359Sroberto
46054359Sroberto  ephp->L2code = *(*buffpp)++;
46154359Sroberto  ephp->L2flag = *(*buffpp)++;
46254359Sroberto}
46354359Sroberto
46454359Srobertovoid
46554359Srobertoget_mbg_alm(
46654359Sroberto	unsigned char **buffpp,
46754359Sroberto	ALM *almp
46854359Sroberto	)
46954359Sroberto{
47054359Sroberto  almp->csum   = get_lsb_short(buffpp);
47154359Sroberto  almp->valid  = get_lsb_short(buffpp);
47254359Sroberto
47354359Sroberto  almp->health = get_lsb_short(buffpp);
47454359Sroberto  get_mbg_tgps(buffpp, &almp->t0a);
47554359Sroberto
47654359Sroberto
47754359Sroberto  FETCH_DOUBLE(buffpp, &almp->sqrt_A);
47854359Sroberto  FETCH_DOUBLE(buffpp, &almp->e);
47954359Sroberto
48054359Sroberto  FETCH_DOUBLE(buffpp, &almp->M0);
48154359Sroberto  FETCH_DOUBLE(buffpp, &almp->omega);
48254359Sroberto  FETCH_DOUBLE(buffpp, &almp->OMEGA0);
48354359Sroberto  FETCH_DOUBLE(buffpp, &almp->OMEGADOT);
48454359Sroberto  FETCH_DOUBLE(buffpp, &almp->deltai);
48554359Sroberto  FETCH_DOUBLE(buffpp, &almp->af0);
48654359Sroberto  FETCH_DOUBLE(buffpp, &almp->af1);
48754359Sroberto}
48854359Sroberto
48954359Srobertovoid
49054359Srobertoget_mbg_iono(
49154359Sroberto	unsigned char **buffpp,
49254359Sroberto	IONO *ionop
49354359Sroberto	)
49454359Sroberto{
49554359Sroberto  ionop->csum   = get_lsb_short(buffpp);
49654359Sroberto  ionop->valid  = get_lsb_short(buffpp);
49754359Sroberto
49854359Sroberto  FETCH_DOUBLE(buffpp, &ionop->alpha_0);
49954359Sroberto  FETCH_DOUBLE(buffpp, &ionop->alpha_1);
50054359Sroberto  FETCH_DOUBLE(buffpp, &ionop->alpha_2);
50154359Sroberto  FETCH_DOUBLE(buffpp, &ionop->alpha_3);
50254359Sroberto
50354359Sroberto  FETCH_DOUBLE(buffpp, &ionop->beta_0);
50454359Sroberto  FETCH_DOUBLE(buffpp, &ionop->beta_1);
50554359Sroberto  FETCH_DOUBLE(buffpp, &ionop->beta_2);
50654359Sroberto  FETCH_DOUBLE(buffpp, &ionop->beta_3);
50754359Sroberto}
50854359Sroberto
50954359Sroberto/*
51054359Sroberto * data_mbg.c,v
511182007Sroberto * Revision 4.8  2006/06/22 18:40:01  kardel
512182007Sroberto * clean up signedness (gcc 4)
513182007Sroberto *
514182007Sroberto * Revision 4.7  2005/10/07 22:11:10  kardel
515182007Sroberto * bounded buffer implementation
516182007Sroberto *
517182007Sroberto * Revision 4.6.2.1  2005/09/25 10:23:06  kardel
518182007Sroberto * support bounded buffers
519182007Sroberto *
520182007Sroberto * Revision 4.6  2005/04/16 17:32:10  kardel
521182007Sroberto * update copyright
522182007Sroberto *
523182007Sroberto * Revision 4.5  2004/11/14 15:29:41  kardel
524182007Sroberto * support PPSAPI, upgrade Copyright to Berkeley style
525182007Sroberto *
52654359Sroberto * Revision 4.3  1999/02/21 12:17:42  kardel
52754359Sroberto * 4.91f reconcilation
52854359Sroberto *
52954359Sroberto * Revision 4.2  1998/06/14 21:09:39  kardel
53054359Sroberto * Sun acc cleanup
53154359Sroberto *
53254359Sroberto * Revision 4.1  1998/05/24 08:02:06  kardel
53354359Sroberto * trimmed version log
53454359Sroberto *
53554359Sroberto * Revision 4.0  1998/04/10 19:45:33  kardel
53654359Sroberto * Start 4.0 release version numbering
53754359Sroberto */
53854359Sroberto
539