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; }
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; } }
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); }