Example #1
0
int parse_anza_SP ( 
    uchar_t *packet,
   ushort_t pkttype )
{

double ptime, ytime, sec;
ulong ysec;
int year, day, hour, min;
PktPar pack;

/* Get parameters for current datatype  */

      if( !get_packet( pkttype, &pack) ) return -1;
    
      Par.staid = packet[6]*256 + packet[7];
      Par.packet = pack;
      Par.chan = -1; 
      Par.hdrtype = ( int )decode( pack.hdrtype ); 
      
      ytime = now();
      e2h( ytime, &year, &day, &hour, &min, &sec);
      ptime = epoch( year * 1000 );
      memcpy( (char *) &ysec, (char *) &packet[10], 4);
      Par.time = ptime + ysec;
      
  return (int) pkttype; 
      
      
}
Example #2
0
void initpf( char *pf )

{
    double epoch, sec;
    Pf  *Param;
    Tbl *Inputs;
    Arr *pfarr;
    DIR *dirp;
    struct dirent *direntp;
    char *istr;
    char *path, exten[132], name[132], *pfile;
    int getone = 0;
    int yr, day, hr, min;
    int i, n, ninputs;


    if( (pfile = (char *) malloc(256)) == NULL)
        elog_die( 1, "initpf(): malloc error\n");

    /* Get today's time  */

    if( pf == NULL )  {
        epoch = now();
        e2h(epoch, &yr, &day, &hr, &min, &sec);

        /* Get List of Parameter Files  */

        if( (path = getenv("DASPF_PATH") ) == NULL || (int) strlen(path) <= 0 )  {
            DASPF = "pkt";

        }  else  {
            sprintf( pfile, "%04d%03d%02d%02d\0", yr, day, hr, min);
            dirp = opendir(path);
            if(dirp == NULL)
                elog_die(1, "initIP():Can't open %s directory.\n", path);
            pfarr = newarr( 0 );
            while ( (direntp = readdir(dirp)) != NULL ) {
                istr = direntp->d_name;
                fexten( istr, exten);
                if( strncmp( exten, "pf", strlen("pf")) == 0)
                    setarr( pfarr, direntp->d_name, "Y" );
            }

            /* Get the most recent PF name  */

            Inputs = keysarr( pfarr );
            ninputs = maxtbl( Inputs );
            for( i = 0; i < ninputs; i++ )  {
                istr = ( char *) gettbl( Inputs, i );
                if( strcmp( istr, pfile ) == 0 ) {
                    sprintf( pfile, "%s/%s\0", path, istr);
                    getone = 1;
                    break;
                }
                else if( strcmp( istr, pfile ) > 0 )  {
                    if( i == 0 )
                        istr = ( char *) gettbl( Inputs, (0));
                    else
                        istr = ( char *) gettbl( Inputs, (i -1));
                    strncpy( name, istr, strlen(istr));
                    name[strlen(istr)-strlen(".pf")] = '\0';
                    for(n = 0; n < (int) strlen(name); n++)
                        if(!isdigit(name[n])) break;
                    if( n == (int) strlen(name))
                        sprintf( pfile, "%s/%s\0",path, istr);
                    else
                        sprintf( pfile, "pkt.pf" );
                    getone = 1;
                    break;
                }
            }  /* end for  */
            if( !getone ) {
                istr = ( char *) gettbl( Inputs, (ninputs -1));
                sprintf( pfile, "%s/%s\0",path, istr);
            }

            /* Read configuration file  */

            pfile[strlen(pfile)-strlen(".pf")] = '\0';
            DASPF = pfile;
            freearr( pfarr, 0 );
            closedir( dirp );
        }
    }  else {

        /* Read configuration file  */

        fexten( pf, exten);
        if( strncmp( exten, "pf", strlen("pf")) == 0)
            pf[strlen(pf) - strlen(".pf")] = '\0';
        DASPF =  pf;
    }

}
Example #3
0
int parse_bba_DP( 
    uchar_t *packet,
    ushort_t pkttype )
{

double ptime, ytime, sec;
unsigned long ysec;
int srate;
int year, day, hour, min;
PktPar pack;

/* Get parameters for current datatype  */

      if( !get_packet( pkttype, &pack) ) return -1;
      
      Par.packet = pack;
      Par.hdrtype = ( int )decode( pack.hdrtype ); 

/* Get packet time  */
 
      ytime = now();
      e2h( ytime, &year, &day, &hour, &min, &sec);
      ptime = epoch( year * 1000 );
/*
        Par.time = ptime + ysec;
*/

      memcpy( (char *) &ysec, &packet[10],  4);  
      Par.time = ptime + ysec;
      
      Par.chan = -1;                 
      Par.staid = packet[6]*256 + packet[7];

      /* 
         Now try to get sample rate from a header.
         Some old headers don't have that value filled - so be carefull!
       */

      srate = packet[20];  /* sample rate value in a raw packet  */
      if(srate > 0 )  {
	if(srate < 10)  {
           strcpy(pack.hdrtype, "BBA\0");
           strcpy(pack.pkttype, "CBB1S\0");
	   Par.packet = pack;
	   Par.packet.srate = (float) srate;
           Par.hdrtype = ( int )decode( pack.hdrtype ); 
	   Par.packet.nsamp = srate*60;  /* 60 sec of data */
           Par.raw.pkttype = CBB1S;
	}  else if(srate >= 100)  {
           strcpy(pack.hdrtype, "BBA\0");
           strcpy(pack.pkttype, "CBBHS\0");
	   Par.packet = pack;
	   Par.packet.srate = (float) srate;
           Par.hdrtype = ( int )decode( pack.hdrtype ); 
	   Par.packet.nsamp = srate*1;  /* 1 sec of data  */
           Par.raw.pkttype = CBBHS;
	}  else  { 
           strcpy(pack.hdrtype, "BBA\0");
           strcpy(pack.pkttype, "CBBLS\0");
	   Par.packet = pack;
	   Par.packet.srate = (float) srate;
           Par.hdrtype = ( int )decode( pack.hdrtype ); 
	   Par.packet.nsamp = srate*5;  /* 5 sec of data */
           Par.raw.pkttype = CBBLS;
	}
      } 
      return (int) pkttype;
}
int parse_newbba(uchar_t *packet, ushort_t pkttype)
{

double ptime, ytime, sec;
unsigned long ysec;
int year, day, hour, min;
PktPar pack;
int i, doff, len, chid, chbytes;
unsigned short val;
char *chname, chan[128];

      memcpy((char *) &val, &packet[PSIZE_OFF],  2);   /* packet size  */
      if(val == 0) { 
 	 elog_complain(0, "Wrong header. Zero packet size detected.\n");
	 return(-1);
      } else pack.size = ntohs(val);
      memcpy((char *) &val, &packet[STAID_OFF],  2);   /* sta ID  */
      if(pack.size == 0) { 
 	 elog_complain(0, "Wrong header. Zero packet size detected.\n");
	 return(-1);
      } else Par.staid = ntohs(val);
      memcpy((char *) &val, &packet[NSAMP_OFF],  2);  /* # of samples */
      if(val == 0) { 
 	 elog_complain(0, "Wrong header. Zero number of samples detected.\n");
	 return(-1);
      } else pack.nsamp = ntohs(val);
      memcpy((char *) &val, &packet[SRATE_OFF],  2);  /* Sample rate  */
      if(val == 0) { 
 	 elog_complain(0, "Wrong header. Zero sample rate detected.\n");
	 return(-1);
      }  else pack.srate = ntohs(val);

      val = packet[HSIZE_OFF]*256 + packet[HSIZE_OFF+1]; /* header size */
      if(val == 0) { 
 	 elog_complain(0, "Wrong header. Zero header size detected.\n");
	 return(-1);
      }  else pack.hdrsiz = val;

      pack.nchan = packet[NCHAN_OFF];  /* Number of channels */
      if(pack.nchan == 0) { 
 	 elog_complain(0, "Wrong header. Zero number of channels detected.\n");
	 return(-1);
      }

if(PktLog) {
fprintf(stderr, "staid=%d rate=%f nsamp=%d psize=%d hsize=%d nchan=%d\n",
Par.staid, pack.srate, pack.nsamp, pack.size, pack.hdrsiz, pack.nchan);
fflush(stderr);
}      
      /* get data type */
      switch(packet[DTYPE_OFF])  {
	  case 0x0:
             strcpy(pack.datatype, "s2");
	     break;
	  case 0x01:
             strcpy(pack.datatype, "s4");
	     break;
          case 0x02:
             strcpy(pack.datatype, "t4");
	     break;
          case 0x10:
          case 0x11:
          case 0x12:
             strcpy(pack.datatype, "c0");
	     break;
          default:
             elog_complain(0, "Can't recognize a data type - %d(%02x)\n", 
                      packet[DTYPE_OFF], packet[DTYPE_OFF]);
             return -1;
      }
      Par.raw.pkttype = pkttype;
      strcpy(pack.hdrtype, "BBA\0");       /* Header type */
      Par.hdrtype = (int) decode(pack.hdrtype); 
      strcpy(pack.net_type, Network_Name);  
      
      /* Get packet time  */
      ytime = now();
      e2h(ytime, &year, &day, &hour, &min, &sec);
      ptime = epoch(year * 1000);

      memcpy((char *) &ysec, &packet[TIME_OFF],  4);  
      Par.time = ptime + ntohl(ysec);
      Par.chan = -1;                 
      /* now we must to get channel names */


     
       switch(pkttype)  {
         case 0xdaab:  /* Data packets */
             if(pack.srate < 10)  {
		strcpy(pack.pkttype, "BBA/LS\0");
             }  else if(pack.srate >= 100)  {
                 strcpy(pack.pkttype, "BBA/HS\0");
             }  else {
                 strcpy(pack.pkttype, "BBA/BS\0");
             }
             get_sta_name();
	     break;
         case 0xdabc:  /* DAS status packets */
	    strcpy(pack.pkttype, "BBA/DAS\0");
            get_sta_name();
	    break;
	 case 0xdacd:   /* DC status packets */
	    strcpy(pack.pkttype, "BBA/DC\0");
	    sprintf(Par.staname, "%d\0", Par.staid );
	    break;
	 case 0xdade:  /* RXT packets */
	    strcpy(pack.pkttype, "BBA/RTX\0");
            get_sta_name();
	    break;
         default:
            elog_complain(0, "Can't recognize a data packet type - %d(%02x)\n",
	             pkttype, pkttype);
	    return(-1);
      }
      Par.packet = pack;
/*
printf("dtype=%s net=%s \n ", pack.datatype, pack.net_type);
*/
      memset( chan, 0, 128);
      memcpy( chan, "_", strlen("_"));
      len++;
      
      doff = pack.hdrsiz;
      for(i = 0, len=0; i < pack.nchan; i ++)  {
	val = packet[doff];
        chid = val;
        val = packet[doff+CHBYTES_OFF]*256 + packet[doff+CHBYTES_OFF+1];
	chbytes = val;

/*
printf("chan=%d bytes=%d\n", chid, chbytes);
*/

	chname = get_chname_from_id(pkttype, Par.packet.pkttype, Par.staid, chid);
	if(chname == 0) return(-1);
	strcat(chan, chname);
        len += strlen(chname);
        free(chname);
        strcat( chan, "_");
        len++;
        doff += CHHDR_SIZE+chbytes;
      }
      chan[len] = '\0';
      strcpy(Par.chnames, chan);

/*
printf("chan=%s\n", chan);
*/

      return ((int) pkttype);
}