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