109 lines
4.0 KiB
Dart
109 lines
4.0 KiB
Dart
|
|
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
|
|
);
|
|
}
|
|
}
|