2013-05-22 2 views
0

요즘 UBX 및 NEMA 프로토콜을 모두 지원하는 GPS 수신기를 연구하고 있습니다. C++에서 시리얼 프로그래밍을 사용하고 있습니다. UBX 프로토콜을 사용하려고하지만 NEMA에서만 수신하는 것으로 보입니다. 나는 드라이버를 다운로드했고 UBX를 통해 먼저 패키지를 보내야한다고 생각합니다. 누구나 링크를 알고 있거나, 내가 어떻게이 패키지를 보낼 수있는 지 알려줄 수있는 방법은 내가 개발 한 방법이 아래에 나와있다. 나는 데이터 읽기를 시작하기 전에 작은 명령이 필요하다고 생각한다. 다른 사람이 도와주세요 : D패킷을 UBX 프로토콜로 보냅니다.

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 

답변

0

ublox homepage에서 ublox protocoll 사양을 다운로드 할 수 있습니다. cfg 메시지를 살펴보십시오. 테스트 목적으로 u-Center 도구를 통해 ubx 프로토콜을 사용할 수도 있습니다.

관련 문제