private ParsingResult ParsingPsti50(String[] param, NmeaTypeIdentify.NmeaType t) { if (param.Length != 18) { return ParsingResult.None; } int total = Convert.ToInt32(param[2]); int current = Convert.ToInt32(param[3]); int totalSate = Convert.ToInt32(param[4]); if (current == 1) { totalPsti50 = total; lastPsti50 = current; } int MaxParam = 17; for (int i = 5; i < MaxParam; i += 3) { String pi = param[i]; if (pi.Length <= 0) { break; } String pi2 = param[i + 2]; int id = Convert.ToInt32(pi); int snr = (pi2.Length <= 0) ? 0 : Convert.ToInt32(pi2); parsingStat.UpdateGlonassSnr(id, snr); } if (total == current) { totalGsv = -1; lastGsv = -1; return ParsingResult.UpdateSate; } return ParsingResult.None; }
private ParsingResult ParsingGsv(String s, NmeaTypeIdentify.NmeaType t) { char[] delimiterChars = { ',', '*' }; String[] param = s.Split(delimiterChars); if (param.Length != 9 && param.Length != 13 && param.Length != 17 && param.Length != 21) { return ParsingResult.None; } int total = Convert.ToInt32(param[1]); int current = Convert.ToInt32(param[2]); int totalSate = Convert.ToInt32(param[3]); if(current==1) { totalGsv = total; lastGsv = current; } int MaxParam; switch (param.Length) { case 9: MaxParam = 8; break; case 13: MaxParam = 12; break; case 17: MaxParam = 16; break; case 21: MaxParam = 20; break; default: MaxParam = 0; break; } for (int i = 4; i < MaxParam; i += 4) { String pi = param[i]; if (pi.Length <= 0) { break; } String pi3 = param[i + 3]; int id = Convert.ToInt32(pi); int snr = (pi3.Length <= 0) ? 0 : Convert.ToInt32(pi3); switch (t) { case NmeaTypeIdentify.NmeaType.GPGSV: parsingStat.UpdateGNSnr(id, snr); break; case NmeaTypeIdentify.NmeaType.GLGSV: parsingStat.UpdateGlonassSnr(id, snr); break; case NmeaTypeIdentify.NmeaType.BDGSV: parsingStat.UpdateBeidouSnr(id, snr); break; case NmeaTypeIdentify.NmeaType.GNGSV: parsingStat.UpdateGNSnr(id, snr); break; } } if(total==current) { totalGsv = -1; lastGsv = -1; return ParsingResult.UpdateSate; } return ParsingResult.None; }
private ParsingResult ParsingPsti(String s, NmeaTypeIdentify.NmeaType t) { char[] delimiterChars = { ',', '*' }; String[] param = s.Split(delimiterChars); if (param[1] == "050") { return ParsingPsti50(param, t); } return ParsingResult.None; }
private ParsingResult ParsingGsa(String s, NmeaTypeIdentify.NmeaType t) { char[] delimiterChars = { ',', '*' }; String[] param = s.Split(delimiterChars); if (param.Length < 18) { return ParsingResult.None; } int posFix = Convert.ToInt32(param[2]); //parsingStat.Clear(); for (int i = 3; i < 15; i++) { String pi = param[i]; if(pi.Length <= 0) { break; } int prn = Convert.ToInt32(pi); switch (t) { case NmeaTypeIdentify.NmeaType.GPGSA: parsingStat.AddInUseGpsPrn(prn); break; case NmeaTypeIdentify.NmeaType.GLGSA: parsingStat.AddInUseGlonassPrn(prn); break; case NmeaTypeIdentify.NmeaType.BDGSA: parsingStat.AddInUseBeidouPrn(prn); break; case NmeaTypeIdentify.NmeaType.GNGSA: parsingStat.AddInUseGNPrn(prn); break; } } if(posFix != parsingStat.positionFixResult) { parsingStat.positionFixResult = posFix; return ParsingResult.UpdateFixPosition; } return ParsingResult.None; }