1c0b746e5SOllivier Robert /* 2c0b746e5SOllivier Robert * /src/NTP/ntp-4/libparse/data_mbg.c,v 4.3 1999/02/21 12:17:42 kardel RELEASE_19990228_A 3c0b746e5SOllivier Robert * 4c0b746e5SOllivier Robert * $Created: Sun Jul 20 12:08:14 1997 $ 5c0b746e5SOllivier Robert * 6c0b746e5SOllivier Robert * Copyright (C) 1997, 1998 by Frank Kardel 7c0b746e5SOllivier Robert */ 8c0b746e5SOllivier Robert 9c0b746e5SOllivier Robert #ifdef PARSESTREAM 10c0b746e5SOllivier Robert #define NEED_BOPS 11c0b746e5SOllivier Robert #include "ntp_string.h" 12c0b746e5SOllivier Robert #else 13c0b746e5SOllivier Robert #include <stdio.h> 14c0b746e5SOllivier Robert #endif 15c0b746e5SOllivier Robert #include "ntp_types.h" 16c0b746e5SOllivier Robert #include "ntp_stdlib.h" 17c0b746e5SOllivier Robert #include "ntp_fp.h" 18c0b746e5SOllivier Robert #include "mbg_gps166.h" 19c0b746e5SOllivier Robert #include "binio.h" 20c0b746e5SOllivier Robert #include "ieee754io.h" 21c0b746e5SOllivier Robert 22c0b746e5SOllivier Robert static void get_mbg_tzname P((unsigned char **, char *)); 23c0b746e5SOllivier Robert static void mbg_time_status_str P((unsigned char **, unsigned int)); 24c0b746e5SOllivier Robert 25c0b746e5SOllivier Robert #if 0 /* no actual floats on Meinberg binary interface */ 26c0b746e5SOllivier Robert static offsets_t mbg_float = { 1, 0, 3, 2, 0, 0, 0, 0 }; /* byte order for meinberg floats */ 27c0b746e5SOllivier Robert #endif 28c0b746e5SOllivier Robert static offsets_t mbg_double = { 1, 0, 3, 2, 5, 4, 7, 6 }; /* byte order for meinberg doubles */ 29c0b746e5SOllivier Robert static int32 rad2deg_i = 57; 30c0b746e5SOllivier Robert static u_int32 rad2deg_f = 0x4BB834C7; /* 57.2957795131 == 180/PI */ 31c0b746e5SOllivier Robert 32c0b746e5SOllivier Robert void 33c0b746e5SOllivier Robert put_mbg_header( 34c0b746e5SOllivier Robert unsigned char **bufpp, 35c0b746e5SOllivier Robert GPS_MSG_HDR *headerp 36c0b746e5SOllivier Robert ) 37c0b746e5SOllivier Robert { 38c0b746e5SOllivier Robert put_lsb_short(bufpp, headerp->gps_cmd); 39c0b746e5SOllivier Robert put_lsb_short(bufpp, headerp->gps_len); 40c0b746e5SOllivier Robert put_lsb_short(bufpp, headerp->gps_data_csum); 41c0b746e5SOllivier Robert put_lsb_short(bufpp, headerp->gps_hdr_csum); 42c0b746e5SOllivier Robert } 43c0b746e5SOllivier Robert 44c0b746e5SOllivier Robert void 45c0b746e5SOllivier Robert get_mbg_sw_rev( 46c0b746e5SOllivier Robert unsigned char **bufpp, 47c0b746e5SOllivier Robert SW_REV *sw_revp 48c0b746e5SOllivier Robert ) 49c0b746e5SOllivier Robert { 50c0b746e5SOllivier Robert sw_revp->code = get_lsb_short(bufpp); 51c0b746e5SOllivier Robert memcpy(sw_revp->name, *bufpp, sizeof(sw_revp->name)); 52c0b746e5SOllivier Robert *bufpp += sizeof(sw_revp->name); 53c0b746e5SOllivier Robert } 54c0b746e5SOllivier Robert 55c0b746e5SOllivier Robert void 56c0b746e5SOllivier Robert get_mbg_ascii_msg( 57c0b746e5SOllivier Robert unsigned char **bufpp, 58c0b746e5SOllivier Robert ASCII_MSG *ascii_msgp 59c0b746e5SOllivier Robert ) 60c0b746e5SOllivier Robert { 61c0b746e5SOllivier Robert ascii_msgp->csum = get_lsb_short(bufpp); 62c0b746e5SOllivier Robert ascii_msgp->valid = get_lsb_short(bufpp); 63c0b746e5SOllivier Robert memcpy(ascii_msgp->s, *bufpp, sizeof(ascii_msgp->s)); 64c0b746e5SOllivier Robert *bufpp += sizeof(ascii_msgp->s); 65c0b746e5SOllivier Robert } 66c0b746e5SOllivier Robert 67c0b746e5SOllivier Robert void 68c0b746e5SOllivier Robert get_mbg_svno( 69c0b746e5SOllivier Robert unsigned char **bufpp, 70c0b746e5SOllivier Robert SVNO *svnop 71c0b746e5SOllivier Robert ) 72c0b746e5SOllivier Robert { 73c0b746e5SOllivier Robert *svnop = get_lsb_short(bufpp); 74c0b746e5SOllivier Robert } 75c0b746e5SOllivier Robert 76c0b746e5SOllivier Robert void 77c0b746e5SOllivier Robert get_mbg_health( 78c0b746e5SOllivier Robert unsigned char **bufpp, 79c0b746e5SOllivier Robert HEALTH *healthp 80c0b746e5SOllivier Robert ) 81c0b746e5SOllivier Robert { 82c0b746e5SOllivier Robert *healthp = get_lsb_short(bufpp); 83c0b746e5SOllivier Robert } 84c0b746e5SOllivier Robert 85c0b746e5SOllivier Robert void 86c0b746e5SOllivier Robert get_mbg_cfg( 87c0b746e5SOllivier Robert unsigned char **bufpp, 88c0b746e5SOllivier Robert CFG *cfgp 89c0b746e5SOllivier Robert ) 90c0b746e5SOllivier Robert { 91c0b746e5SOllivier Robert *cfgp = get_lsb_short(bufpp); 92c0b746e5SOllivier Robert } 93c0b746e5SOllivier Robert 94c0b746e5SOllivier Robert void 95c0b746e5SOllivier Robert get_mbg_tgps( 96c0b746e5SOllivier Robert unsigned char **bufpp, 97c0b746e5SOllivier Robert T_GPS *tgpsp 98c0b746e5SOllivier Robert ) 99c0b746e5SOllivier Robert { 100c0b746e5SOllivier Robert tgpsp->wn = get_lsb_short(bufpp); 101c0b746e5SOllivier Robert tgpsp->sec = get_lsb_long(bufpp); 102c0b746e5SOllivier Robert tgpsp->tick = get_lsb_long(bufpp); 103c0b746e5SOllivier Robert } 104c0b746e5SOllivier Robert 105c0b746e5SOllivier Robert void 106c0b746e5SOllivier Robert get_mbg_tm( 107c0b746e5SOllivier Robert unsigned char **buffpp, 108c0b746e5SOllivier Robert TM *tmp 109c0b746e5SOllivier Robert ) 110c0b746e5SOllivier Robert { 111c0b746e5SOllivier Robert tmp->year = get_lsb_short(buffpp); 112c0b746e5SOllivier Robert tmp->month = *(*buffpp)++; 113c0b746e5SOllivier Robert tmp->mday = *(*buffpp)++; 114c0b746e5SOllivier Robert tmp->yday = get_lsb_short(buffpp); 115c0b746e5SOllivier Robert tmp->wday = *(*buffpp)++; 116c0b746e5SOllivier Robert tmp->hour = *(*buffpp)++; 117c0b746e5SOllivier Robert tmp->minute = *(*buffpp)++; 118c0b746e5SOllivier Robert tmp->second = *(*buffpp)++; 119c0b746e5SOllivier Robert tmp->frac = get_lsb_long(buffpp); 120c0b746e5SOllivier Robert tmp->offs_from_utc = get_lsb_long(buffpp); 121c0b746e5SOllivier Robert tmp->status= get_lsb_short(buffpp); 122c0b746e5SOllivier Robert } 123c0b746e5SOllivier Robert 124c0b746e5SOllivier Robert void 125c0b746e5SOllivier Robert get_mbg_ttm( 126c0b746e5SOllivier Robert unsigned char **buffpp, 127c0b746e5SOllivier Robert TTM *ttmp 128c0b746e5SOllivier Robert ) 129c0b746e5SOllivier Robert { 130c0b746e5SOllivier Robert ttmp->channel = get_lsb_short(buffpp); 131c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &ttmp->t); 132c0b746e5SOllivier Robert get_mbg_tm(buffpp, &ttmp->tm); 133c0b746e5SOllivier Robert } 134c0b746e5SOllivier Robert 135c0b746e5SOllivier Robert void 136c0b746e5SOllivier Robert get_mbg_synth( 137c0b746e5SOllivier Robert unsigned char **buffpp, 138c0b746e5SOllivier Robert SYNTH *synthp 139c0b746e5SOllivier Robert ) 140c0b746e5SOllivier Robert { 141c0b746e5SOllivier Robert synthp->freq = get_lsb_short(buffpp); 142c0b746e5SOllivier Robert synthp->range = get_lsb_short(buffpp); 143c0b746e5SOllivier Robert synthp->phase = get_lsb_short(buffpp); 144c0b746e5SOllivier Robert } 145c0b746e5SOllivier Robert 146c0b746e5SOllivier Robert static void 147c0b746e5SOllivier Robert get_mbg_tzname( 148c0b746e5SOllivier Robert unsigned char **buffpp, 149c0b746e5SOllivier Robert char *tznamep 150c0b746e5SOllivier Robert ) 151c0b746e5SOllivier Robert { 152c0b746e5SOllivier Robert strncpy(tznamep, (char *)*buffpp, sizeof(TZ_NAME)); 153c0b746e5SOllivier Robert *buffpp += sizeof(TZ_NAME); 154c0b746e5SOllivier Robert } 155c0b746e5SOllivier Robert 156c0b746e5SOllivier Robert void 157c0b746e5SOllivier Robert get_mbg_tzdl( 158c0b746e5SOllivier Robert unsigned char **buffpp, 159c0b746e5SOllivier Robert TZDL *tzdlp 160c0b746e5SOllivier Robert ) 161c0b746e5SOllivier Robert { 162c0b746e5SOllivier Robert tzdlp->offs = get_lsb_long(buffpp); 163c0b746e5SOllivier Robert tzdlp->offs_dl = get_lsb_long(buffpp); 164c0b746e5SOllivier Robert get_mbg_tm(buffpp, &tzdlp->tm_on); 165c0b746e5SOllivier Robert get_mbg_tm(buffpp, &tzdlp->tm_off); 166c0b746e5SOllivier Robert get_mbg_tzname(buffpp, (char *)tzdlp->name[0]); 167c0b746e5SOllivier Robert get_mbg_tzname(buffpp, (char *)tzdlp->name[1]); 168c0b746e5SOllivier Robert } 169c0b746e5SOllivier Robert 170c0b746e5SOllivier Robert void 171c0b746e5SOllivier Robert get_mbg_antinfo( 172c0b746e5SOllivier Robert unsigned char **buffpp, 173c0b746e5SOllivier Robert ANT_INFO *antinfop 174c0b746e5SOllivier Robert ) 175c0b746e5SOllivier Robert { 176c0b746e5SOllivier Robert antinfop->status = get_lsb_short(buffpp); 177c0b746e5SOllivier Robert get_mbg_tm(buffpp, &antinfop->tm_disconn); 178c0b746e5SOllivier Robert get_mbg_tm(buffpp, &antinfop->tm_reconn); 179c0b746e5SOllivier Robert antinfop->delta_t = get_lsb_long(buffpp); 180c0b746e5SOllivier Robert } 181c0b746e5SOllivier Robert 182c0b746e5SOllivier Robert static void 183c0b746e5SOllivier Robert mbg_time_status_str( 184c0b746e5SOllivier Robert unsigned char **buffpp, 185c0b746e5SOllivier Robert unsigned int status 186c0b746e5SOllivier Robert ) 187c0b746e5SOllivier Robert { 188c0b746e5SOllivier Robert static struct state 189c0b746e5SOllivier Robert { 190c0b746e5SOllivier Robert int flag; /* bit flag */ 191c0b746e5SOllivier Robert const char *string; /* bit name */ 192c0b746e5SOllivier Robert } states[] = 193c0b746e5SOllivier Robert { 194c0b746e5SOllivier Robert { TM_UTC, "UTC CORR" }, 195c0b746e5SOllivier Robert { TM_LOCAL, "LOCAL TIME" }, 196c0b746e5SOllivier Robert { TM_DL_ANN, "DST WARN" }, 197c0b746e5SOllivier Robert { TM_DL_ENB, "DST" }, 198c0b746e5SOllivier Robert { TM_LS_ANN, "LEAP WARN" }, 199c0b746e5SOllivier Robert { TM_LS_ENB, "LEAP SEC" }, 200c0b746e5SOllivier Robert { 0, "" } 201c0b746e5SOllivier Robert }; 202c0b746e5SOllivier Robert 203c0b746e5SOllivier Robert if (status) 204c0b746e5SOllivier Robert { 205c0b746e5SOllivier Robert unsigned char *p; 206c0b746e5SOllivier Robert struct state *s; 207c0b746e5SOllivier Robert 208c0b746e5SOllivier Robert p = *buffpp; 209c0b746e5SOllivier Robert 210c0b746e5SOllivier Robert for (s = states; s->flag; s++) 211c0b746e5SOllivier Robert { 212c0b746e5SOllivier Robert if (s->flag & status) 213c0b746e5SOllivier Robert { 214c0b746e5SOllivier Robert if (p != *buffpp) 215c0b746e5SOllivier Robert { 216c0b746e5SOllivier Robert *p++ = ','; 217c0b746e5SOllivier Robert *p++ = ' '; 218c0b746e5SOllivier Robert } 219c0b746e5SOllivier Robert strcpy((char *)p, s->string); 220c0b746e5SOllivier Robert p += strlen((char *)p); 221c0b746e5SOllivier Robert } 222c0b746e5SOllivier Robert } 223c0b746e5SOllivier Robert *buffpp = p; 224c0b746e5SOllivier Robert } 225c0b746e5SOllivier Robert } 226c0b746e5SOllivier Robert 227c0b746e5SOllivier Robert void 228c0b746e5SOllivier Robert mbg_tm_str( 229c0b746e5SOllivier Robert unsigned char **buffpp, 230c0b746e5SOllivier Robert TM *tmp 231c0b746e5SOllivier Robert ) 232c0b746e5SOllivier Robert { 233c0b746e5SOllivier Robert sprintf((char *)*buffpp, "%04d-%02d-%02d %02d:%02d:%02d.%07ld (%c%02d%02d) ", 234c0b746e5SOllivier Robert tmp->year, tmp->month, tmp->mday, 235c0b746e5SOllivier Robert tmp->hour, tmp->minute, tmp->second, tmp->frac, 236c0b746e5SOllivier Robert (tmp->offs_from_utc < 0) ? '-' : '+', 237c0b746e5SOllivier Robert abs(tmp->offs_from_utc) / 3600, 238c0b746e5SOllivier Robert (abs(tmp->offs_from_utc) / 60) % 60); 239c0b746e5SOllivier Robert *buffpp += strlen((char *)*buffpp); 240c0b746e5SOllivier Robert mbg_time_status_str(buffpp, tmp->status); 241c0b746e5SOllivier Robert } 242c0b746e5SOllivier Robert 243c0b746e5SOllivier Robert void 244c0b746e5SOllivier Robert mbg_tgps_str( 245c0b746e5SOllivier Robert unsigned char **buffpp, 246c0b746e5SOllivier Robert T_GPS *tgpsp 247c0b746e5SOllivier Robert ) 248c0b746e5SOllivier Robert { 249c0b746e5SOllivier Robert sprintf((char *)*buffpp, "week %d + %ld days + %ld.%07ld sec", 250c0b746e5SOllivier Robert tgpsp->wn, tgpsp->sec / 86400, 251c0b746e5SOllivier Robert tgpsp->sec % 86400, tgpsp->tick); 252c0b746e5SOllivier Robert *buffpp += strlen((char *)*buffpp); 253c0b746e5SOllivier Robert } 254c0b746e5SOllivier Robert 255c0b746e5SOllivier Robert void 256c0b746e5SOllivier Robert get_mbg_cfgh( 257c0b746e5SOllivier Robert unsigned char **buffpp, 258c0b746e5SOllivier Robert CFGH *cfghp 259c0b746e5SOllivier Robert ) 260c0b746e5SOllivier Robert { 261c0b746e5SOllivier Robert int i; 262c0b746e5SOllivier Robert 263c0b746e5SOllivier Robert cfghp->csum = get_lsb_short(buffpp); 264c0b746e5SOllivier Robert cfghp->valid = get_lsb_short(buffpp); 265c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &cfghp->tot_51); 266c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &cfghp->tot_63); 267c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &cfghp->t0a); 268c0b746e5SOllivier Robert 269c0b746e5SOllivier Robert for (i = MIN_SVNO; i <= MAX_SVNO; i++) 270c0b746e5SOllivier Robert { 271c0b746e5SOllivier Robert get_mbg_cfg(buffpp, &cfghp->cfg[i]); 272c0b746e5SOllivier Robert } 273c0b746e5SOllivier Robert 274c0b746e5SOllivier Robert for (i = MIN_SVNO; i <= MAX_SVNO; i++) 275c0b746e5SOllivier Robert { 276c0b746e5SOllivier Robert get_mbg_health(buffpp, &cfghp->health[i]); 277c0b746e5SOllivier Robert } 278c0b746e5SOllivier Robert } 279c0b746e5SOllivier Robert 280c0b746e5SOllivier Robert void 281c0b746e5SOllivier Robert get_mbg_utc( 282c0b746e5SOllivier Robert unsigned char **buffpp, 283c0b746e5SOllivier Robert UTC *utcp 284c0b746e5SOllivier Robert ) 285c0b746e5SOllivier Robert { 286c0b746e5SOllivier Robert utcp->csum = get_lsb_short(buffpp); 287c0b746e5SOllivier Robert utcp->valid = get_lsb_short(buffpp); 288c0b746e5SOllivier Robert 289c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &utcp->t0t); 290c0b746e5SOllivier Robert 291c0b746e5SOllivier Robert if (fetch_ieee754(buffpp, IEEE_DOUBLE, &utcp->A0, mbg_double) != IEEE_OK) 292c0b746e5SOllivier Robert { 293c0b746e5SOllivier Robert L_CLR(&utcp->A0); 294c0b746e5SOllivier Robert } 295c0b746e5SOllivier Robert 296c0b746e5SOllivier Robert if (fetch_ieee754(buffpp, IEEE_DOUBLE, &utcp->A1, mbg_double) != IEEE_OK) 297c0b746e5SOllivier Robert { 298c0b746e5SOllivier Robert L_CLR(&utcp->A1); 299c0b746e5SOllivier Robert } 300c0b746e5SOllivier Robert 301c0b746e5SOllivier Robert utcp->WNlsf = get_lsb_short(buffpp); 302c0b746e5SOllivier Robert utcp->DNt = get_lsb_short(buffpp); 303c0b746e5SOllivier Robert utcp->delta_tls = *(*buffpp)++; 304c0b746e5SOllivier Robert utcp->delta_tlsf = *(*buffpp)++; 305c0b746e5SOllivier Robert } 306c0b746e5SOllivier Robert 307c0b746e5SOllivier Robert void 308c0b746e5SOllivier Robert get_mbg_lla( 309c0b746e5SOllivier Robert unsigned char **buffpp, 310c0b746e5SOllivier Robert LLA lla 311c0b746e5SOllivier Robert ) 312c0b746e5SOllivier Robert { 313c0b746e5SOllivier Robert int i; 314c0b746e5SOllivier Robert 315c0b746e5SOllivier Robert for (i = LAT; i <= ALT; i++) 316c0b746e5SOllivier Robert { 317c0b746e5SOllivier Robert if (fetch_ieee754(buffpp, IEEE_DOUBLE, &lla[i], mbg_double) != IEEE_OK) 318c0b746e5SOllivier Robert { 319c0b746e5SOllivier Robert L_CLR(&lla[i]); 320c0b746e5SOllivier Robert } 321c0b746e5SOllivier Robert else 322c0b746e5SOllivier Robert if (i != ALT) 323c0b746e5SOllivier Robert { /* convert to degrees (* 180/PI) */ 324c0b746e5SOllivier Robert mfp_mul(&lla[i].l_i, &lla[i].l_uf, lla[i].l_i, lla[i].l_uf, rad2deg_i, rad2deg_f); 325c0b746e5SOllivier Robert } 326c0b746e5SOllivier Robert } 327c0b746e5SOllivier Robert } 328c0b746e5SOllivier Robert 329c0b746e5SOllivier Robert void 330c0b746e5SOllivier Robert get_mbg_xyz( 331c0b746e5SOllivier Robert unsigned char **buffpp, 332c0b746e5SOllivier Robert XYZ xyz 333c0b746e5SOllivier Robert ) 334c0b746e5SOllivier Robert { 335c0b746e5SOllivier Robert int i; 336c0b746e5SOllivier Robert 337c0b746e5SOllivier Robert for (i = XP; i <= ZP; i++) 338c0b746e5SOllivier Robert { 339c0b746e5SOllivier Robert if (fetch_ieee754(buffpp, IEEE_DOUBLE, &xyz[i], mbg_double) != IEEE_OK) 340c0b746e5SOllivier Robert { 341c0b746e5SOllivier Robert L_CLR(&xyz[i]); 342c0b746e5SOllivier Robert } 343c0b746e5SOllivier Robert } 344c0b746e5SOllivier Robert } 345c0b746e5SOllivier Robert 346c0b746e5SOllivier Robert static void 347c0b746e5SOllivier Robert get_mbg_comparam( 348c0b746e5SOllivier Robert unsigned char **buffpp, 349c0b746e5SOllivier Robert COM_PARM *comparamp 350c0b746e5SOllivier Robert ) 351c0b746e5SOllivier Robert { 352c0b746e5SOllivier Robert int i; 353c0b746e5SOllivier Robert 354c0b746e5SOllivier Robert comparamp->baud_rate = get_lsb_long(buffpp); 355c0b746e5SOllivier Robert for (i = 0; i < sizeof(comparamp->framing); i++) 356c0b746e5SOllivier Robert { 357c0b746e5SOllivier Robert comparamp->framing[i] = *(*buffpp)++; 358c0b746e5SOllivier Robert } 359c0b746e5SOllivier Robert comparamp->handshake = get_lsb_short(buffpp); 360c0b746e5SOllivier Robert } 361c0b746e5SOllivier Robert 362c0b746e5SOllivier Robert void 363c0b746e5SOllivier Robert get_mbg_portparam( 364c0b746e5SOllivier Robert unsigned char **buffpp, 365c0b746e5SOllivier Robert PORT_PARM *portparamp 366c0b746e5SOllivier Robert ) 367c0b746e5SOllivier Robert { 368c0b746e5SOllivier Robert int i; 369c0b746e5SOllivier Robert 370c0b746e5SOllivier Robert for (i = 0; i < N_COM; i++) 371c0b746e5SOllivier Robert { 372c0b746e5SOllivier Robert get_mbg_comparam(buffpp, &portparamp->com[i]); 373c0b746e5SOllivier Robert } 374c0b746e5SOllivier Robert for (i = 0; i < N_COM; i++) 375c0b746e5SOllivier Robert { 376c0b746e5SOllivier Robert portparamp->mode[i] = *(*buffpp)++; 377c0b746e5SOllivier Robert } 378c0b746e5SOllivier Robert } 379c0b746e5SOllivier Robert 380c0b746e5SOllivier Robert #define FETCH_DOUBLE(src, addr) \ 381c0b746e5SOllivier Robert if (fetch_ieee754(src, IEEE_DOUBLE, addr, mbg_double) != IEEE_OK) \ 382c0b746e5SOllivier Robert { \ 383c0b746e5SOllivier Robert L_CLR(addr); \ 384c0b746e5SOllivier Robert } 385c0b746e5SOllivier Robert 386c0b746e5SOllivier Robert void 387c0b746e5SOllivier Robert get_mbg_eph( 388c0b746e5SOllivier Robert unsigned char ** buffpp, 389c0b746e5SOllivier Robert EPH *ephp 390c0b746e5SOllivier Robert ) 391c0b746e5SOllivier Robert { 392c0b746e5SOllivier Robert ephp->csum = get_lsb_short(buffpp); 393c0b746e5SOllivier Robert ephp->valid = get_lsb_short(buffpp); 394c0b746e5SOllivier Robert 395c0b746e5SOllivier Robert ephp->health = get_lsb_short(buffpp); 396c0b746e5SOllivier Robert ephp->IODC = get_lsb_short(buffpp); 397c0b746e5SOllivier Robert ephp->IODE2 = get_lsb_short(buffpp); 398c0b746e5SOllivier Robert ephp->IODE3 = get_lsb_short(buffpp); 399c0b746e5SOllivier Robert 400c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &ephp->tt); 401c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &ephp->t0c); 402c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &ephp->t0e); 403c0b746e5SOllivier Robert 404c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->sqrt_A); 405c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->e); 406c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->M0); 407c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->omega); 408c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->OMEGA0); 409c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->OMEGADOT); 410c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->deltan); 411c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->i0); 412c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->idot); 413c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->crc); 414c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->crs); 415c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->cuc); 416c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->cus); 417c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->cic); 418c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->cis); 419c0b746e5SOllivier Robert 420c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->af0); 421c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->af1); 422c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->af2); 423c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ephp->tgd); 424c0b746e5SOllivier Robert 425c0b746e5SOllivier Robert ephp->URA = get_lsb_short(buffpp); 426c0b746e5SOllivier Robert 427c0b746e5SOllivier Robert ephp->L2code = *(*buffpp)++; 428c0b746e5SOllivier Robert ephp->L2flag = *(*buffpp)++; 429c0b746e5SOllivier Robert } 430c0b746e5SOllivier Robert 431c0b746e5SOllivier Robert void 432c0b746e5SOllivier Robert get_mbg_alm( 433c0b746e5SOllivier Robert unsigned char **buffpp, 434c0b746e5SOllivier Robert ALM *almp 435c0b746e5SOllivier Robert ) 436c0b746e5SOllivier Robert { 437c0b746e5SOllivier Robert almp->csum = get_lsb_short(buffpp); 438c0b746e5SOllivier Robert almp->valid = get_lsb_short(buffpp); 439c0b746e5SOllivier Robert 440c0b746e5SOllivier Robert almp->health = get_lsb_short(buffpp); 441c0b746e5SOllivier Robert get_mbg_tgps(buffpp, &almp->t0a); 442c0b746e5SOllivier Robert 443c0b746e5SOllivier Robert 444c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->sqrt_A); 445c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->e); 446c0b746e5SOllivier Robert 447c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->M0); 448c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->omega); 449c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->OMEGA0); 450c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->OMEGADOT); 451c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->deltai); 452c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->af0); 453c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &almp->af1); 454c0b746e5SOllivier Robert } 455c0b746e5SOllivier Robert 456c0b746e5SOllivier Robert void 457c0b746e5SOllivier Robert get_mbg_iono( 458c0b746e5SOllivier Robert unsigned char **buffpp, 459c0b746e5SOllivier Robert IONO *ionop 460c0b746e5SOllivier Robert ) 461c0b746e5SOllivier Robert { 462c0b746e5SOllivier Robert ionop->csum = get_lsb_short(buffpp); 463c0b746e5SOllivier Robert ionop->valid = get_lsb_short(buffpp); 464c0b746e5SOllivier Robert 465c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ionop->alpha_0); 466c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ionop->alpha_1); 467c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ionop->alpha_2); 468c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ionop->alpha_3); 469c0b746e5SOllivier Robert 470c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ionop->beta_0); 471c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ionop->beta_1); 472c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ionop->beta_2); 473c0b746e5SOllivier Robert FETCH_DOUBLE(buffpp, &ionop->beta_3); 474c0b746e5SOllivier Robert } 475c0b746e5SOllivier Robert 476c0b746e5SOllivier Robert /* 477c0b746e5SOllivier Robert * data_mbg.c,v 478c0b746e5SOllivier Robert * Revision 4.3 1999/02/21 12:17:42 kardel 479c0b746e5SOllivier Robert * 4.91f reconcilation 480c0b746e5SOllivier Robert * 481c0b746e5SOllivier Robert * Revision 4.2 1998/06/14 21:09:39 kardel 482c0b746e5SOllivier Robert * Sun acc cleanup 483c0b746e5SOllivier Robert * 484c0b746e5SOllivier Robert * Revision 4.1 1998/05/24 08:02:06 kardel 485c0b746e5SOllivier Robert * trimmed version log 486c0b746e5SOllivier Robert * 487c0b746e5SOllivier Robert * Revision 4.0 1998/04/10 19:45:33 kardel 488c0b746e5SOllivier Robert * Start 4.0 release version numbering 489c0b746e5SOllivier Robert */ 490c0b746e5SOllivier Robert 491