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 ); } }