0

最近、UBX と NEMA プロトコルの両方をサポートする GPS レシーバーの開発に取り組んでいます。C++ でシリアル プログラミングを使用しています。UBX プロトコルを使用しようとしていますが、NEMA からしか受信できないようです。ドライバーをダウンロードしましたが、最初にパッケージを送信して UBX 経由で受信する必要があると思います。誰かリンクを知っているか、これらのパッケージを送信する方法を教えてください。私が開発した方法を以下に示します。データの読み取りを開始する前に、小さなコマンドが必要だと思います。誰かここで私を助けてください:D

void read_port(void)
{
    unsigned char c='D';


     while (c!='q')
    {
            if (read(fd, UBX_buffer, sizeof(UBX_buffer))>0)      
            {
                data = read(fd, UBX_buffer, sizeof(UBX_buffer));

            //  write(fd,&UBX_buffer,1);  // if new data is available on the serial port, print it out

      cout<<"Data on the port =  ";
      for (unsigned i =0; i< sizeof(UBX_buffer) ;i++){
        cout<<&UBX_buffer[i];  


    }
    cout<<" "<<endl;
     for (int i=0; i<fd; i++)  // Process bytes received
{

     switch(UBX_step)     //we start from zero and increment as we go through the cases
  {
  case 0:  
    if(data==0xB5)  UBX_step++;  break; // UBX sync char 1 //check for the first data packet and go to next byte


  case 1:  if(data==0x62) UBX_step++;// UBX sync char 2 //check for the second data packet and go to the next byte

    else    UBX_step=0; break;  //if first and second packets are not correct then go back and check again     

  case 2:   UBX_class=data; checksum(UBX_class); UBX_step++;  break;

  case 3:   UBX_id=data;  checksum(UBX_id);  UBX_step++; break;

  case 4:   UBX_payload_length_hi=data; checksum(UBX_payload_length_hi);  UBX_step++;  break;

  case 5:   UBX_payload_length_lo=data; checksum(UBX_payload_length_lo);  UBX_step++; break;

  case 6:         // Payload data read...
  if (UBX_payload_counter < UBX_payload_length_hi)  // We stay in this state until we reach the payload_length
    {
      UBX_buffer[UBX_payload_counter] = data;
      checksum(data);
      UBX_payload_counter++;
    }
    else
      UBX_step++; 
    break;
  case 7:   ck_a=data;  UBX_step++; break;      // First checksum byte
  case 8:   ck_b=data;                           // Second checksum byte

    // We end the GPS read...

    if((ck_a= ck_a)&&(ck_b= ck_a))   // Verify the received checksum with the generated checksum.. 
          parse_ubx_gps();               // Parse new GPS packet...


    UBX_step=0;
    UBX_payload_counter=0;
    ck_a=0;
    ck_b=0;
    GPS_timer=0; //Restarting timer...
    break;
      }
  }

            if (read(STDIN_FILENO,&c,1)>0) write(fd,&c,1);  // if new data is available on the console, send it to the serial port

    }

    close(fd);



  } // End Switch
} // End For
4

1 に答える 1

0

ublox ホームページで、ublox プロトコル仕様をダウンロードできます。そこで、cfg メッセージを見てください。テスト目的で、ツールを使用して ubx プロトコルを有効にすることもできますu-Center

于 2013-05-22T21:34:50.427 に答える