📄 ogslibrary.c
字号:
// i4satid=i4p; ulong = i4satid & 0x3F; sf2[4][3] = sf2[4][3] | (ulong << 16); if (i4satid > 24 && i4satid < 33) {//// almanac data for satellite 25 thru 32 (frame 5, pages 2,3,4,5,7,8,9,10)// isv = i4satid;// gps_alm[isv].week=gps_week;// iae=int(sf2[4][3] & 0x00FFFFL);// gps_alm[isv].ety=iae*4.768371582E-7; ssint = int( gps_alm[isv].ety/(4.768371582E-7)); // 16 bits, scale 2^-21 ulong = long( ssint) & 0xFFFF; sf2[4][3] = sf2[4][3] | (ulong);// iatoa=int(sf2[4][4] >> 16);// gps_alm[isv].toa=iatoa*4096.0; schar = char( gps_alm[isv].toa/4096.0); // 8 bits, scale 2^12 ulong = long( schar) & 0xFF; sf2[4][4] = sf2[4][4] | (ulong << 16);// iadeli=sf2[4][4] & 0x00FFFFL;// if (bit_test_l(iadeli,16)) // iadeli=iadeli | 0xFFFF0000L;// gps_alm[isv].inc=(iadeli*1.907348633E-6+0.3)*pi; ssint = int( (gps_alm[isv].inc/pi-0.3)/1.907348633E-6); // 16 bits, scale 2^-19 ulong = long( ssint) & 0xFFFF; sf2[4][4] = sf2[4][4] | (ulong);// iomegad=int(sf2[4][5] >> 8);// gps_alm[isv].rra=iomegad*3.637978807E-12*pi; ssint = int( gps_alm[isv].rra/(3.637978807E-12*pi)); // 16 bits, scale 2^-38 ulong = long( ssint) & 0xFFFF; sf2[4][5] = sf2[4][5] | (ulong << 8);// gps_alm[isv].health=int(sf2[4][5] & 0x0000FF); ulong = long( gps_alm[isv].health) & 0xFF; sf2[4][5] = sf2[4][5] | (ulong);// iasqr=sf2[4][6];// gps_alm[isv].sqa=iasqr*4.8828125E-4;// if (gps_alm[isv].sqa>0.0) // gps_alm[isv].w=19964981.84/pow(gps_alm[isv].sqa,3); ssint = int( gps_alm[isv].sqa/(4.8828125E-4)); // 16 bits, scale 2^-11 ulong = long( ssint) & 0xFFFF; sf2[4][6] = sf2[4][6] | (ulong);// iaomega0=sf2[4][7];// if (bit_test_l(iaomega0,24)) // iaomega0=iaomega0 | 0xFF000000L;// gps_alm[isv].lan=iaomega0*1.192092896E-7*pi; ulong = long( gps_alm[isv].lan/(1.192092896E-7*pi)) & 0xFFFFFF; // 24 bits, scale 2^-23, rad if ( ulong & (0x1L << (24-1))) // test bit 24 ulong = ulong | 0xFF000000L; sf2[4][7] = sf2[4][7] | (ulong);// iaw=sf2[4][8];// if (bit_test_l(iaw,24)) // iaw=iaw | 0xFF000000L;// gps_alm[isv].aop=iaw*1.192092896E-7*pi; ulong = long( gps_alm[isv].aop/(1.192092896E-7*pi)) & 0xFFFFFF; // 24 bits, scale 2^-23, rad if ( ulong & (0x1L << (24-1))) // test bit 24 ulong = ulong | 0xFF000000L; sf2[4][8] = sf2[4][8] | (ulong);// iam0=sf2[4][9];// if (bit_test_l(iam0,24)) // iam0=iam0 | 0xFF000000L; // gps_alm[isv].ma=iam0*1.192092896E-7*pi; ulong = long( gps_alm[isv].ma/(1.192092896E-7*pi)) & 0xFFFFFF; // 24 bits, scale 2^-23, rad if ( ulong & (0x1L << (24-1))) // test bit 24 ulong = ulong | 0xFF000000L; sf2[4][9] = sf2[4][9] | (ulong);// iaaf0=(sf2[4][10] >> 13) | (sf2[4][10] & 0x1C);// if ( bit_test_l( iaaf0, 11)) // iaaf0=iaaf0 | 0xFFFFF800L;// gps_alm[isv].af0=iaaf0*9.536743164E-7; ulong = long( gps_alm[isv].af0/(9.536743164E-7)) & 0x7FF; // 11 bits, scale 2^-20 if ( ulong & (0x1L << (11-1))) // test bit 11 ulong = ulong | 0xFFFFF800L; sf2[4][10] = sf2[4][10] | ((ulong & 0x7) << 2); sf2[4][10] = sf2[4][10] | ((ulong & 0x7F8) << 13);// iaaf1=(sf2[4][10] | 0xFFE0) >> 5;// if (bit_test_l(iaaf1,11)) // iaaf1=iaaf1 | 0xFFFFF800L;// gps_alm[isv].af1=iaaf1*3.637978807E-12; ulong = long( gps_alm[isv].af1/(3.637978807E-12)) & 0x7FF; // 11 bits, scale 2^-38 if ( ulong & (0x1L << (11-1))) // test bit 11 ulong = ulong | 0xFFFFF800L; sf2[4][10] = sf2[4][10] | (ulong << 5); } else if ( i4satid == 55) {//// special messages (22 ASCII chars) (frame 4, page 17)//// gps_alm[prn].text_message[0]=char((sf2[4][3] & 0x00FF00) >> 8); ulong = long( gps_alm[prn].text_message[0]) & 0xFF; // 8 bits sf2[4][3] = sf2[4][3] | (ulong << 8);// gps_alm[prn].text_message[1]=char( sf2[4][3] & 0x0000FF); ulong = long( gps_alm[prn].text_message[1]) & 0xFF; // 8 bits sf2[4][3] = sf2[4][3] | (ulong); for ( k=1; k<=7; k++) {// gps_alm[prn].text_message[3*k-1] = char(sf2[4][k+3] >> 16); ulong = long( gps_alm[prn].text_message[3*k-1]) & 0xFF; // 8 bits sf2[4][k+3] = sf2[4][k+3] | (ulong << 16);// gps_alm[prn].text_message[3*k ] = char((sf2[4][k+3] & 0x00FF00) >> 8); ulong = long( gps_alm[prn].text_message[3*k]) & 0xFF; // 8 bits sf2[4][k+3] = sf2[4][k+3] | (ulong << 8);// gps_alm[prn].text_message[3*k+1] = char(sf2[4][k+3] & 0x0000FF); ulong = long( gps_alm[prn].text_message[3*k+1]) & 0xFF; // 8 bits sf2[4][k+3] = sf2[4][k+3] | (ulong); } } else if ( i4satid == 56) {//// ionospheric and UTC data (frame 4, page 18)//// ial0=int((sf2[4][3] & 0x00FF00) >> 8);// al0=ial0*9.313225746e-10; schar = char( iono->al0/(9.313225746e-10)); // 8 bits, scale 2^-30 ulong = long( schar) & 0xFF; sf2[4][3] = sf2[4][3] | (ulong << 8);// ial1= int(sf2[4][3] & 0x0000FF);// al1=ial1*7.4505806e-9; schar = char( iono->al1/(7.4505806e-9)); // 8 bits, scale 2^-27 ulong = long( schar) & 0xFF; sf2[4][3] = sf2[4][3] | (ulong);// ial2= int(sf2[4][4] >> 16);// al2=ial2*5.960464478e-8; schar = char( iono->al2/(5.960464478e-8)); // 8 bits, scale 2^-24 ulong = long( schar) & 0xFF; sf2[4][4] = sf2[4][4] | (ulong << 16);// ial3=int((sf2[4][4] & 0x00FF00) >> 8);// al3=ial3*5.960464478e-8; schar = char( iono->al3/(5.960464478e-8)); // 8 bits, scale 2^-24 ulong = long( schar) & 0xFF; sf2[4][4] = sf2[4][4] | (ulong << 8);// ibt0= int(sf2[4][4] & 0x0000FF);// b0=ibt0*2048.; schar = char( iono->b0/(2048.)); // 8 bits, scale 2^11 ulong = long( schar) & 0xFF; sf2[4][4] = sf2[4][4] | (ulong);// ibt1= int(sf2[4][5] >> 16);// b1=ibt1*16384.; schar = char( iono->b1/(16384.)); // 8 bits, scale 2^14 ulong = long( schar) & 0xFF; sf2[4][5] = sf2[4][5] | (ulong << 16);// ibt2=int((sf2[4][5] & 0x00FF00) >> 8);// b2=ibt2*65536.; schar = char( iono->b2/(65536.)); // 8 bits, scale 2^16 ulong = long( schar) & 0xFF; sf2[4][5] = sf2[4][5] | (ulong << 8);// ibt3= int(sf2[4][5] & 0x00FF);// b3=ibt3*65536.; schar = char( iono->b3/(65536.)); // 8 bits, scale 2^16 ulong = long( schar) & 0xFF; sf2[4][5] = sf2[4][5] | (ulong);// ia1= sf2[4][6];// if (bit_test_l(ia1,24)) ia1=ia1 | 0xFF000000L;// a1=ia1*8.881784197e-16; ulong = long( utc->a1/(8.881784197e-16)) & 0xFFFFFF; // 24 bits, scale 2^-50 if ( ulong & (0x1L << (24-1))) // test bit 24 ulong = ulong | 0xFF000000L; sf2[4][6] = sf2[4][6] | (ulong);// ia0= (sf2[4][7] << 8) | (sf2[4][8] >> 16);// a0=ia0*9.31322574615e-10; ulong = long( utc->a0/(9.31322574615e-10)); // 32 bits, scale 2^-30 sf2[4][7] = sf2[4][7] | ((ulong & 0xFFFFFF00) >> 8); sf2[4][8] = sf2[4][8] | ((ulong & 0xFF) << 16);// itot= int((sf2[4][8] & 0x00FF00) >> 8);// tot=itot*4096; schar = char( utc->tot/(4096.)); // 8 bits, scale 2^12 ulong = long( schar) & 0xFF; sf2[4][8] = sf2[4][8] | (ulong << 8);// iWNt= int(sf2[4][8] & 0xFF);// WNt=iWNt; schar = char( utc->WNt); // 8 bits, scale 1 ulong = long( schar) & 0xFF; sf2[4][8] = sf2[4][8] | (ulong);// idtls= int(sf2[4][9] >> 16);// if (idtls > 128) idtls = idtls |0xFF00;// dtls=idtls; schar = char( utc->dtls); // 8 bits, scale 1 ulong = long( schar) & 0xFF; sf2[4][9] = sf2[4][9] | (ulong);// iWNlsf=int((sf2[4][9] & 0x00FF00) >> 8);// WNlsf=iWNlsf; schar = char( utc->WNlsf); // 8 bits, scale 1 ulong = long( schar) & 0xFF; sf2[4][9] = sf2[4][9] | (ulong << 8);// iDN = int(sf2[4][9] & 0x0000FF);// DN=iDN; schar = char( utc->DN); // 8 bits, scale 1 ulong = long( schar) & 0xFF; sf2[4][9] = sf2[4][9] | (ulong);// idtlsf= int(sf2[4][10] >> 16);// if (idtlsf >128) idtlsf=idtlsf |0xFF00;// dtlsf=idtlsf; schar = char( utc->dtlsf); // 8 bits, scale 1 ulong = long( schar) & 0xFF; sf2[4][9] = sf2[4][9] | (ulong << 16); } else if ( i4satid == 63 ) {//// satellite configuration for 32 satellites (frame 4, page 25)//// ASV[1] = int((sf2[4][3] & 0x00F000) >>12);// ASV[2]= int((sf2[4][3] & 0x000F00) >>8);// ASV[3]= int((sf2[4][3] & 0x0000F0) >>4);// ASV[4]= int( sf2[4][3] & 0x00000F); for ( k=2; k<6; k++) { sf2[4][3] = sf2[4][3] | (long( ASV[-1+k]) << (20-(4*k))); }// ASV[5]= int( sf2[4][4] >> 20);// ASV[6]= int((sf2[4][4] & 0x0F0000L) >>16);// ASV[7]= int((sf2[4][4] & 0x00F000) >>12);// ASV[8]= int((sf2[4][4] & 0x000F00) >> 8);// ASV[9]= int((sf2[4][4] & 0x0000F0) >> 4);// ASV[10]=int(sf2[4][4] & 0x00000F); for ( k=0; k<6; k++) { sf2[4][4] = sf2[4][4] | (long( ASV[5+k]) << (20-(4*k))); }// ASV[11]=int(sf2[4][5] >>20);// ASV[12]=int((sf2[4][5] & 0x0F0000L) >>16);// ASV[13]=int((sf2[4][5] & 0x00F000) >>12);// ASV[14]=int((sf2[4][5] & 0x000F00) >> 8);// ASV[15]=int((sf2[4][5] & 0x0000F0) >> 4);// ASV[16]=int(sf2[4][5] & 0x00000F); for ( k=0; k<6; k++) { sf2[4][5] = sf2[4][5] | (long( ASV[11+k]) << (20-(4*k))); }// ASV[17]=int(sf2[4][6] >>20);// ASV[18]=int((sf2[4][6] & 0x0F0000L) >>16);// ASV[19]=int((sf2[4][6] & 0x00F000) >>12);// ASV[20]=int((sf2[4][6] & 0x000F00) >> 8);// ASV[21]=int((sf2[4][6] & 0x0000F0) >> 4);// ASV[22]=int(sf2[4][6] & 0x00000F); for ( k=0; k<6; k++) { sf2[4][6] = sf2[4][6] | (long( ASV[17+k]) << (20-(4*k))); }// ASV[23]=int(sf2[4][7] >>20);// ASV[24]=int((sf2[4][7] & 0x0F0000L) >>16);// ASV[25]=int((sf2[4][7] & 0x00F000) >>12);// ASV[26]=int((sf2[4][7] & 0x000F00) >> 8);// ASV[27]=int((sf2[4][7] & 0x0000F0) >> 4);// ASV[28]=int( sf2[4][7] & 0x00000F); for ( k=0; k<6; k++) { sf2[4][7] = sf2[4][7] | (long( ASV[23+k]) << (20-(4*k))); }// ASV[29]=int( sf2[4][8] >>20);// ASV[30]=int((sf2[4][8] & 0x0F0000L) >>16);// ASV[31]=int((sf2[4][8] & 0x00F000) >>12);// ASV[32]=int((sf2[4][8] & 0x000F00) >> 8); for ( k=0; k<4; k++) { sf2[4][8] = sf2[4][8] | (long( ASV[29+k]) << (20-(4*k))); }// SVh[25]=int(sf2[4][8] & 0x00003F);// if( SVh[25]==0x3f) gps_alm[25].inc=0.0; sf2[4][8] = sf2[4][8] | (long( SVh[25]));// SVh[26]=int(sf2[4][9] >>18);// if( SVh[26]==0x3f) gps_alm[26].inc=0.0; sf2[4][9] = sf2[4][9] | (long( SVh[26]) << 18);// SVh[27]=int((sf2[4][9] & 0x03F000L) >>12);// if( SVh[27]==0x3f) gps_alm[27].inc=0.0; sf2[4][9] = sf2[4][9] | (long( SVh[27]) << 12);// SVh[28]=int((sf2[4][9] & 0x000FC0) >>6);// if( SVh[28]==0x3f) gps_alm[28].inc=0.0; sf2[4][9] = sf2[4][9] | (long( SVh[28]) << 6);// SVh[29]= int(sf2[4][9] & 0x00003F);// if( SVh[29]==0x3f) gps_alm[29].inc=0.0; sf2[4][9] = sf2[4][9] | (long( SVh[29]));// SVh[30]= int(sf2[4][10] >>18);// if( SVh[30]==0x3f) gps_alm[30].inc=0.0; sf2[4][10] = sf2[4][10] | (long( SVh[30]) << 18);// SVh[31]=int((sf2[4][10]& 0x03F000L) >>12);// if( SVh[31]==0x3f) gps_alm[31].inc=0.0; sf2[4][10] = sf2[4][10] | (long( SVh[31]) << 12);// SVh[32]=int((sf2[4][10]& 0x000FC0) >>6);// if( SVh[32]==0x3f) gps_alm[32].inc=0.0; sf2[4][10] = sf2[4][10] | (long( SVh[32]) << 6); }//// SUBFRAME 5//// i5p = int((sf2[5][3] & 0x3F0000L) >> 16);// chan[ch].page5 = i5p;// if ( i5satid != i5p)// {// i5satid=i5p; if ( i5satid == 51 ) {//// satellite health data for sats 1 thru 24, almanac reference time,// and almanac reference week number (frame 5, page 25)//// iatoa = int((sf2[5][3] & 0xFF00) >>8);// atoa = iatoa*4096;// SVh[1] = int(sf2[5][4] >>18);// if( SVh[1]==0x3f) gps_alm[1].inc=0.0;// SVh[2] = int((sf2[5][4] & 0x03F000L)>>12);// if( SVh[2]==0x3f) gps_alm[2].inc=0.0;// SVh[3] = int((sf2[5][4] & 0x000FC0)>>6);// if( SVh[3]==0x3f) gps_alm[3].inc=0.0;// SVh[4] = int(sf2[5][4] & 0x00003F);// if( SVh[4]==0x3f) gps_alm[4].inc=0.0; for ( k=0; k<4; k++) { sf2[5][4] = sf2[5][4] | (long( SVh[1+k]) << (18-(6*k))); }// SVh[5] = int(sf2[5][5] >>18);// if( SVh[5]==0x3f) gps_alm[5].inc=0.0;// SVh[6] = int((sf2[5][5] & 0x03F000L)>>12);// if( SVh[6]==0x3f) gps_alm[6].inc=0.0;// SVh[7] = int((sf2[5][5] & 0x000FC0)>>6);// if( SVh[7]==0x3f) gps_alm[7].inc=0.0;// SVh[8] = int(sf2[5][5] & 0x00003F);// if( SVh[8]==0x3f) gps_alm[8].inc=0.0; for ( k=0; k<4; k++) { sf2[5][5] = sf2[5][5] | (long( SVh[5+k]) << (18-(6*k))); }// SVh[9] = int(sf2[5][6] >> 18);// if( SVh[9]==0x3f) gps_alm[9].inc=0.0;// SVh[10] = int((sf2[5][6] & 0x03F000L)>>12);// if( SVh[10]==0x3f) gps_alm[10].inc=0.0;// SVh[11] = int((sf2[5][6] & 0x000FC0)>>6);// if( SVh[11]==0x3f) gps_alm[11].inc=0.0;// SVh[12] = int(sf2[5][6] & 0x00003F);// if( SVh[12]==0x3f) gps_alm[12].inc=0.0; for ( k=0; k<4; k++) { sf2[5][6] = sf2[5][6] | (long( SVh[9+k]) << (18-(6*k))); }// SVh[13] = int(sf2[5][7] >>18);// if( SVh[13]==0x3f) gps_alm[13].inc=0.0;// SVh[14] = int((sf2[5][7] & 0x03F000L)>>12);// if( SVh[14]==0x3f) gps_alm[14].inc=0.0;// SVh[15] = int((sf2[5][7] & 0x000FC0)>>6);// if( SVh[15]==0x3f) gps_alm[15].inc=0.0;// SVh[16] = int(sf2[5][7] & 0x00003F);// if( SVh[16]==0x3f) gps_alm[16].inc=0.0; for ( k=0; k<4; k++) { sf2[5][7] = sf2[5][7] | (long( SVh[13+k]) << (18-(6*k))); }// SVh[17] = int(sf2[5][8] >>18);// if( SVh[17]==0x3f) gps_alm[17].inc=0.0;// SVh[18] = int((sf2[5][8] & 0x03F000L)>>12);// if( SVh[18]==0x3f) gps_alm[18].inc=0.0;// SVh[19] = int((sf2[5][8] & 0x000FC0)>>6);// if( SVh[19]==0x3f) gps_alm[19].inc=0.0;// SVh[20] = int(sf2[5][8] & 0x00003F);// if( SVh[20]==0x3f) gps_alm[20].inc=0.0; for ( k=0; k<4; k++) { sf2[5][8] = sf2[5][8] | (long( SVh[17+k]) << (18-(6*k))); }// SVh[21] = int(sf2[5][9] >>18);// if( SVh[21]==0x3f) gps_alm[21].inc=0.0;// SVh[22] = int((sf2[5][9] & 0x03F000L)>>12);// if( SVh[22]==0x3f) gps_alm[22].inc=0.0;// SVh[23] = int((sf2[5][9] & 0x000FC0)>>6);// if( SVh[23]==0x3f) gps_alm[23].inc=0.0;// SVh[24] = int(sf2[5][9] & 0x00003F);// if( SVh[24]==0x3f) gps_alm[24].inc=0.0; for ( k=0; k<4; k++) { sf2[5][9] = sf2[5][9] | (long( SVh[21+k]) << (18-(6*k))); } } else {//// almanac data for satellite 1 thru 24 (frame 5, pages 1-24)// isv = i5satid;// gps_alm[isv].week=gps_week;// iae=int(sf2[5][3] & 0xFFFF);// gps_alm[isv].ety=iae*4.768371582E-7;// iatoa=int(sf2[5][4] >> 16);// gps_alm[isv].toa=iatoa*4096.0;// iadeli=int(sf2[5][4] & 0xFFFF);// gps_alm[isv].inc=(iadeli*1.907348633E-6+0.3)*pi;// iaomegad=int(sf2[5][5] >> 8);// gps_alm[isv].rra=iaomegad*3.637978807E-12*pi;// gps_alm[isv].health=int(sf2[5][5] & 0xFF);// iasqr=sf2[5][6];// gps_alm[isv].sqa=iasqr*4.8828125E-4;// if (gps_alm[isv].sqa>0.0) gps_alm[isv].w=19964981.84/pow(gps_alm[isv].sqa,3);// iaomega0=sf2[5][7];// if (bit_test_l(iaomega0,24)) iaomega0=iaomega0 | 0xFF000000L;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -