gnssview_old/plugins/gnss/lib/nmea/gsv.dart
tanlinxing 553bde932c getx
2024-07-31 19:04:11 +08:00

70 lines
1.6 KiB
Dart

// ignore_for_file: constant_identifier_names
import 'parser.dart';
import 'sentence.dart';
const TypeGSV = "GSV";
class GSV {
int totalMessages;
int messageNumber;
int numberSVsInView;
List<GSVInfo> 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});
}