// ignore_for_file: constant_identifier_names import 'parser.dart'; import 'sentence.dart'; const TypeGSV = "GSV"; class GSV { int totalMessages; int messageNumber; int numberSVsInView; List info; int systemID; int signalID; GSV( {required this.totalMessages, required this.messageNumber, required this.numberSVsInView, required this.info, required this.systemID, required this.signalID}); static GSV newGSV(BaseSentence s) { var p = Parser(s); var gsv = GSV( totalMessages: p.int64(0, "total number of messages"), messageNumber: p.int64(1, "message number"), numberSVsInView: p.int64(2, "number of SVs in view"), info: [], systemID: 0, signalID: 0, ); int i = 0; for (; i < 4; i++) { if (6 + i * 4 >= s.fields.length) { break; } gsv.info.add(GSVInfo( svprnNumber: p.int64(3 + i * 4, "SV prn number"), elevation: p.int64(4 + i * 4, "elevation"), azimuth: p.int64(5 + i * 4, "azimuth"), snr: p.int64(6 + i * 4, "SNR"), )); } var idxSID = (6 + (i - 1) * 4) + 1; if (s.fields.length == idxSID + 2) { gsv.systemID = p.int64(idxSID, "system ID"); gsv.signalID = p.int64(idxSID + 1, "signal ID"); } if (s.fields.length == idxSID + 1) { gsv.signalID = p.int64(idxSID, "signal ID"); } return gsv; } } class GSVInfo { int svprnNumber; int elevation; int azimuth; int snr; GSVInfo( {required this.svprnNumber, required this.elevation, required this.azimuth, required this.snr}); }