void wrt_last_rec ( Db_buffer *buf ) { int result ; char *s ; if ( buf->params->datacode == trSEED ) { result = csteim (buf->steim, save_seed, 0, 0) ; if ( result < 0 ) die ( 1, "steim compression failed to write final bytes\n" ) ; else if ( result > 0 ) { complain ( 1, "steim compression problems for %s_%s_%s at %s\n", buf->net, buf->sta, buf->chan, s=strtime(buf->crnt_time) ); free(s) ; } if ( buf->steim != 0 ) { freesteim ( buf->steim ) ; buf->steim = stinit ( buf ) ; } } }
int liss2orbpkt ( char *seed, int size, char *database, int remap, char *srcname, double *time, char **packet, int *nbytes, int *bufsize ) { int zero = 0, two=2 ; int needed ; char *cp ; double samprate ; double calib, calper ; float fcalib, fcalper; char segtype[4] ; char sta[16], chan[16] ; static int *data, datasz=0 ; int nsamp ; Steim *conf ; Srcname parts ; int retcode = 0 ; if ( strncmp(seed, "000000 ", 64 ) == 0 ) { return -5 ; /* some kind of empty packet to keep connection open? */ } retcode = UNSEED ( seed, size, &conf, time, &samprate, &nsamp, &data, &datasz ) ; switch ( retcode ) { case 0: needed = 2*size ; SIZE_BUFFER ( char *, *packet, *bufsize, needed ) ; cp = *packet ; strcpy ( parts.src_net, conf->sdh.net ) ; strcpy ( parts.src_sta, conf->sdh.sta ) ; strcpy ( parts.src_chan, conf->sdh.chan ) ; strcpy ( parts.src_loc, conf->sdh.loc ) ; strcpy ( parts.src_suffix, "LISS" ) ; *parts.src_subcode = 0 ; N2H4 (cp, &zero, 1); cp += 4 ; N2H4 (cp, &two, 1); cp += 4 ; HI2NS (cp, &nsamp, 1); cp += 2 * 1; cp += 2; HD2NF (cp, &samprate, 1); cp += 4 ; if (database) { if (map_seed_netsta ( conf->sdh.net, conf->sdh.sta, sta ) < 0) { retcode = -1; break; } if (map_seed_chanloc ( sta, conf->sdh.chan, conf->sdh.loc, chan ) < 0) { retcode = -1; break; } } if ( remap ) { strcpy ( parts.src_sta, sta ) ; strcpy ( parts.src_chan, chan ) ; strcpy ( parts.src_loc, "" ) ; } join_srcname ( &parts, srcname) ; if (database) dbget_calib ( sta, chan, *time, database, &calib, &calper, segtype ); else { calib = 0.0; calper = -1.0; strcpy (segtype, "V"); } fcalib = calib ; N2H4 (cp, &fcalib, 1); cp += 4 * 1; fcalper = calper ; N2H4 (cp, &fcalper, 1); cp += 4 * 1; memcpy (cp, segtype, 1); cp += 1 * 1; memcpy (cp, seed, size) ; cp += size ; *nbytes = cp-*packet ; freesteim(conf) ; break ; case -2: /* got garbage */ if ( conf->sdh.samprate_factor != 0 || conf->sdh.samprate_multiplier != 0) { complain ( 0, "Can't decode this packet:" ) ; hexdump ( stderr, seed, size ) ; } break; default: case -1: complain ( 0, "failed to decode packet." ) ; hexdump ( stderr, seed, size ) ; break; case -3: /* unsupported formats */ case -4: /* log data */ break ; } return retcode ; }
int liss_ucompress( int *data, int pktsize, int doff, char *indata, ushort_t nsamp, uchar_t dtype ) { register int lp,ct; register int *oarray, l_data; int ret; Steim *conf ; int *sud, npts; oarray=(int *) data; ct=0; switch ( dtype ) { case 1: case 32: for (lp=0; lp<nsamp; lp+=2) { register short j; j = (indata[lp] & 0xFF) << 8; j |= (indata[lp+1] & 0xFF); *oarray++ = (int) j; ct++; } return(ct); case 3: for (lp=0; lp<nsamp; lp+=4) { register int *pt; pt = (int *) &indata[lp]; *oarray++ = *pt; ct++; } return(ct); case 10: conf = ( Steim *) newsteim(); conf->record = indata; conf->record_size = pktsize-doff; conf->sdh.data_offset = 0; conf->sdh.nsamp = nsamp; conf->level = 1; if ( usteim (conf, &sud, &npts) ) { elog_log(0, "unstuffqorbpkt: usteim() error.\n"); return (0); } memcpy (data, sud, nsamp*4); conf->record = 0; freesteim(conf); return (nsamp*4); case 11: conf = ( Steim *) newsteim(); conf->record = indata; conf->record_size = pktsize-doff; conf->sdh.data_offset = 0; conf->sdh.nsamp = nsamp; conf->level = 2; if ( usteim (conf, &sud, &npts) ) { elog_log(0, "unstuffqorbpkt: usteim() error.\n"); return (0); } memcpy (data, sud, nsamp*4); conf->record = 0; freesteim(conf); return (nsamp*4); case 16: case 33: for (lp=0; lp<(nsamp*2); lp+=2) { register short j; register int gr; j = ( indata[lp] & 0x3F) << 8; j |= ( indata[lp+1] & 0xFF); j -= 8191; l_data = (int) j; gr = ( indata[lp] & 0xC0) >> 6; switch(gr) { case 1: l_data <<= 2; break; case 2: l_data <<= 4; break; case 3: l_data <<= 7; break; } *oarray++ = l_data; ct++; } return(ct); case 20: conf = ( Steim *) newsteim(); conf->record = indata; conf->record_size = pktsize-doff; conf->sdh.data_offset = 0; conf->sdh.nsamp = nsamp; conf->level = 2; if ( usteim (conf, &sud, &npts) ) { elog_log(0, "unstuffqorbpkt: usteim() error.\n"); return (0); } memcpy (data, sud, nsamp*4); conf->record = 0; freesteim(conf); return (nsamp*4); case 30: for (lp=0; lp<(nsamp*2); lp+=2) { register int j, gr; j = (indata[lp] & 0x0F) << 8; j |= (indata[lp+1] & 0xFF); if (j >= 0x800) j -= 4096; gr = (indata[lp] & 0xF0) >> 4; l_data = (int) j; l_data <<= (10-gr); *oarray++ = l_data; ct++; } return ct; case 50: for (lp=0; lp<nsamp; lp++) { *oarray++ = indata[lp]; ct++; } return(ct); default: elog_complain(0, "unknown data format %c\n", dtype ); return -1; break; } }