// Private Methods ////////////////////////////////////////////////////////////// void GPS_MTK_Class::parse_ubx_gps(void) { int j; //Verifing if we are in class 1, you can change this "IF" for a "Switch" in case you want to use other UBX classes.. //In this case all the message im using are in class 1, to know more about classes check PAGE 60 of DataSheet. if(UBX_class==0x01) { switch(UBX_id)//Checking the UBX ID { case 0x05: //ID Custom j=0; Lattitude= join_4_bytes(&UBX_buffer[j]); // lon*10000000 j+=4; Longitude = join_4_bytes(&UBX_buffer[j]); // lat*10000000 j+=4; Altitude = join_4_bytes(&UBX_buffer[j]); // MSL j+=4; Ground_Speed = join_4_bytes(&UBX_buffer[j]); j+=4; Ground_Course = join_4_bytes(&UBX_buffer[j]); j+=4; NumSats=UBX_buffer[j]; j++; Fix=UBX_buffer[j]; j++; Time = join_4_bytes(&UBX_buffer[j]); NewData=1; break; } } }
// Private Methods ////////////////////////////////////////////////////////////// void GPS_UBLOX_Class::parse_ubx_gps(void) { int j; //Verifing if we are in class 1, you can change this "IF" for a "Switch" in case you want to use other UBX classes.. //In this case all the message im using are in class 1, to know more about classes check PAGE 60 of DataSheet. if(UBX_class==0x01) { switch(UBX_id)//Checking the UBX ID { case 0x02: //ID NAV-POSLLH j=0; Time = join_4_bytes(&UBX_buffer[j]); // ms Time of week j+=4; Longitude = join_4_bytes(&UBX_buffer[j]); // lon*10000000 j+=4; Lattitude = join_4_bytes(&UBX_buffer[j]); // lat*10000000 j+=4; //Altitude = join_4_bytes(&UBX_buffer[j]); // elipsoid heigth mm j+=4; Altitude = (float)join_4_bytes(&UBX_buffer[j]); // MSL heigth mm //j+=4; /* hacc = (float)join_4_bytes(&UBX_buffer[j])/(float)1000; j+=4; vacc = (float)join_4_bytes(&UBX_buffer[j])/(float)1000; j+=4; */ NewData=1; break; case 0x03://ID NAV-STATUS //if(UBX_buffer[4] >= 0x03) if((UBX_buffer[4] >= 0x03)&&(UBX_buffer[5]&0x01)) Fix=1; //valid position else Fix=0; //invalid position break; case 0x06://ID NAV-SOL if((UBX_buffer[10] >= 0x03)&&(UBX_buffer[11]&0x01)) Fix=1; //valid position else Fix=0; //invalid position UBX_ecefVZ=join_4_bytes(&UBX_buffer[36]); //Vertical Speed in cm/s NumSats=UBX_buffer[47]; //Number of sats... break; case 0x12:// ID NAV-VELNED j=16; Speed_3d = join_4_bytes(&UBX_buffer[j]); // cm/s j+=4; Ground_Speed = join_4_bytes(&UBX_buffer[j]); // Ground speed 2D cm/s j+=4; Ground_Course = join_4_bytes(&UBX_buffer[j]); // Heading 2D deg*100000 Ground_Course /= 1000; // Rescale heading to deg * 100 j+=4; /* sacc = join_4_bytes(&UBX_buffer[j]) // Speed accuracy j+=4; headacc = join_4_bytes(&UBX_buffer[j]) // Heading accuracy j+=4; */ break; } } }
// Private Methods ////////////////////////////////////////////////////////////// void parse_ubx_gps(void) { int j; switch(UBX_class){ case 0x01: switch(UBX_id)//Checking the UBX ID { case 0x02: //ID NAV-POSLLH j=0; Time = join_4_bytes(&UBX_buffer[j]); // ms Time of week j+=4; Longitude = join_4_bytes(&UBX_buffer[j]); // lon*10000000 j+=4; Lattitude = join_4_bytes(&UBX_buffer[j]); // lat*10000000 j+=4; Altitude = join_4_bytes(&UBX_buffer[j]); // elipsoid heigth mm j+=4; //Altitude = (float)join_4_bytes(&UBX_buffer[j]); // MSL heigth mm NewData=1; break; case 0x03://ID NAV-STATUS //if(UBX_buffer[4] >= 0x03) if((UBX_buffer[4] >= 0x03)&&(UBX_buffer[5]&0x01)) Fix=1; //valid position else Fix=0; //invalid position break; case 0x06://ID NAV-SOL if((UBX_buffer[10] >= 0x03)&&(UBX_buffer[11]&0x01)) Fix=1; //valid position else Fix=0; //invalid position UBX_ecefVZ=join_4_bytes(&UBX_buffer[36]); //Vertical Speed in cm/s NumSats=UBX_buffer[47]; //Number of sats... break; case 0x12:// ID NAV-VELNED j=16; Speed_3d = join_4_bytes(&UBX_buffer[j]); // cm/s j+=4; Ground_Speed = join_4_bytes(&UBX_buffer[j]); // Ground speed 2D cm/s j+=4; Ground_Course = join_4_bytes(&UBX_buffer[j]); // Heading 2D deg*100000 Ground_Course /= 1000; // Rescale heading to deg * 100 j+=4; break; } // UBX_class = 0x0D; PosData = 1; break; //Serial.println(UBX_class); case 0x0D: //UBX_id = 0x03; switch(UBX_id)//Checking the UBX ID { case 0x03: //ID TIM-TM2 ch = one_byte(&UBX_buffer[0]); flags = one_byte(&UBX_buffer[1]); count = join_2_bytes(&UBX_buffer[2]); wnR = join_2_bytes(&UBX_buffer[4]); wnF = join_2_bytes(&UBX_buffer[6]); towMsR = join_4_bytes(&UBX_buffer[8]); towSubMsR = join_4_bytes(&UBX_buffer[12]); towMsF = join_4_bytes(&UBX_buffer[16]); towSubMsF = join_4_bytes(&UBX_buffer[20]); accEst = join_4_bytes(&UBX_buffer[24]); checksum = join_2_bytes(&UBX_buffer[28]); break; } NewData=1; break; } }
void parse_ubx_gps(void) { int j1; //Verifing if we are in class 1, you can change this "IF" for a "Switch" in case you want to use other UBX classes.. //In this case all the message im using are in class 1, to know more about classes check PAGE 60 of DataSheet. if(gUblox.Class == 0x01) { switch(gUblox.id) //Checking the UBX ID { case 0x02: // ID NAV - POSLLH j1 = 0; gUblox.Time = join_4_bytes(&UBX_buffer[j1]); // ms Time of week j1 += 4; gUblox.Longitude = join_4_bytes(&UBX_buffer[j1]); // lon * 10000000 j1 += 4; gUblox.Lattitude = join_4_bytes(&UBX_buffer[j1]); // lat * 10000000 j1 += 4; //Altitude = j1oin_4_bytes(&UBX_buffer[j1]); // elipsoid heigth mm j1 += 4; gUblox.Altitude =join_4_bytes(&UBX_buffer[j1]); // MSL heigth mm //gUblox.Altitude /= 10.; gUblox.NewData = 1; break; case 0x03: //ID NAV - STATUS if((UBX_buffer[4] >= 0x03) && (UBX_buffer[5] & 0x01)) gUblox.Fix = 1; // valid position else gUblox.Fix = 0; // invalid position break; case 0x06: //ID NAV - SOL if((UBX_buffer[10] >= 0x03) && (UBX_buffer[11] & 0x01)) gUblox.Fix = 1; // valid position else gUblox.Fix = 0; // invalid position gUblox.NumSats = UBX_buffer[47]; // Number of sats... break; case 0x12: // ID NAV - VELNED gUblox.velN= join_4_bytes(&UBX_buffer[4]); // cm / s gUblox.velE= join_4_bytes(&UBX_buffer[8]); // cm / s gUblox.velD= join_4_bytes(&UBX_buffer[12]); // cm / s j1 = 16; gUblox.Speed_3d = join_4_bytes(&UBX_buffer[j1]); // cm / s j1 += 4; gUblox.Ground_Speed = join_4_bytes(&UBX_buffer[j1]); // Ground speed 2D cm / s gUblox.Ground_Speed/=100; // Ground speed 2D m / s j1 += 4; gUblox.Ground_Course = join_4_bytes(&UBX_buffer[j1]); // Heading 2D deg * 100000 gUblox.Ground_Course /= 100000; // Rescale heading to deg * 100 j1 += 4; break; } } }