gnssview_old/plugins/gnss/lib/nmea/alc.dart

67 lines
1.6 KiB
Dart
Raw Normal View History

2024-07-31 19:04:11 +08:00
// ignore_for_file: constant_identifier_names
import 'parser.dart';
import 'sentence.dart';
const TypeALC = "ALC";
class ALC {
int numFragments; // 0
int fragmentNumber; // 1
int messageID; // 2
int entriesNumber; // 3
List<ALCAlertEntry> alertEntries;
ALC({
required this.numFragments,
required this.fragmentNumber,
required this.messageID,
required this.entriesNumber,
required this.alertEntries,
});
static ALC newALC(BaseSentence s) {
var p = Parser(s);
var alc = ALC(
numFragments: p.int64(0, "number of fragments"),
fragmentNumber: p.int64(1, "fragment number"),
messageID: p.int64(2, "message ID"),
entriesNumber: p.int64(3, "entries number"),
alertEntries: []);
int fieldCount = s.fields.length;
if (fieldCount == 4) {
return alc;
}
if (fieldCount % 4 != 0) {
return alc;
}
for (int i = 4; i < fieldCount; i = i + 4) {
var tmp = ALCAlertEntry(
manufacturerMnemonicCode:
p.string(i * 4 + 4, "manufacturer mnemonic code"),
alertIdentifier: p.int64(i * 4 + 5, "alert identifier"),
alertInstance: p.int64(i * 4 + 6, "alert instance"),
revisionCounter: p.int64(i * 4 + 7, "revision counter"),
);
alc.alertEntries.add(tmp);
}
return alc;
}
}
class ALCAlertEntry {
String manufacturerMnemonicCode; // i+4
int alertIdentifier; // i+5
int alertInstance; // i+6
int revisionCounter; // i+7
ALCAlertEntry({
required this.manufacturerMnemonicCode,
required this.alertIdentifier,
required this.alertInstance,
required this.revisionCounter,
});
}