示例#1
0
/* input gw10 raw message ------------------------------------------------------
* input next gw10 raw message from stream
* args   : raw_t *raw   IO     receiver raw data control struct
*          unsigned char data I stream data (1 byte)
* return : status (-1: error message, 0: no message, 1: input observation data,
*                  2: input ephemeris, 3: input sbas message,
*                  9: input ion/utc parameter)
*
* notes  : to specify input options, set raw->opt to the following option
*          strings separated by spaces.
*
*          -EPHALL    : input all ephemerides
*
*-----------------------------------------------------------------------------*/
extern int input_gw10(raw_t *raw, unsigned char data)
{
    int stat;
    trace(5,"input_gw10: data=%02x\n",data);
    
    raw->buff[raw->nbyte++]=data;
    
    /* synchronize frame */
    if (raw->buff[0]!=GW10SYNC) {
        raw->nbyte=0;
        return 0;
    }
    if (raw->nbyte>=2&&!(raw->len=msglen(raw->buff[1]))) {
        raw->nbyte=0;
        return 0;
    }
    if (raw->nbyte<2||raw->nbyte<raw->len) return 0;
    
    if (!chksum(raw->buff,raw->len)) {
        tracet(2,"gw10 message checksum error msg=%d\n",raw->buff[1]);
        raw->buff[0]=0;
        raw->nbyte=0;
        return -1;
    }
    /* decode gw10 raw message */
    stat=decode_gw10(raw);
    
    raw->buff[0]=0;
    raw->nbyte=0;
    
    return stat;
}
示例#2
0
文件: l9x.c 项目: EtchedPixels/L9X
static void decompress(uint8_t *p, uint16_t m)
{
  uint8_t d;
  uint16_t l;
  /* Walk the table skipping messages */
  if (m == 0)
    return;
  while(--m) {
    p = msglen(p, &l);
    p += l - 1;
  }
  p = msglen(p, &l);
  /* A 1 byte message means its 0 text chars long */
  while(--l) {
    d = getb(p++);
    if (d < 3)
      return;
    if (d < 0x5E)
      print_char(d + 0x1d);
    else
      decompress(worddict - 1, d - 0x5d);
  }
}