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
36280849Scy#include <config.h>
3754359Sroberto#ifdef PARSESTREAM
3854359Sroberto#define NEED_BOPS
3954359Sroberto#include "ntp_string.h"
4054359Sroberto#else
4154359Sroberto#include <stdio.h>
4254359Sroberto#endif
4354359Sroberto#include "ntp_types.h"
4454359Sroberto#include "ntp_stdlib.h"
4554359Sroberto#include "ntp_fp.h"
46282408Scy#include "ntp_calendar.h"
4754359Sroberto#include "mbg_gps166.h"
4854359Sroberto#include "binio.h"
4954359Sroberto#include "ieee754io.h"
5054359Sroberto
51280849Scystatic void get_mbg_tzname (unsigned char **, char *);
52280849Scystatic void mbg_time_status_str (char **, unsigned int, int);
5354359Sroberto
5454359Sroberto#if 0				/* no actual floats on Meinberg binary interface */
5554359Srobertostatic offsets_t mbg_float  = { 1, 0, 3, 2, 0, 0, 0, 0 }; /* byte order for meinberg floats */
5654359Sroberto#endif
5754359Srobertostatic offsets_t mbg_double = { 1, 0, 3, 2, 5, 4, 7, 6 }; /* byte order for meinberg doubles */
5854359Srobertostatic int32   rad2deg_i = 57;
5954359Srobertostatic u_int32 rad2deg_f = 0x4BB834C7; /* 57.2957795131 == 180/PI */
6054359Sroberto
6154359Srobertovoid
6254359Srobertoput_mbg_header(
6354359Sroberto	unsigned char **bufpp,
6454359Sroberto	GPS_MSG_HDR *headerp
6554359Sroberto	)
6654359Sroberto{
67282408Scy  put_lsb_short(bufpp, headerp->cmd);
68282408Scy  put_lsb_short(bufpp, headerp->len);
69282408Scy  put_lsb_short(bufpp, headerp->data_csum);
70282408Scy  put_lsb_short(bufpp, headerp->hdr_csum);
7154359Sroberto}
7254359Sroberto
7354359Srobertovoid
7454359Srobertoget_mbg_sw_rev(
7554359Sroberto	unsigned char **bufpp,
7654359Sroberto	SW_REV *sw_revp
7754359Sroberto	)
7854359Sroberto{
79282408Scy  sw_revp->code = get_lsb_uint16(bufpp);
8054359Sroberto  memcpy(sw_revp->name, *bufpp, sizeof(sw_revp->name));
8154359Sroberto  *bufpp += sizeof(sw_revp->name);
8254359Sroberto}
8354359Sroberto
8454359Srobertovoid
8554359Srobertoget_mbg_ascii_msg(
8654359Sroberto	unsigned char **bufpp,
8754359Sroberto	ASCII_MSG *ascii_msgp
8854359Sroberto	)
8954359Sroberto{
90282408Scy  ascii_msgp->csum  = (CSUM) get_lsb_short(bufpp);
91282408Scy  ascii_msgp->valid = get_lsb_int16(bufpp);
9254359Sroberto  memcpy(ascii_msgp->s, *bufpp, sizeof(ascii_msgp->s));
9354359Sroberto  *bufpp += sizeof(ascii_msgp->s);
9454359Sroberto}
9554359Sroberto
9654359Srobertovoid
9754359Srobertoget_mbg_svno(
9854359Sroberto	unsigned char **bufpp,
9954359Sroberto	SVNO *svnop
10054359Sroberto	)
10154359Sroberto{
102282408Scy  *svnop = (SVNO) get_lsb_short(bufpp);
10354359Sroberto}
10454359Sroberto
10554359Srobertovoid
10654359Srobertoget_mbg_health(
10754359Sroberto	unsigned char **bufpp,
10854359Sroberto	HEALTH *healthp
10954359Sroberto	)
11054359Sroberto{
111282408Scy  *healthp = (HEALTH) get_lsb_short(bufpp);
11254359Sroberto}
11354359Sroberto
11454359Srobertovoid
11554359Srobertoget_mbg_cfg(
11654359Sroberto	unsigned char **bufpp,
11754359Sroberto	CFG *cfgp
11854359Sroberto	)
11954359Sroberto{
120282408Scy  *cfgp = (CFG) get_lsb_short(bufpp);
12154359Sroberto}
12254359Sroberto
12354359Srobertovoid
12454359Srobertoget_mbg_tgps(
12554359Sroberto	unsigned char **bufpp,
12654359Sroberto	T_GPS *tgpsp
12754359Sroberto	)
12854359Sroberto{
129282408Scy  tgpsp->wn = get_lsb_uint16(bufpp);
13054359Sroberto  tgpsp->sec = get_lsb_long(bufpp);
13154359Sroberto  tgpsp->tick = get_lsb_long(bufpp);
13254359Sroberto}
13354359Sroberto
13454359Srobertovoid
13554359Srobertoget_mbg_tm(
13654359Sroberto	unsigned char **buffpp,
137282408Scy	TM_GPS *tmp
13854359Sroberto	)
13954359Sroberto{
140282408Scy  tmp->year = get_lsb_int16(buffpp);
14154359Sroberto  tmp->month = *(*buffpp)++;
142282408Scy  tmp->mday = *(*buffpp)++;
143282408Scy  tmp->yday = get_lsb_int16(buffpp);
144282408Scy  tmp->wday = *(*buffpp)++;
145282408Scy  tmp->hour = *(*buffpp)++;
146282408Scy  tmp->min = *(*buffpp)++;
147282408Scy  tmp->sec = *(*buffpp)++;
148282408Scy  tmp->frac = get_lsb_long(buffpp);
14954359Sroberto  tmp->offs_from_utc = get_lsb_long(buffpp);
150282408Scy  tmp->status = get_lsb_uint16(buffpp);
15154359Sroberto}
15254359Sroberto
15354359Srobertovoid
15454359Srobertoget_mbg_ttm(
15554359Sroberto	unsigned char **buffpp,
15654359Sroberto	TTM *ttmp
15754359Sroberto	)
15854359Sroberto{
159282408Scy  ttmp->channel = get_lsb_int16(buffpp);
16054359Sroberto  get_mbg_tgps(buffpp, &ttmp->t);
16154359Sroberto  get_mbg_tm(buffpp, &ttmp->tm);
16254359Sroberto}
16354359Sroberto
16454359Srobertovoid
16554359Srobertoget_mbg_synth(
16654359Sroberto	unsigned char **buffpp,
16754359Sroberto	SYNTH *synthp
16854359Sroberto	)
16954359Sroberto{
170282408Scy  synthp->freq  = get_lsb_int16(buffpp);
171282408Scy  synthp->range = get_lsb_int16(buffpp);
172282408Scy  synthp->phase = get_lsb_int16(buffpp);
17354359Sroberto}
17454359Sroberto
17554359Srobertostatic void
17654359Srobertoget_mbg_tzname(
17754359Sroberto	unsigned char **buffpp,
17854359Sroberto	char *tznamep
17954359Sroberto	)
18054359Sroberto{
181280849Scy  strlcpy(tznamep, (char *)*buffpp, sizeof(TZ_NAME));
18254359Sroberto  *buffpp += sizeof(TZ_NAME);
18354359Sroberto}
18454359Sroberto
18554359Srobertovoid
18654359Srobertoget_mbg_tzdl(
18754359Sroberto	unsigned char **buffpp,
18854359Sroberto	TZDL *tzdlp
18954359Sroberto	)
19054359Sroberto{
19154359Sroberto  tzdlp->offs = get_lsb_long(buffpp);
19254359Sroberto  tzdlp->offs_dl = get_lsb_long(buffpp);
19354359Sroberto  get_mbg_tm(buffpp, &tzdlp->tm_on);
19454359Sroberto  get_mbg_tm(buffpp, &tzdlp->tm_off);
19554359Sroberto  get_mbg_tzname(buffpp, (char *)tzdlp->name[0]);
19654359Sroberto  get_mbg_tzname(buffpp, (char *)tzdlp->name[1]);
19754359Sroberto}
19854359Sroberto
19954359Srobertovoid
20054359Srobertoget_mbg_antinfo(
20154359Sroberto	unsigned char **buffpp,
20254359Sroberto	ANT_INFO *antinfop
20354359Sroberto	)
20454359Sroberto{
205282408Scy  antinfop->status = get_lsb_int16(buffpp);
20654359Sroberto  get_mbg_tm(buffpp, &antinfop->tm_disconn);
20754359Sroberto  get_mbg_tm(buffpp, &antinfop->tm_reconn);
20854359Sroberto  antinfop->delta_t = get_lsb_long(buffpp);
20954359Sroberto}
21054359Sroberto
21154359Srobertostatic void
21254359Srobertombg_time_status_str(
213182007Sroberto	char **buffpp,
214182007Sroberto	unsigned int status,
215182007Sroberto	int size
21654359Sroberto	)
21754359Sroberto{
218182007Sroberto	static struct state
219182007Sroberto	{
220282408Scy		int         flag;       /* bit flag */
221282408Scy		const char *string;     /* bit name */
222182007Sroberto	} states[] =
223182007Sroberto		  {
224182007Sroberto			  { TM_UTC,    "UTC CORR" },
225182007Sroberto			  { TM_LOCAL,  "LOCAL TIME" },
226182007Sroberto			  { TM_DL_ANN, "DST WARN" },
227182007Sroberto			  { TM_DL_ENB, "DST" },
228182007Sroberto			  { TM_LS_ANN, "LEAP WARN" },
229182007Sroberto			  { TM_LS_ENB, "LEAP SEC" },
230182007Sroberto			  { 0, "" }
231182007Sroberto		  };
23254359Sroberto
233182007Sroberto	if (status)
234182007Sroberto	{
235182007Sroberto		char *start, *p;
236182007Sroberto		struct state *s;
237282408Scy
238182007Sroberto		start = p = *buffpp;
23954359Sroberto
240182007Sroberto		for (s = states; s->flag; s++)
24154359Sroberto		{
242182007Sroberto			if (s->flag & status)
243182007Sroberto			{
244182007Sroberto				if (p != *buffpp)
245182007Sroberto				{
246280849Scy					strlcpy(p, ", ", size - (p - start));
247182007Sroberto					p += 2;
248182007Sroberto				}
249280849Scy				strlcpy(p, s->string, size - (p - start));
250182007Sroberto				p += strlen(p);
251182007Sroberto			}
25254359Sroberto		}
253182007Sroberto		*buffpp = p;
25454359Sroberto	}
25554359Sroberto}
256282408Scy
25754359Srobertovoid
25854359Srobertombg_tm_str(
259182007Sroberto	char **buffpp,
260282408Scy	TM_GPS *tmp,
261282408Scy	int size,
262282408Scy	int print_status
26354359Sroberto	)
26454359Sroberto{
265182007Sroberto	char *s = *buffpp;
266182007Sroberto
267182007Sroberto	snprintf(*buffpp, size, "%04d-%02d-%02d %02d:%02d:%02d.%07ld (%c%02d%02d) ",
268182007Sroberto		 tmp->year, tmp->month, tmp->mday,
269282408Scy		 tmp->hour, tmp->min, tmp->sec, (long) tmp->frac,
270182007Sroberto		 (tmp->offs_from_utc < 0) ? '-' : '+',
271280849Scy		 abs((int)tmp->offs_from_utc) / 3600,
272280849Scy		 (abs((int)tmp->offs_from_utc) / 60) % 60);
273182007Sroberto	*buffpp += strlen(*buffpp);
274182007Sroberto
275282408Scy	if (print_status)
276282408Scy		mbg_time_status_str(buffpp, tmp->status, size - (*buffpp - s));
27754359Sroberto}
27854359Sroberto
27954359Srobertovoid
28054359Srobertombg_tgps_str(
281182007Sroberto	char **buffpp,
282182007Sroberto	T_GPS *tgpsp,
283182007Sroberto	int size
28454359Sroberto	)
28554359Sroberto{
286182007Sroberto	snprintf(*buffpp, size, "week %d + %ld days + %ld.%07ld sec",
287282408Scy		 tgpsp->wn, (long) tgpsp->sec / SECSPERDAY,
288282408Scy		 (long) tgpsp->sec % SECSPERDAY, (long) tgpsp->tick);
289182007Sroberto	*buffpp += strlen(*buffpp);
29054359Sroberto}
29154359Sroberto
29254359Srobertovoid
29354359Srobertoget_mbg_cfgh(
29454359Sroberto	unsigned char **buffpp,
29554359Sroberto	CFGH *cfghp
29654359Sroberto	)
29754359Sroberto{
29854359Sroberto  int i;
299282408Scy
300282408Scy  cfghp->csum = (CSUM) get_lsb_short(buffpp);
301282408Scy  cfghp->valid = get_lsb_int16(buffpp);
30254359Sroberto  get_mbg_tgps(buffpp, &cfghp->tot_51);
30354359Sroberto  get_mbg_tgps(buffpp, &cfghp->tot_63);
30454359Sroberto  get_mbg_tgps(buffpp, &cfghp->t0a);
30554359Sroberto
306282408Scy  for (i = 0; i < N_SVNO_GPS; i++)
30754359Sroberto    {
30854359Sroberto      get_mbg_cfg(buffpp, &cfghp->cfg[i]);
30954359Sroberto    }
310282408Scy
311282408Scy  for (i = 0; i < N_SVNO_GPS; i++)
31254359Sroberto    {
31354359Sroberto      get_mbg_health(buffpp, &cfghp->health[i]);
31454359Sroberto    }
31554359Sroberto}
31654359Sroberto
31754359Srobertovoid
31854359Srobertoget_mbg_utc(
31954359Sroberto	unsigned char **buffpp,
32054359Sroberto	UTC *utcp
32154359Sroberto	)
32254359Sroberto{
323282408Scy  utcp->csum  = (CSUM) get_lsb_short(buffpp);
324282408Scy  utcp->valid = get_lsb_int16(buffpp);
32554359Sroberto
32654359Sroberto  get_mbg_tgps(buffpp, &utcp->t0t);
327282408Scy
32854359Sroberto  if (fetch_ieee754(buffpp, IEEE_DOUBLE, &utcp->A0, mbg_double) != IEEE_OK)
32954359Sroberto    {
33054359Sroberto      L_CLR(&utcp->A0);
33154359Sroberto    }
332282408Scy
33354359Sroberto  if (fetch_ieee754(buffpp, IEEE_DOUBLE, &utcp->A1, mbg_double) != IEEE_OK)
33454359Sroberto    {
33554359Sroberto      L_CLR(&utcp->A1);
33654359Sroberto    }
33754359Sroberto
338282408Scy  utcp->WNlsf      = get_lsb_uint16(buffpp);
339282408Scy  utcp->DNt        = get_lsb_int16(buffpp);
34054359Sroberto  utcp->delta_tls  = *(*buffpp)++;
34154359Sroberto  utcp->delta_tlsf = *(*buffpp)++;
34254359Sroberto}
34354359Sroberto
34454359Srobertovoid
34554359Srobertoget_mbg_lla(
34654359Sroberto	unsigned char **buffpp,
34754359Sroberto	LLA lla
34854359Sroberto	)
34954359Sroberto{
35054359Sroberto  int i;
351282408Scy
35254359Sroberto  for (i = LAT; i <= ALT; i++)
35354359Sroberto    {
35454359Sroberto      if  (fetch_ieee754(buffpp, IEEE_DOUBLE, &lla[i], mbg_double) != IEEE_OK)
35554359Sroberto	{
35654359Sroberto	  L_CLR(&lla[i]);
35754359Sroberto	}
35854359Sroberto      else
35954359Sroberto	if (i != ALT)
36054359Sroberto	  {			/* convert to degrees (* 180/PI) */
36154359Sroberto	    mfp_mul(&lla[i].l_i, &lla[i].l_uf, lla[i].l_i, lla[i].l_uf, rad2deg_i, rad2deg_f);
36254359Sroberto	  }
36354359Sroberto    }
36454359Sroberto}
36554359Sroberto
36654359Srobertovoid
36754359Srobertoget_mbg_xyz(
36854359Sroberto	unsigned char **buffpp,
36954359Sroberto	XYZ xyz
37054359Sroberto	)
37154359Sroberto{
37254359Sroberto  int i;
373282408Scy
37454359Sroberto  for (i = XP; i <= ZP; i++)
37554359Sroberto    {
37654359Sroberto      if  (fetch_ieee754(buffpp, IEEE_DOUBLE, &xyz[i], mbg_double) != IEEE_OK)
37754359Sroberto	{
37854359Sroberto	  L_CLR(&xyz[i]);
37954359Sroberto	}
38054359Sroberto    }
38154359Sroberto}
38254359Sroberto
38354359Srobertostatic void
38454359Srobertoget_mbg_comparam(
38554359Sroberto	unsigned char **buffpp,
38654359Sroberto	COM_PARM *comparamp
38754359Sroberto	)
38854359Sroberto{
389280849Scy  size_t i;
390282408Scy
39154359Sroberto  comparamp->baud_rate = get_lsb_long(buffpp);
39254359Sroberto  for (i = 0; i < sizeof(comparamp->framing); i++)
39354359Sroberto    {
39454359Sroberto      comparamp->framing[i] = *(*buffpp)++;
39554359Sroberto    }
396282408Scy  comparamp->handshake = get_lsb_int16(buffpp);
39754359Sroberto}
39854359Sroberto
39954359Srobertovoid
40054359Srobertoget_mbg_portparam(
40154359Sroberto	unsigned char **buffpp,
40254359Sroberto	PORT_PARM *portparamp
40354359Sroberto	)
40454359Sroberto{
40554359Sroberto  int i;
406282408Scy
407282408Scy  for (i = 0; i < DEFAULT_N_COM; i++)
40854359Sroberto    {
40954359Sroberto      get_mbg_comparam(buffpp, &portparamp->com[i]);
41054359Sroberto    }
411282408Scy  for (i = 0; i < DEFAULT_N_COM; i++)
41254359Sroberto    {
41354359Sroberto      portparamp->mode[i] = *(*buffpp)++;
41454359Sroberto    }
41554359Sroberto}
41654359Sroberto
41754359Sroberto#define FETCH_DOUBLE(src, addr)							\
41854359Sroberto	if  (fetch_ieee754(src, IEEE_DOUBLE, addr, mbg_double) != IEEE_OK)	\
41954359Sroberto	{									\
42054359Sroberto	  L_CLR(addr);								\
42154359Sroberto	}
422282408Scy
42354359Srobertovoid
42454359Srobertoget_mbg_eph(
42554359Sroberto	unsigned char ** buffpp,
42654359Sroberto	EPH *ephp
42754359Sroberto	)
42854359Sroberto{
429282408Scy  ephp->csum   = (CSUM) get_lsb_short(buffpp);
430282408Scy  ephp->valid  = get_lsb_int16(buffpp);
43154359Sroberto
432282408Scy  ephp->health = (HEALTH) get_lsb_short(buffpp);
433282408Scy  ephp->IODC   = (IOD) get_lsb_short(buffpp);
434282408Scy  ephp->IODE2  = (IOD) get_lsb_short(buffpp);
435282408Scy  ephp->IODE3  = (IOD) get_lsb_short(buffpp);
436282408Scy
43754359Sroberto  get_mbg_tgps(buffpp, &ephp->tt);
43854359Sroberto  get_mbg_tgps(buffpp, &ephp->t0c);
43954359Sroberto  get_mbg_tgps(buffpp, &ephp->t0e);
44054359Sroberto
44154359Sroberto  FETCH_DOUBLE(buffpp, &ephp->sqrt_A);
44254359Sroberto  FETCH_DOUBLE(buffpp, &ephp->e);
44354359Sroberto  FETCH_DOUBLE(buffpp, &ephp->M0);
44454359Sroberto  FETCH_DOUBLE(buffpp, &ephp->omega);
44554359Sroberto  FETCH_DOUBLE(buffpp, &ephp->OMEGA0);
44654359Sroberto  FETCH_DOUBLE(buffpp, &ephp->OMEGADOT);
44754359Sroberto  FETCH_DOUBLE(buffpp, &ephp->deltan);
44854359Sroberto  FETCH_DOUBLE(buffpp, &ephp->i0);
44954359Sroberto  FETCH_DOUBLE(buffpp, &ephp->idot);
45054359Sroberto  FETCH_DOUBLE(buffpp, &ephp->crc);
45154359Sroberto  FETCH_DOUBLE(buffpp, &ephp->crs);
45254359Sroberto  FETCH_DOUBLE(buffpp, &ephp->cuc);
45354359Sroberto  FETCH_DOUBLE(buffpp, &ephp->cus);
45454359Sroberto  FETCH_DOUBLE(buffpp, &ephp->cic);
45554359Sroberto  FETCH_DOUBLE(buffpp, &ephp->cis);
45654359Sroberto
45754359Sroberto  FETCH_DOUBLE(buffpp, &ephp->af0);
45854359Sroberto  FETCH_DOUBLE(buffpp, &ephp->af1);
45954359Sroberto  FETCH_DOUBLE(buffpp, &ephp->af2);
46054359Sroberto  FETCH_DOUBLE(buffpp, &ephp->tgd);
46154359Sroberto
462282408Scy  ephp->URA = get_lsb_uint16(buffpp);
46354359Sroberto
46454359Sroberto  ephp->L2code = *(*buffpp)++;
46554359Sroberto  ephp->L2flag = *(*buffpp)++;
46654359Sroberto}
46754359Sroberto
46854359Srobertovoid
46954359Srobertoget_mbg_alm(
47054359Sroberto	unsigned char **buffpp,
47154359Sroberto	ALM *almp
47254359Sroberto	)
47354359Sroberto{
474282408Scy  almp->csum   = (CSUM) get_lsb_short(buffpp);
475282408Scy  almp->valid  = get_lsb_int16(buffpp);
476282408Scy
477282408Scy  almp->health = (HEALTH) get_lsb_short(buffpp);
47854359Sroberto  get_mbg_tgps(buffpp, &almp->t0a);
47954359Sroberto
48054359Sroberto
48154359Sroberto  FETCH_DOUBLE(buffpp, &almp->sqrt_A);
48254359Sroberto  FETCH_DOUBLE(buffpp, &almp->e);
48354359Sroberto
48454359Sroberto  FETCH_DOUBLE(buffpp, &almp->M0);
48554359Sroberto  FETCH_DOUBLE(buffpp, &almp->omega);
48654359Sroberto  FETCH_DOUBLE(buffpp, &almp->OMEGA0);
48754359Sroberto  FETCH_DOUBLE(buffpp, &almp->OMEGADOT);
48854359Sroberto  FETCH_DOUBLE(buffpp, &almp->deltai);
48954359Sroberto  FETCH_DOUBLE(buffpp, &almp->af0);
49054359Sroberto  FETCH_DOUBLE(buffpp, &almp->af1);
49154359Sroberto}
49254359Sroberto
49354359Srobertovoid
49454359Srobertoget_mbg_iono(
49554359Sroberto	unsigned char **buffpp,
49654359Sroberto	IONO *ionop
49754359Sroberto	)
49854359Sroberto{
499282408Scy  ionop->csum   = (CSUM) get_lsb_short(buffpp);
500282408Scy  ionop->valid  = get_lsb_int16(buffpp);
50154359Sroberto
50254359Sroberto  FETCH_DOUBLE(buffpp, &ionop->alpha_0);
50354359Sroberto  FETCH_DOUBLE(buffpp, &ionop->alpha_1);
50454359Sroberto  FETCH_DOUBLE(buffpp, &ionop->alpha_2);
50554359Sroberto  FETCH_DOUBLE(buffpp, &ionop->alpha_3);
50654359Sroberto
50754359Sroberto  FETCH_DOUBLE(buffpp, &ionop->beta_0);
50854359Sroberto  FETCH_DOUBLE(buffpp, &ionop->beta_1);
50954359Sroberto  FETCH_DOUBLE(buffpp, &ionop->beta_2);
51054359Sroberto  FETCH_DOUBLE(buffpp, &ionop->beta_3);
51154359Sroberto}
51254359Sroberto
51354359Sroberto/*
51454359Sroberto * data_mbg.c,v
515182007Sroberto * Revision 4.8  2006/06/22 18:40:01  kardel
516182007Sroberto * clean up signedness (gcc 4)
517182007Sroberto *
518182007Sroberto * Revision 4.7  2005/10/07 22:11:10  kardel
519182007Sroberto * bounded buffer implementation
520182007Sroberto *
521182007Sroberto * Revision 4.6.2.1  2005/09/25 10:23:06  kardel
522182007Sroberto * support bounded buffers
523182007Sroberto *
524182007Sroberto * Revision 4.6  2005/04/16 17:32:10  kardel
525182007Sroberto * update copyright
526182007Sroberto *
527182007Sroberto * Revision 4.5  2004/11/14 15:29:41  kardel
528182007Sroberto * support PPSAPI, upgrade Copyright to Berkeley style
529182007Sroberto *
53054359Sroberto * Revision 4.3  1999/02/21 12:17:42  kardel
53154359Sroberto * 4.91f reconcilation
53254359Sroberto *
53354359Sroberto * Revision 4.2  1998/06/14 21:09:39  kardel
53454359Sroberto * Sun acc cleanup
53554359Sroberto *
53654359Sroberto * Revision 4.1  1998/05/24 08:02:06  kardel
53754359Sroberto * trimmed version log
53854359Sroberto *
53954359Sroberto * Revision 4.0  1998/04/10 19:45:33  kardel
54054359Sroberto * Start 4.0 release version numbering
54154359Sroberto */
54254359Sroberto
543