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

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

?? nmea0183.cpp

?? 來自網(wǎng)絡(luò),國外網(wǎng)友做的,vc++代碼,測試過,表示感謝. 可以讀取串口GPS數(shù)據(jù)顯示地理位置,需要有外置的串口的GPS接收機連接電腦,在demo主窗口界面可以輸出GPS接收的地理位置,經(jīng)度緯度,時間
?? CPP
字號:
#include "nmea0183.h"
#pragma hdrstop

/*
** Author: Samuel R. Blackburn
** Internet: sam_blackburn@pobox.com
**
** You can use it any way you like as long as you don't try to sell it.
**
** Copyright, 1996, Samuel R. Blackburn
**
** $Workfile: nmea0183.cpp $
** $Revision: 5 $
** $Modtime: 10/10/98 4:27p $
*/

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif

NMEA0183::NMEA0183()
{
   m_Initialize();

   m_ResponseTable.Add( (RESPONSE *) &Aam );
   m_ResponseTable.Add( (RESPONSE *) &Alm );
   m_ResponseTable.Add( (RESPONSE *) &Apb );
   m_ResponseTable.Add( (RESPONSE *) &Asd );
   m_ResponseTable.Add( (RESPONSE *) &Bec );
   m_ResponseTable.Add( (RESPONSE *) &Bod );
   m_ResponseTable.Add( (RESPONSE *) &Bwc );
   m_ResponseTable.Add( (RESPONSE *) &Bwr );
   m_ResponseTable.Add( (RESPONSE *) &Bww );
   m_ResponseTable.Add( (RESPONSE *) &Dbt );
   m_ResponseTable.Add( (RESPONSE *) &Dcn );
   m_ResponseTable.Add( (RESPONSE *) &Dpt );
   m_ResponseTable.Add( (RESPONSE *) &Fsi );
   m_ResponseTable.Add( (RESPONSE *) &Gda ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Gdf ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Gdp ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Gga );
   m_ResponseTable.Add( (RESPONSE *) &Gla ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Glc );
   m_ResponseTable.Add( (RESPONSE *) &Glf ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Gll );
   m_ResponseTable.Add( (RESPONSE *) &Glp ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Gsa );
   m_ResponseTable.Add( (RESPONSE *) &Gsv );
   m_ResponseTable.Add( (RESPONSE *) &Gtd ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Gxa );
   m_ResponseTable.Add( (RESPONSE *) &Gxf ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Gxp ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Hcc ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Hdg );
   m_ResponseTable.Add( (RESPONSE *) &Hdm ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Hdt );
   m_ResponseTable.Add( (RESPONSE *) &Hsc );
   m_ResponseTable.Add( (RESPONSE *) &Ima ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Lcd );
   m_ResponseTable.Add( (RESPONSE *) &Mhu ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Mta ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Mtw );
   m_ResponseTable.Add( (RESPONSE *) &Mwv );
   m_ResponseTable.Add( (RESPONSE *) &Oln );
   m_ResponseTable.Add( (RESPONSE *) &Osd );
   m_ResponseTable.Add( (RESPONSE *) &Proprietary );
   m_ResponseTable.Add( (RESPONSE *) &Rma );
   m_ResponseTable.Add( (RESPONSE *) &Rmb );
   m_ResponseTable.Add( (RESPONSE *) &Rmc );
   m_ResponseTable.Add( (RESPONSE *) &Rot );
   m_ResponseTable.Add( (RESPONSE *) &Rpm );
   m_ResponseTable.Add( (RESPONSE *) &Rsa );
   m_ResponseTable.Add( (RESPONSE *) &Rsd );
   m_ResponseTable.Add( (RESPONSE *) &Rte );
   m_ResponseTable.Add( (RESPONSE *) &Sfi );
   m_ResponseTable.Add( (RESPONSE *) &Stn );
   m_ResponseTable.Add( (RESPONSE *) &Tep ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Trf );
   m_ResponseTable.Add( (RESPONSE *) &Ttm );
   m_ResponseTable.Add( (RESPONSE *) &Vbw );
   m_ResponseTable.Add( (RESPONSE *) &Vhw );
   m_ResponseTable.Add( (RESPONSE *) &Vdr );
   m_ResponseTable.Add( (RESPONSE *) &Vlw );
   m_ResponseTable.Add( (RESPONSE *) &Vpw );
   m_ResponseTable.Add( (RESPONSE *) &Vtg );
   m_ResponseTable.Add( (RESPONSE *) &Vwe );
   m_ResponseTable.Add( (RESPONSE *) &Wcv ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Wdc ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Wdr ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Wnc );
   m_ResponseTable.Add( (RESPONSE *) &Wpl );
   m_ResponseTable.Add( (RESPONSE *) &Xdr );
   m_ResponseTable.Add( (RESPONSE *) &Xte );
   m_ResponseTable.Add( (RESPONSE *) &Xtr );
   m_ResponseTable.Add( (RESPONSE *) &Zda );
   m_ResponseTable.Add( (RESPONSE *) &Zfi ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Zfo );
   m_ResponseTable.Add( (RESPONSE *) &Zlz ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Zpi ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Zta ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Zte ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Ztg );
   m_ResponseTable.Add( (RESPONSE *) &Zti ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Zwp ); // Sentence Not Recommended For New Designs
   m_ResponseTable.Add( (RESPONSE *) &Zzu ); // Sentence Not Recommended For New Designs

   m_SortResponseTable();
   m_SetContainerPointers();
}

NMEA0183::~NMEA0183()
{
   m_Initialize();
}

void NMEA0183::m_Initialize( void )
{
   ErrorMessage.Empty();
}

void NMEA0183::m_SetContainerPointers( void )
{
   int index = 0;
   int number_of_entries_in_table = m_ResponseTable.GetSize();

   RESPONSE *this_response = (RESPONSE *) NULL;

   index = 0;

   while( index < number_of_entries_in_table )
   {
      this_response = (RESPONSE *) m_ResponseTable[ index ];

      this_response->SetContainer( this );

      index++;
   }
}

void NMEA0183::m_SortResponseTable( void )
{
   int index = 0;
   int number_of_entries_in_table = m_ResponseTable.GetSize() - 1;

   RESPONSE *this_response = (RESPONSE *) NULL;
   RESPONSE *that_response = (RESPONSE *) NULL;

   BOOL sorted = FALSE;

   while( sorted == FALSE )
   {
      sorted = TRUE;

      index = 0;

      while( index < number_of_entries_in_table )
      {
         this_response = (RESPONSE *) m_ResponseTable[ index     ];
         that_response = (RESPONSE *) m_ResponseTable[ index + 1 ];

         if ( this_response->Mnemonic.Compare( that_response->Mnemonic ) > 0 )
         {
            m_ResponseTable[ index     ] = that_response;
            m_ResponseTable[ index + 1 ] = this_response;

            sorted = FALSE;
         }

         index++;
      }
   }
}

/*
** Public Interface
*/

BOOL NMEA0183::IsGood( void ) const
{
   /*
   ** NMEA 0183 sentences begin with $ and and with CR LF
   */

   if ( m_Sentence.Sentence[ 0 ] != '$' )
   {
      return( FALSE );
   }

   /*
   ** Next to last character must be a CR
   */

   if ( m_Sentence.Sentence.Mid( m_Sentence.Sentence.GetLength() - 2, 1 ) != CARRIAGE_RETURN )
   {
      return( FALSE );
   }

   if ( m_Sentence.Sentence.Right( 1 ) != LINE_FEED )
   {
      return( FALSE );
   }

   return( TRUE );
}

BOOL NMEA0183::Parse( void )
{
   BOOL return_value = FALSE;

   if ( IsGood() )
   {
      int index       = 0;
      int comparison  = 0;
      int drop_dead   = 0;
      int exit_loop   = 0;
      int lower_limit = 0;
      int upper_limit = 0;

      CString mnemonic;

      RESPONSE *response_p = (RESPONSE *) NULL;

      mnemonic = m_Sentence.Field( 0 );

      /*
      ** See if this is a proprietary field
      */

      if ( mnemonic.Left( 1 ) == 'P' )
      {
         mnemonic = "P";
      }
      else
      {
         mnemonic = mnemonic.Right( 3 );
      }

      /*
      ** Set up our default error message
      */

      ErrorMessage = mnemonic;
      ErrorMessage += " is an unknown type of sentence";

      LastSentenceIDReceived = mnemonic;

      /*
      ** Do a Binary Search to call the appropriate function
      */

      lower_limit = 0;
      upper_limit = m_ResponseTable.GetSize();
      index       = upper_limit / 2;
      drop_dead   = ( index < 10 ) ? 10 : index + 2;

      /*
      ** The drop_dead is here as an insurance policy that we will never get stuck in an endless loop.
      ** I have encountered situations where the inaccuracy of the division leaves the loop stuck when
      ** it can't find something.
      */

      while( exit_loop == 0 )
      {
         response_p = (RESPONSE *) m_ResponseTable[ index ];

         comparison = mnemonic.Compare( response_p->Mnemonic );

         if ( comparison == 0 )
         {
            return_value = response_p->Parse( m_Sentence );

            /*
            ** Set your ErrorMessage
            */

            if ( return_value == TRUE )
            {
               /*
               ** Now that we sucessfully parsed a sentence, record stuff *about* the transaction
               */

               ErrorMessage         = "No Error";
               LastSentenceIDParsed = response_p->Mnemonic;
               TalkerID             = talker_id( m_Sentence );
               ExpandedTalkerID     = expand_talker_id( TalkerID );
               PlainText            = response_p->PlainEnglish();
            }
            else
            {
               ErrorMessage = response_p->ErrorMessage;
            }

            exit_loop = 1;
         }
         else
         {
            if ( comparison < 0 )
            {
               upper_limit = index;
            }
            else
            {
               lower_limit = index;
            }

            if ( lower_limit == upper_limit )
            {
               exit_loop    = 1;
               return_value = FALSE;
            }
            else
            {
               index = ( lower_limit + upper_limit ) / 2;
            }
         }

         drop_dead--;

         if ( exit_loop != 1 && drop_dead < 0 )
         {
            exit_loop    = 1;
            return_value = FALSE;
         }
      }
   }
   else
   {
      return_value = FALSE;
   }

   return( return_value );
}

#if 0

void NMEA0183::Serialize( CArchive& archive )
{
   CObject::Serialize( archive );

   if ( archive.IsStoring() )
   {
      archive << m_Sentence;
      archive << ErrorMessage;
      archive << LastSentenceIDParsed;
      archive << LastSentenceIDReceived;
      archive << PlainText;
      archive << TalkerID;
      archive << ExpandedTalkerID;
   }
   else
   {
      //archive >> m_Sentence;
      archive >> ErrorMessage;
      archive >> LastSentenceIDParsed;
      archive >> LastSentenceIDReceived;
      archive >> PlainText;
      archive >> TalkerID;
      archive >> ExpandedTalkerID;
   }
}

#endif // 0

NMEA0183& NMEA0183::operator << ( const char *source )
{
   m_Sentence = source;

   return( *this );
}

NMEA0183& NMEA0183::operator >> ( CString& destination )
{
   destination = m_Sentence;

   return( *this );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品毛片久久久久久| 成人福利视频网站| 在线不卡中文字幕播放| 亚洲大片在线观看| 欧美日韩极品在线观看一区| 午夜精品久久久久久久蜜桃app| 欧美日韩一区在线| 麻豆成人在线观看| 久久久精品黄色| 99久久综合99久久综合网站| 亚洲乱码日产精品bd| 欧美精品一卡两卡| 韩国一区二区视频| 国产精品成人免费| 欧美日韩精品一区二区三区四区 | 国产精品一品二品| 国产精品人妖ts系列视频| 一本久久a久久免费精品不卡| 亚洲国产另类av| 精品国产制服丝袜高跟| 99精品在线免费| 日本美女一区二区三区| 日本一区二区三区在线不卡| 91蝌蚪porny成人天涯| 视频一区二区三区中文字幕| 久久综合九色综合久久久精品综合| 国产成人av福利| 亚洲一区av在线| 久久伊人中文字幕| 91黄视频在线| 国产精品一区在线| 亚洲国产成人高清精品| 国产网站一区二区| 欧美日韩国产片| 国产成人av资源| 日韩激情av在线| 国产精品久久久久久久岛一牛影视 | av资源站一区| 奇米一区二区三区| 亚洲女人的天堂| 久久一日本道色综合| 日本道色综合久久| 国产成人精品亚洲午夜麻豆| 五月天激情综合| 日韩美女啊v在线免费观看| 欧美xxxxxxxx| 欧美日韩国产影片| 91蜜桃网址入口| 国产激情一区二区三区| 日韩中文字幕一区二区三区| 亚洲人123区| 久久久久国产一区二区三区四区| 欧美日韩成人综合在线一区二区| 成人av第一页| 国产成人免费视| 韩国精品主播一区二区在线观看| 午夜精品久久久久久久| 亚洲精品乱码久久久久久日本蜜臀 | 卡一卡二国产精品 | 亚洲精品国久久99热| 欧美激情在线看| 国产亚洲一区字幕| 久久这里只有精品6| 日韩欧美电影一二三| 欧美日韩成人高清| 欧美午夜一区二区| 91网页版在线| 91色|porny| 一本色道综合亚洲| av电影在线不卡| 99精品欧美一区| 成a人片国产精品| 97se亚洲国产综合自在线| 成人性生交大片免费看中文| 国产99久久久精品| 国产不卡视频在线播放| 国产精品综合av一区二区国产馆| 激情亚洲综合在线| 国产乱人伦精品一区二区在线观看| 蜜桃视频在线观看一区| 另类人妖一区二区av| 六月丁香婷婷久久| 国产一区二区三区免费| 国产精品一卡二卡| 成人动漫av在线| 91蜜桃在线免费视频| 欧美性高清videossexo| 欧美男男青年gay1069videost| 欧美日韩电影在线播放| 欧美一卡二卡在线观看| 精品动漫一区二区三区在线观看| 久久夜色精品国产欧美乱极品| 久久精品亚洲精品国产欧美| 国产精品欧美一区二区三区| 亚洲视频资源在线| 亚洲va欧美va国产va天堂影院| 午夜日韩在线电影| 久久精品国产精品青草| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 日韩午夜精品电影| 久久精品亚洲乱码伦伦中文| 亚洲欧洲在线观看av| 亚洲一二三四在线观看| 美女精品一区二区| 国产91精品在线观看| 日本高清成人免费播放| 欧美一区二区三区公司| 久久精品一区二区三区四区| 一区二区三区毛片| 激情欧美一区二区| 91网站最新网址| 91精品国产91综合久久蜜臀| 国产三级精品视频| 亚洲午夜电影在线观看| 国模一区二区三区白浆| 色婷婷久久久久swag精品| 日韩一区二区三区在线观看| 国产午夜精品福利| 性久久久久久久久| 懂色av中文一区二区三区| 91成人免费网站| 久久久久久久电影| 亚洲va韩国va欧美va精品| 国产高清亚洲一区| 欧美精品99久久久**| 中文字幕av资源一区| 日韩电影在线观看电影| caoporen国产精品视频| 欧美一级欧美一级在线播放| 中文字幕亚洲欧美在线不卡| 捆绑变态av一区二区三区| 色综合久久天天| 久久美女艺术照精彩视频福利播放| 亚洲综合色婷婷| 成人午夜在线视频| 精品伦理精品一区| 日韩二区三区四区| 91久久奴性调教| 国产精品区一区二区三| 蜜臀久久99精品久久久久宅男| 色综合久久综合网欧美综合网| 久久综合九色综合97婷婷| 日韩黄色在线观看| 欧美日韩精品免费观看视频| 亚洲久草在线视频| 成人一区二区三区在线观看| 欧美刺激午夜性久久久久久久| 亚洲精品免费在线播放| 成人午夜激情片| 久久精品亚洲精品国产欧美| 久久国产夜色精品鲁鲁99| 欧美日韩国产大片| 亚洲最大成人综合| 91亚洲男人天堂| 亚洲欧洲日韩一区二区三区| 国精品**一区二区三区在线蜜桃| 欧美一级免费大片| 午夜电影久久久| 精品视频一区三区九区| 亚洲国产综合色| 色成人在线视频| 中文字幕一区二区三区不卡在线| 国产精品69久久久久水密桃| 欧美videossexotv100| 蜜桃91丨九色丨蝌蚪91桃色| 欧美一区二区三区在线观看视频| 亚洲1区2区3区视频| 欧美日韩免费电影| 日本午夜精品一区二区三区电影| 欧美午夜精品一区二区蜜桃 | 中文字幕av资源一区| 成人午夜激情视频| 国产欧美精品在线观看| 久久99精品久久久| 欧美成人性福生活免费看| 久久se精品一区精品二区| 精品国产一区二区三区久久久蜜月| 免费成人美女在线观看| 日韩一区二区免费在线电影| 麻豆精品视频在线观看| 精品国产乱码久久久久久浪潮| 美国三级日本三级久久99| 欧美变态口味重另类| 国产精品一区二区久久精品爱涩| 国产精品萝li| 91黄色激情网站| 日日噜噜夜夜狠狠视频欧美人| 日韩三级精品电影久久久| 国内成+人亚洲+欧美+综合在线| 国产精品天天摸av网| 99精品视频一区二区三区| 亚洲丶国产丶欧美一区二区三区| 欧美久久久久久久久中文字幕| 免费国产亚洲视频| 欧美激情一区二区在线| 91国偷自产一区二区三区成为亚洲经典| 欧美一区二区三区爱爱| 国产精品自拍网站| 依依成人精品视频| 欧美电视剧在线看免费|