libipvlbi.h
来自「实现ipvlbi数据记录」· C头文件 代码 · 共 980 行 · 第 1/3 页
H
980 行
/* for (i=0; i < 10; i++) { printf("%d %s %d %d %d %d %d %d %d %s\n",i+1,skd->obsstar[i],skd->starid[i], skd->start[i][0],skd->start[i][1],skd->start[i][2], skd->start[i][3],skd->start[i][4],skd->dura[i],skd->obsid[i]); } for (i=skd->nobs-10; i < skd->nobs; i++) { printf("%d %s %d %d %d %d %d %d %d %s\n",i+1,skd->obsstar[i],skd->starid[i], skd->start[i][0],skd->start[i][1],skd->start[i][2], skd->start[i][3],skd->start[i][4],skd->dura[i],skd->obsid[i]); } */ //exitend2:}void parsebit32n(unsigned char* bit32, int* spatn, int* smplbit, int* sfreq, int* numch, long int* seconds){ int sdat[16]={1,2,4,8,0,0,0,0,0,0,0,0,0,0,0,0}; int fdat[16]={40,100,200,500,1000,2000,4000,8000,16000, 0,0,0,0,0,0,0}; int smplbit0, sfreq0, seco, nch; *spatn=(int)(bit32[3] & 255); // spatn = 139 means sync pattern smplbit0 = (bit32[2] >> 6) & 15; // 6 times bit shift to right *smplbit = sdat[smplbit0]; sfreq0 = ( bit32[2] >> 2) & 15 ; *sfreq=fdat[sfreq0]; nch = bit32[2] & 2; if (nch == 2) { *numch = 4; } else { *numch = 1; } seco = bit32[2] & 1; *seconds=seco*(long int)65536+ (long int)(bit32[1] & 255)*(long int)256+ (long int)(bit32[0] & 255);}/* headerchkn is updated on 2002-9-28 *//* old version is rename to headerchkn_old */void headerchkn(unsigned char* bit64, int* iok, int* spatn, int* smplbit, int* sfreq, int* numch, long int* seconds, int* hh, int* mm, int* ss){ int sdat[16]={1,2,4,8,0,0,0,0,0,0,0,0,0,0,0,0}; int fdat[16]={40,100,200,500,1000,2000,4000,8000,16000, 0,0,0,0,0,0,0}; int smplbit0, sfreq0, seco, nch; *iok=-1; /* sync pattern check */ if((bit64[0] == 0xFF) && (bit64[1] == 0xFF) && (bit64[2] == 0xFF) && (bit64[3] == 0xFF) && (bit64[7] == 0x8B)){ // this is sync block (new FMT) *iok=0; /* parse sampling information and get time data */ *spatn=(int)(bit64[7] & 255); // spatn = 139 means sync pattern smplbit0 = (bit64[6] >> 6) & 15; // 6 times bit shift to right *smplbit = sdat[smplbit0]; sfreq0 = ( bit64[6] >> 2) & 15 ; *sfreq=fdat[sfreq0]; nch = bit64[6] & 2; if (nch == 2) { *numch = 4; } else { *numch = 1; } seco = bit64[6] & 1; *seconds=seco*(long int)65536+ (long int)(bit64[5] & 255)*(long int)256+ (long int)(bit64[4] & 255); sec2hms(*seconds,&(*hh),&(*mm),&(*ss)); }}void headerchkn_old(unsigned char* bit64, int* iok, int* spatn, int* smplbit, int* sfreq, int* numch, long int* seconds, int* hh, int* mm, int* ss){ unsigned char bit32a[4]; unsigned char bit32b[4]; int i; *iok=-1; for (i=0; i<4; i++){ bit32a[i]=bit64[i]; bit32b[i]=bit64[i+4]; } if((bit32a[0] == 0xFF) && (bit32a[1] == 0xFF) && (bit32a[2] == 0xFF) && (bit32a[3] == 0xFF) ) // this is sync block (new FMT) { /* sync patern check in next 2nd 32bit data */ parsebit32n(bit32b,&(*spatn),&(*smplbit),&(*sfreq),&(*numch),&(*seconds)); if (*spatn == 139) // this is also sync { *iok=0; //sec2hms(&(*seconds),&(*hh),&(*mm),&(*ss)); sec2hms(*seconds,&(*hh),&(*mm),&(*ss)); } }}void parseADdata(u_int32_t *ia, int numb, int adbit, int *xdata, int *npos){/* IP-VLBI儃乕僪僨乕僞傪A/D暘夝擻偵墳偠偨僒儞僾儕儞僌抣楍偵曄姺偡傞 ch悢偼偙偺帪揰偱偼娭學偟側偄 [in] ia --- sampler (IP-VLBI board) out data numb -- size of ia (bytes) adbit -- sampler A/D resolution bits (1,2,4,8) [return] xdata -- data parsed into each sampled data npos -- valid number of data in xdata array Relation between # of ch (numch) and each ch time siries ch悢偑numch偲偡傞偲 ch# m偺k 斣栚偺僒儞僾儖僨乕僞偼 sdata(m,k)=xdata(k*numch+m) 偲側傞 */ int numb32, pat, n, i, ilast, ipos, ww; u_int32_t wd1,wd2; numb32=numb/4; ipos=0; ilast=32/adbit; pat=255; if (adbit == 1) {pat=1;} if (adbit == 2) {pat=3;} if (adbit == 4) {pat=15;} // if (adbit == 8) {pat=255;} for( n=0; n < numb32-1; n++) { wd1=ia[n]; wd2=ia[n+1]; /* check sync pattern */ //if ( (wd1 == 0xFFFFFFFFUL) && ((wd2 & 0xFF000000UL) == 0xFF000000UL) ) // sync detected if ( (wd1 == 0xFFFFFFFFUL) && ((wd2 & 0xFF000000UL) == 0x8B000000UL) ) // sync detected 02-07-17 { //printf("Sync detected "); // removed on 2002-10-3 goto exit1; } for(i=0; i<ilast; i++) { ww=(int)(wd1 & pat); xdata[ipos]=ww; wd1=wd1 >> adbit ; ipos++; } exit1: ; } *npos=ipos;}void parseADdata_2(unsigned char *ia, int numb, int adbit, int *xdata, int *npos){/* IP-VLBI儃乕僪僨乕僞傪A/D暘夝擻偵墳偠偨僒儞僾儕儞僌抣楍偵曄姺偡傞 ch悢偼偙偺帪揰偱偼娭學偟側偄 [in] ia --- sampler (IP-VLBI board) out data numb -- size of ia (bytes) adbit -- sampler A/D resolution bits (1,2,4,8) [return] xdata -- data parsed into each sampled data npos -- valid number of data in xdata array Relation between # of ch (numch) and each ch time siries ch悢偑numch偲偡傞偲 ch# m偺k 斣栚偺僒儞僾儖僨乕僞偼 sdata(m,k)=xdata(k*numch+m) 偲側傞 */ int numb8, pat, n, i, ilast, ipos, ww; u_int32_t wd1,wd2; numb8=numb; ipos=0; ilast=32/adbit; pat=255; if (adbit == 1) {pat=1;} if (adbit == 2) {pat=3;} if (adbit == 4) {pat=15;} /* if (adbit == 8) {pat=255;} */ wd1=((u_int32_t)ia[3] << 24); wd1=(wd1 | (u_int32_t)ia[2] << 16); wd1=(wd1 | (u_int32_t)ia[1] << 8); wd1=(wd1 | (u_int32_t)ia[0]); //printf("IN PARSE ia %d %d %d %d\n",(u_int32_t)ia[0],(u_int32_t)ia[1],(u_int32_t)ia[2],(u_int32_t)ia[3]); for( n=4; n < numb8-3; n+=4) { wd2=((u_int32_t)ia[n+3] << 24); wd2=(wd2 | (u_int32_t)ia[n+2] << 16); wd2=(wd2 | (u_int32_t)ia[n+1] << 8); wd2=(wd2 | (u_int32_t)ia[n]); /* check sync pattern */ //if ( (wd1 == 0xFFFFFFFFUL) && ((wd2 & 0xFF000000UL) == 0xFF000000UL) ) // sync detected if ( (wd1 == 0xFFFFFFFFUL) && ((wd2 & 0xFF000000UL) == 0x8B000000UL) ) // sync detected 02-07-17 { printf("Sync detected \n"); goto exit1; } for(i=0; i<ilast; i++) { ww=(int)(wd1 & pat); //printf("ww wd1 pat %d %d %d",ww,wd1,pat); //debug xdata[ipos]=ww; wd1=wd1 >> adbit ; ipos++; } wd1=wd2; exit1: ; } for(i=0; i<ilast; i++) { ww=(int)(wd1 & pat); //printf("ww wd1 pat %d %d %d",ww,wd1,pat); //debug xdata[ipos]=ww; wd1=wd1 >> adbit ; ipos++; } *npos=ipos;}void parseADdata_3(unsigned char *ia, int numb, int adbit, int *xdata, int *npos){/* IP-VLBI儃乕僪僨乕僞傪A/D暘夝擻偵墳偠偨僒儞僾儕儞僌抣楍偵曄姺偡傞 ch悢偼偙偺帪揰偱偼娭學偟側偄 [in] ia --- sampler (IP-VLBI board) out data numb -- size of ia (bytes) adbit -- sampler A/D resolution bits (1,2,4,8) [return] xdata -- data parsed into each sampled data npos -- valid number of data in xdata array Relation between # of ch (numch) and each ch time siries ch悢偑numch偲偡傞偲 ch# m偺k 斣栚偺僒儞僾儖僨乕僞偼 sdata(m,k)=xdata(k*numch+m) 偲側傞 */ int numb8, pat, n, i, ilast, ipos, ww; u_int32_t wd1,wd2; numb8=numb; ipos=0; ilast=32/adbit; pat=255; if (adbit == 1) {pat=1;} if (adbit == 2) {pat=3;} if (adbit == 4) {pat=15;} /* if (adbit == 8) {pat=255;} */ wd1=((u_int32_t)ia[3] << 24); wd1=(wd1 | (u_int32_t)ia[2] << 16); wd1=(wd1 | (u_int32_t)ia[1] << 8); wd1=(wd1 | (u_int32_t)ia[0]); //printf("IN PARSE ia %d %d %d %d\n",(u_int32_t)ia[0],(u_int32_t)ia[1],(u_int32_t)ia[2],(u_int32_t)ia[3]); for( n=4; n < numb8-3; n+=4) { wd2=((u_int32_t)ia[n+3] << 24); wd2=(wd2 | (u_int32_t)ia[n+2] << 16); wd2=(wd2 | (u_int32_t)ia[n+1] << 8); wd2=(wd2 | (u_int32_t)ia[n]); /* check sync pattern */ //if ( (wd1 == 0xFFFFFFFFUL) && ((wd2 & 0xFF000000UL) == 0xFF000000UL) ) // sync detected if ( (wd1 == 0xFFFFFFFFUL) && ((wd2 & 0xFF000000UL) == 0x8B000000UL) ) // sync detected 02-07-17 { printf("Sync detected \n"); goto exit1; } for(i=0; i<ilast; i++) { ww=(int)(wd1 & pat); //printf("ww wd1 pat %d %d %d",ww,wd1,pat); //debug xdata[ipos]=ww; wd1=wd1 >> adbit ; ipos++; } wd1=wd2; exit1: ; } for(i=0; i<ilast; i++) { ww=(int)(wd1 & pat); //printf("ww wd1 pat %d %d %d",ww,wd1,pat); //debug xdata[ipos]=ww; wd1=wd1 >> adbit ; ipos++; } *npos=ipos; //printf("numb8,ipos %d %d\n",numb8,ipos);}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?