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

109 lines
4.0 KiB
Dart
Raw Permalink Normal View History

2024-07-31 19:04:11 +08:00
import 'parser.dart';
import 'sentence.dart';
import 'types.dart';
// ignore_for_file: constant_identifier_names
// Type constants
const String TypeAPB = "APB"; // type of APB sentence for Autopilot Sentence "B"
// Status constants for APB
const String StatusWarningASetAPB = "V"; // LORAN-C Blink or SNR warning
const String StatusWarningAClearORNotUsedAPB =
"A"; // general warning flag or other navigation systems when a reliable fix is not available
const String StatusWarningBSetAPB =
"A"; // Loran-C Cycle Lock warning OK or not used
const String StatusWarningBClearAPB = "V"; // Loran-C Cycle Lock warning flag
// Autopilot related constants (used in APB, APA, AAM)
const String WPStatusPerpendicularPassedA =
"A"; // warning for passing the perpendicular of the course line of waypoint
const String WPStatusPerpendicularPassedV =
"V"; // indicates for not passing of the perpendicular of the course line of waypoint
const String WPStatusArrivalCircleEnteredA =
"A"; // warning of entering to waypoint circle
const String WPStatusArrivalCircleEnteredV =
"V"; // indicates of not yet entered into waypoint circle
class APB {
String statusGeneralWarning;
String statusLockWarning;
double crossTrackErrorMagnitude;
String directionToSteer;
String crossTrackUnits;
String statusArrivalCircleEntered;
String statusPerpendicularPassed;
double bearingOriginToDest;
String bearingOriginToDestType;
String destinationWaypointID;
double bearingPresentToDest;
String bearingPresentToDestType;
double heading;
String headingType;
String ffaMode;
APB({
required this.statusGeneralWarning,
required this.statusLockWarning,
required this.crossTrackErrorMagnitude,
required this.directionToSteer,
required this.crossTrackUnits,
required this.statusArrivalCircleEntered,
required this.statusPerpendicularPassed,
required this.bearingOriginToDest,
required this.bearingOriginToDestType,
required this.destinationWaypointID,
required this.bearingPresentToDest,
required this.bearingPresentToDestType,
required this.heading,
required this.headingType,
this.ffaMode = "",
});
static APB newAPB(BaseSentence s) {
Parser p = Parser(s);
return APB(
statusGeneralWarning: p.enumString(0, "general warning",
[StatusWarningAClearORNotUsedAPB, StatusWarningASetAPB]),
statusLockWarning: p.enumString(
1, "lock warning", [StatusWarningBSetAPB, StatusWarningBClearAPB]),
crossTrackErrorMagnitude: p.float64(2, "cross track error magnitude"),
directionToSteer:
p.enumString(3, "direction to steer", ["Left", "Right"]),
crossTrackUnits: p.enumString(4, "cross track units", [
DistanceUnitKilometre,
DistanceUnitNauticalMile,
DistanceUnitStatuteMile,
DistanceUnitMetre
]),
statusArrivalCircleEntered: p.enumString(
5,
"arrival circle entered status",
[WPStatusArrivalCircleEnteredA, WPStatusArrivalCircleEnteredV]),
statusPerpendicularPassed: p.enumString(
6,
"perpendicularly passed status",
[WPStatusPerpendicularPassedA,
WPStatusPerpendicularPassedV]),
bearingOriginToDest: p.float64(7, "origin bearing to destination"),
bearingOriginToDestType: p.enumString(
8,
"origin bearing to destination type",
["HeadingMagnetic",
"HeadingTrue"]),
destinationWaypointID: p.string(9, "destination waypoint ID"),
bearingPresentToDest: p.float64(10, "present bearing to destination"),
bearingPresentToDestType: p.enumString(
11,
"present bearing to destination type",
["HeadingMagnetic",
"HeadingTrue"]),
heading: p.float64(12, "heading"),
headingType:
p.enumString(13, "heading type", ["HeadingMagnetic", "HeadingTrue"]),
ffaMode: p.string(14,
"FAA mode"), // not enum because some devices have proprietary "non-nmea" values
);
}
}