亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gpsnav.cpp

?? 基于USB接口的GPS應(yīng)用程序
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):


#include "Gpsnav.h"
/*******************************************************************************
FUNCTION exor(char bit, long parity)
RETURNS  None.

PARAMETERS
			bit     char
			parity  long

PURPOSE
			count the number of bits set in the parameter parity and
			do an exclusive or with the parameter bit

WRITTEN BY
	Clifford Kelley
CHANGED BY
        Yu Lu

*******************************************************************************/
static int exor(char bit, unsigned int parity)
{
  char i;
  int result, tmp_par;
  result=0;
  tmp_par = parity>>6;
  for (i=0;i<24;i++)
  {
    if( tmp_par & 0x1) result++;
    tmp_par = tmp_par>>1;
  }
  result=result%2;

  result=(bit ^ result) & 0x1;
  return(result);
}
/*******************************************************************************
FUNCTION xors(long pattern)
RETURNS  Integer

PARAMETERS
			  pattern  long 32 bit data

PURPOSE
			  count the number of bits set in "pattern"
WRITTEN BY
	Clifford Kelley
CHANGED  by
         Yu Lu

*******************************************************************************/
static int xors(long pattern)
{
  int count,i;
  count=0;
  pattern=pattern>>6;
  for (i=0;i<=25;i++)
  {
	 count+=int(pattern & 0x1);
	 pattern=pattern>>1;
  }
  count=count%2;
  return(count);
}

static int sign(double a)
{
 if( a>0) return 1;
 else return -1;
}

static int bit_sign(double a)
{
 if( a>0 ) return 1;
 else return 0;
}
//---------------------------------------------------------------------------
/*    Routine Description:                                                 */
/*  Constructor of class GPS_Nav_class;                                    */
/***************************************************************************/

GPS_Nav::GPS_Nav(IoInterface* Iohandle)
{
 IoHandle = Iohandle;
 navthrd = NULL;
 newfrmflag = false;
 newfrmcount = 0;
 thrdtermed= true;
 memset((void*)&frm_4ms_6ch, 0, sizeof(one_frame_data));
 count = 0;
 count1 = 0;
 TIC_count =  0;
 ch_status = 0;
 for(char i=0; i<CH_NUM ; i++)
  ch[i].subframe_i = -1;

}

/*  Destructor of class GPS_Nav_class;  */  
GPS_Nav::~GPS_Nav()
{
 if(navthrd) {
  delete navthrd;
 }

#ifdef GPS_NAV_DBG
 debugfile.close();
#endif

#if GPS_NAV_RAW_DATA > 0
 ch_accum_mis_file.close();
 for(int i=0; i<CH_NUM; i++)
  ch_rawdata_file[i].close();
#endif
}
//---------------------------------------------------------------------------
/* Routine Description:
  To add one reg to be written to the gp2021regs
  Argument:
          add:  the address of register to be written;
          hi :  high byte
          lo : low byte
  return:
          no
*/
/***************************************************************************/
void GPS_Nav::add_one_reg( unsigned char add,
                           unsigned char hi,
                           unsigned char lo)
{
 unsigned char reg_count;

 if(gp2021_wr_data.count < 41)
 {
  reg_count = gp2021_wr_data.count++;
  gp2021_wr_data.regs[reg_count].addr = add;
  gp2021_wr_data.regs[reg_count].low  = lo;
  gp2021_wr_data.regs[reg_count].high = hi;
 }
}
void GPS_Nav::clear_all_reg()
{
 memset( (void *)(&gp2021_wr_data), 0, sizeof(gp2021_regs));
}
/***************************************************************************/
/* GP2021  related function *********/
void GPS_Nav::ch_cntl(char ch,  unsigned short data)
{
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = (ch+CH_OFFSET)<<3;
 gp2021_wr_data.regs[idx].high = (data>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  data & 0xff;
}

void GPS_Nav::ch_code( char ch,unsigned int freq)
{
 unsigned short high_freq, low_freq;
 high_freq = (freq>>16) & 0xffff;
 low_freq  =  freq & 0xffff;

 // first is high 16-bit freq word
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = ((ch+CH_OFFSET)<<3)+5;
 gp2021_wr_data.regs[idx].high = (high_freq>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  high_freq & 0xff;

 // next is low 16-bit freq word
 assert(gp2021_wr_data.count < 41);
 idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = ((ch+CH_OFFSET)<<3)+6;
 gp2021_wr_data.regs[idx].high = (low_freq>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  low_freq & 0xff;
}

void GPS_Nav::ch_carrier(char ch,unsigned  int freq)
{
 unsigned short high_freq, low_freq;
 high_freq = (freq>>16) & 0xffff;
 low_freq  =  freq & 0xffff;

 // first is high 16-bit freq word
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = ((ch+CH_OFFSET)<<3)+3;
 gp2021_wr_data.regs[idx].high = (high_freq>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  high_freq & 0xff;

 // next is low 16-bit freq word
 assert(gp2021_wr_data.count < 41);
 idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = ((ch+CH_OFFSET)<<3)+4;
 gp2021_wr_data.regs[idx].high = (low_freq>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  low_freq & 0xff;
}
void GPS_Nav::ch_epoch_load(char ch, unsigned short data)
{
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = ((ch+CH_OFFSET)<<3)+7;
 gp2021_wr_data.regs[idx].high = (data>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  data & 0xff;
}
void GPS_Nav::ch_on(char ch)
{
 ch_status=ch_status | bit_pat[ch+CH_OFFSET];
}
void GPS_Nav::ch_off(char ch)
{
 ch_status=ch_status & !bit_pat[ch+CH_OFFSET];
}
void GPS_Nav::set_ch_onoff(void)
{
 reset_cntl(ch_status);
}
void GPS_Nav::test_control(unsigned  short data)
{
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = 0x7c;
 gp2021_wr_data.regs[idx].high = (data>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  data & 0xff;
}
void GPS_Nav::system_setup(unsigned  short data)
{
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = 0x7e;
 gp2021_wr_data.regs[idx].high = (data>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  data & 0xff;
}
void GPS_Nav::io_config(unsigned  short data)
{
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = 0xf0;
 gp2021_wr_data.regs[idx].high = (data>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  data & 0xff;
}
void GPS_Nav::reset_cntl(unsigned  short data)
{
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = 0x7f;
 gp2021_wr_data.regs[idx].high = (data>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  data & 0xff;
}
void GPS_Nav::program_TIC(unsigned  int data)
{
 unsigned short high_16, low_16;
 high_16 = (data>>16) & 0xffff;
 low_16  =  data & 0xffff;

 // first is high 16-bit  word
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = 0x6d;
 gp2021_wr_data.regs[idx].high = (high_16 >> 8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  high_16 & 0xff;

 // next is low 16-bit  word
 assert(gp2021_wr_data.count < 41);
 idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = 0x6f;
 gp2021_wr_data.regs[idx].high = (low_16>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  = (low_16) & 0xff;
}
void GPS_Nav::ch_accum_reset(char ch)
{
}
void GPS_Nav::ch_code_slew(char ch, unsigned short data)
{
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = ((ch+CH_OFFSET)<<2)+0x84;
 gp2021_wr_data.regs[idx].high = (data>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  data & 0xff;
}

void GPS_Nav::test_data(unsigned  short data)
{
 assert(gp2021_wr_data.count < 41);
 char idx = gp2021_wr_data.count++;
 gp2021_wr_data.regs[idx].addr = 0xf2;
 gp2021_wr_data.regs[idx].high = (data>>8) & 0xff;
 gp2021_wr_data.regs[idx].low  =  data & 0xff;
}

void GPS_Nav::get_newaccumdata(void)
{
 double q_sum, i_sum, tmp_theta;

 epoch_chk  = 1;
 for( int j=0; j<4; j++)
  if((frm_4ms_6ch.all_ch[j].accum_status_b) & 0x2000 ) // TIC happened here
   epoch_chk = 0;      // epoch_check values are not available

 for( int i=0; i< CH_NUM; i++)
  ch[i].valid_data_num = 0;

 for(int i=0; i<CH_NUM; i++)
 {
  for(int j=0; j<4; j++)
  {
   if( (frm_4ms_6ch.all_ch[j].accum_status_a) & (ch_ready_mask[i+CH_OFFSET]) )
   {
    // we have valid data from channel i in jth packet;
    ch[i].prompt_iq[ ch[i].valid_data_num++ ][0] = frm_4ms_6ch.all_ch[j].ch_accm[i].I_prompt;
    ch[i].prompt_iq[ ch[i].valid_data_num -1 ][1] = frm_4ms_6ch.all_ch[j].ch_accm[i].Q_prompt;
    ch[i].track_iq[ ch[i].valid_data_num -1 ][0] = frm_4ms_6ch.all_ch[j].ch_accm[i].I_track;
    ch[i].track_iq[ ch[i].valid_data_num -1 ][1] = frm_4ms_6ch.all_ch[j].ch_accm[i].Q_track;
    if( epoch_chk )
     ch[i].epochchk[ ch[i].valid_data_num -1 ] = *((unsigned short*)(&frm_4ms_6ch.ch_cntl[0])+j*6+ i);

   }   // end of if( (frm_4ms_6ch.all_ch[j
  }    // end of j  for(int j=0; j<4; j++){
  ch[i].mean_p=0.;
  ch[i].mean_t=0.;
  for( int k=0; k< ch[i].valid_data_num; k++)
  {
   ch[i].track_mag[k] = sqrt(pow((float)(ch[i].track_iq[ k ][0]),2)+pow((float)(ch[i].track_iq[ k ][1]),2));
   ch[i].prompt_mag[k]= sqrt(pow((float)(ch[i].prompt_iq[ k ][0]),2)+pow((float)(ch[i].prompt_iq[ k ][1]),2));

   ch[i].mean_p += ch[i].prompt_mag[k];
   ch[i].mean_t += ch[i].track_mag[k];
   q_sum = ch[i].prompt_iq[k][1];// + ch[i].track_iq[k][1];
   i_sum = ch[i].prompt_iq[k][0];// + ch[i].track_iq[k][0];

   if( ch[i].state >= PULLIN)
   {
    if( q_sum != 0. || i_sum != 0.)
     ch[i].theta[k] = atan2( q_sum, i_sum);
    else
    {
     if( k == 0)
      ch[i].theta[k] = ch[i].old_theta;
     else
      ch[i].theta[k] = ch[i].theta[k-1];
    }
   }  //  end of if( ch[i].state

   if( ch[i].state == TRACKING)
   {
    if( i_sum !=0 || q_sum != 0)
     ch[i].ca_phase[k] = ch[i].theta[k]-(PI/2)*sign(q_sum);
//     ch[i].ca_phase[k] = -i_sum*sign(q_sum)/sqrt(i_sum*i_sum + q_sum*q_sum);
   }
  }   // end of k
  ch[i].mean_p = ch[i].mean_p/ch[i].valid_data_num;
  ch[i].mean_t = ch[i].mean_t/ch[i].valid_data_num;

  if( ch[i].state >= PULLIN)
  {
   ch[i].cd_phase1 =
   (ch[i].mean_p - ch[i].mean_t)/(ch[i].mean_p + ch[i].mean_t)*pull_code_k;
  }
 }  // end of for(int i=0;
}
void GPS_Nav::process_channel( int idx )
{
 assert( idx < CH_NUM && idx >=0);

 switch( ch[idx].state){
  case ACQUISITION: ch_acq(idx); break;
  case CONFIRM: ch_confirm(idx); break;
  case PULLIN: ch_pullin(idx); break;
  case TRACKING: ch_track(idx); break;
  default: break;
 }
}

void  GPS_Nav::ch_acq(int idx)
{
 assert( idx < CH_NUM && idx >=0);
 if( ch[idx].mean_p < CONFIRM_THRESHOLD || ch[idx].mean_t < CONFIRM_THRESHOLD )
 {
  if(ch[idx].code > 2044)
  {
   ch[idx].code =0;
   ch[idx].n_freq ++;
   ch_carrier(idx,carrier_ref+(int)(4698*ch[idx].n_freq));
   ch[idx].carrier_freq = carrier_ref+(int)(4698*ch[idx].n_freq);

   if(ch[idx].n_freq >= SEARCH_MAX_F)
   {
    ch[idx].n_freq = SEARCH_MIN_F;
   }
  }
  else
  {
   ch_code_slew(idx,2);
   ch[idx].code += 2;
  }
 }
 else
 {
  ch_code_slew(idx,2042);  // slide back 2 chips , because of frm delay
  ch[idx].state = CONFIRM;
  ch[idx].n_confirm = 0;
  ch[idx].mn_confirm = 0;
 }
}
void  GPS_Nav::ch_confirm(int idx)
{
 assert( idx < CH_NUM && idx >=0);

 ch[idx].n_confirm++;
 if( ch[idx].mean_p > CONFIRM_THRESHOLD)// && ch[idx].mean_t > 500. )
  ch[idx].mn_confirm++;

 if(ch[idx].n_confirm == 7)
 {
  if( ch[idx].mn_confirm < 4 )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av第一页| 亚洲欧美福利一区二区| 日本午夜精品视频在线观看| 久久激情五月婷婷| 久88久久88久久久| 国产福利一区二区| 91免费小视频| 欧美一区二区在线视频| 国产欧美精品国产国产专区 | 怡红院av一区二区三区| 水蜜桃久久夜色精品一区的特点| 国产一区二区三区免费看| 一本大道久久a久久精二百 | 色悠久久久久综合欧美99| 欧美亚一区二区| 精品久久99ma| 亚洲免费av网站| 裸体健美xxxx欧美裸体表演| 99这里只有精品| 日韩欧美在线网站| 精品一区二区三区欧美| av电影在线观看一区| 91精品国产入口| 一区视频在线播放| 久久www免费人成看片高清| 色偷偷一区二区三区| 日韩精品一区二区在线观看| 亚洲人成人一区二区在线观看| 美女网站在线免费欧美精品| 91网上在线视频| 久久影视一区二区| 午夜成人在线视频| www.欧美.com| 亚洲精品一区二区三区福利| 亚洲成人免费观看| av在线播放不卡| 久久午夜羞羞影院免费观看| 亚洲mv在线观看| 91美女精品福利| 国产欧美日韩中文久久| 蜜桃一区二区三区在线| 欧美三级韩国三级日本三斤| 最近中文字幕一区二区三区| 国产在线精品一区在线观看麻豆| 欧美日韩综合色| 亚洲免费观看高清完整版在线 | 久久综合久久综合久久综合| 亚洲福利视频一区二区| 91在线观看污| 国产精品麻豆欧美日韩ww| 国产一区二区三区视频在线播放| 欧美一区三区四区| 视频一区视频二区在线观看| 日本精品一级二级| 亚洲欧美日韩国产一区二区三区| 国产69精品久久久久毛片| 26uuu精品一区二区| 免费观看在线综合色| 欧美精品第1页| 亚洲国产cao| 欧美在线短视频| 一区二区三区在线免费视频| 成人综合婷婷国产精品久久| 久久精品视频一区二区三区| 经典三级一区二区| 精品国产伦一区二区三区观看方式| 日韩电影在线观看一区| 91 com成人网| 3d动漫精品啪啪一区二区竹菊| 日韩欧美一区二区不卡| 三级成人在线视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 2021国产精品久久精品| 蜜乳av一区二区三区| 日韩一级在线观看| 蜜臀av性久久久久蜜臀aⅴ| 91精品国产综合久久福利软件| 亚洲国产成人91porn| 欧美日韩精品欧美日韩精品 | 欧美日韩五月天| 午夜不卡在线视频| 欧美一区二区国产| 精品一区二区免费| 久久久久9999亚洲精品| 成人午夜电影小说| 亚洲视频香蕉人妖| 欧洲精品一区二区| 天堂蜜桃91精品| 日韩精品一区二区三区在线播放 | 欧美变态凌虐bdsm| 国产精品99久久久久| 中文字幕精品一区二区精品绿巨人| 成人99免费视频| 亚洲一区二区五区| 欧美日韩成人综合在线一区二区| 日本亚洲视频在线| 久久天堂av综合合色蜜桃网| 懂色av一区二区夜夜嗨| 亚洲色图在线播放| 欧美精品高清视频| 国产精品亚洲专一区二区三区| 国产精品久久久久天堂| 色吧成人激情小说| 日韩精品国产精品| 国产午夜久久久久| 日本高清不卡视频| 蜜臀av一区二区在线免费观看| www久久精品| 91片黄在线观看| 天堂一区二区在线| 国产日产欧美一区二区三区| 一本久久a久久免费精品不卡| 丝袜美腿高跟呻吟高潮一区| 久久精品视频免费| 欧美亚一区二区| 国产在线乱码一区二区三区| 成人免费一区二区三区在线观看| 欧美老肥妇做.爰bbww| 国产高清不卡二三区| 亚洲一区在线观看免费 | 久久97超碰国产精品超碰| 中文字幕乱码久久午夜不卡| 欧美三级午夜理伦三级中视频| 国模大尺度一区二区三区| 亚洲欧美激情在线| 精品国产1区二区| 欧美在线视频你懂得| 国产精品18久久久久久久久| 亚洲在线一区二区三区| 久久久蜜臀国产一区二区| 91福利视频网站| 国产成人精品午夜视频免费| 午夜影院久久久| 中文乱码免费一区二区| 91精品国产91久久综合桃花| 成a人片亚洲日本久久| 久久精品噜噜噜成人av农村| 一区二区三区日韩欧美精品| 久久网站最新地址| 欧美精品久久久久久久多人混战| 波多野结衣91| 国产中文字幕一区| 日韩电影在线观看网站| 亚洲免费观看在线观看| 久久久国产一区二区三区四区小说 | 9191精品国产综合久久久久久| 国产91精品一区二区麻豆网站| 日韩国产欧美在线观看| 1024精品合集| 欧美国产精品专区| 精品欧美一区二区在线观看 | 国产欧美中文在线| 欧美日韩国产高清一区二区三区| 成人一级视频在线观看| 麻豆国产一区二区| 亚洲第一狼人社区| 亚洲精品国产一区二区三区四区在线 | 自拍视频在线观看一区二区| 久久亚洲私人国产精品va媚药| 欧美老肥妇做.爰bbww| 色综合久久综合网欧美综合网| 国产成人鲁色资源国产91色综| 久久av中文字幕片| 日韩国产高清影视| 亚洲国产精品一区二区久久恐怖片 | 亚洲啪啪综合av一区二区三区| 国产日韩欧美在线一区| 精品久久人人做人人爽| 欧美一级日韩不卡播放免费| 欧美体内she精高潮| 色综合欧美在线视频区| 99在线精品视频| 成人看片黄a免费看在线| 国产精品资源在线看| 激情av综合网| 激情久久久久久久久久久久久久久久| 免费在线欧美视频| 三级久久三级久久久| 日韩成人一级片| 秋霞电影网一区二区| 日本伊人午夜精品| 日本不卡一区二区| 麻豆专区一区二区三区四区五区| 日韩av不卡在线观看| 青椒成人免费视频| 美女视频免费一区| 国产一区二区在线视频| 国产一区二区三区四区在线观看| 国产一区亚洲一区| 丁香婷婷综合网| 不卡av电影在线播放| 91蝌蚪porny九色| 欧美又粗又大又爽| 日韩欧美国产综合一区| 国产精品系列在线播放| 国产乱理伦片在线观看夜一区| 国产一区二区成人久久免费影院| 国产一区二区三区av电影| 国产九九视频一区二区三区| 国产1区2区3区精品美女|