70 lines
1.6 KiB
Dart
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});
|
||
|
}
|