title: send packet to UBX protocol
body: <p>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</p>
  
  <pre><code>void read_port(void)
  {
      unsigned char c='D';
  
  
       while (c!='q')
      {
              if (read(fd, UBX_buffer, sizeof(UBX_buffer))&gt;0)      
              {
                  data = read(fd, UBX_buffer, sizeof(UBX_buffer));
  
              //  write(fd,&amp;UBX_buffer,1);  // if new data is available on the serial port, print it out
  
        cout&lt;&lt;"Data on the port =  ";
        for (unsigned i =0; i&lt; sizeof(UBX_buffer) ;i++){
          cout&lt;&lt;&amp;UBX_buffer[i];  
  
  
      }
      cout&lt;&lt;" "&lt;&lt;endl;
       for (int i=0; i&lt;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 &lt; 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)&amp;&amp;(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,&amp;c,1)&gt;0) write(fd,&amp;c,1);  // if new data is available on the console, send it to the serial port
  
      }
  
      close(fd);
  
  
  
    } // End Switch
  } // End For
  </code></pre>