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