简体   繁体   中英

send packet to UBX protocol

lately I have been working on a GPS reciever that supports both UBX and NEMA protocols. I am using serial programing on C++. I am trying to use UBX protocol, but it seems that I only recieve from NEMA. I downloaded the driver and I think I need to send a package first to recieve through UBX. Does anyone know a link or could tell me how could I send these packages the method I developed is stated below I think I need a small command before I start reading the data. Please someone help me here :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

At the ublox Homepage you can Download the ublox protocoll specification. There, look at the cfg messages. For test purposes, you also can enable the ubx protocol via the tool u-Center .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM