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 + -
显示快捷键?