Esempio n. 1
0
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 ) ; 
	    }
     }

}
Esempio n. 2
0
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;
     }
}