github.com/bluenviron/gomavlib/v2@v2.2.1-0.20240308101627-2c07e3da629c/pkg/dialects/common/enum_ais_flags.go (about) 1 //autogenerated:yes 2 //nolint:revive,misspell,govet,lll,dupl,gocritic 3 package common 4 5 import ( 6 "fmt" 7 "strconv" 8 "strings" 9 ) 10 11 // These flags are used in the AIS_VESSEL.fields bitmask to indicate validity of data in the other message fields. When set, the data is valid. 12 type AIS_FLAGS uint64 13 14 const ( 15 // 1 = Position accuracy less than 10m, 0 = position accuracy greater than 10m. 16 AIS_FLAGS_POSITION_ACCURACY AIS_FLAGS = 1 17 AIS_FLAGS_VALID_COG AIS_FLAGS = 2 18 AIS_FLAGS_VALID_VELOCITY AIS_FLAGS = 4 19 // 1 = Velocity over 52.5765m/s (102.2 knots) 20 AIS_FLAGS_HIGH_VELOCITY AIS_FLAGS = 8 21 AIS_FLAGS_VALID_TURN_RATE AIS_FLAGS = 16 22 // Only the sign of the returned turn rate value is valid, either greater than 5deg/30s or less than -5deg/30s 23 AIS_FLAGS_TURN_RATE_SIGN_ONLY AIS_FLAGS = 32 24 AIS_FLAGS_VALID_DIMENSIONS AIS_FLAGS = 64 25 // Distance to bow is larger than 511m 26 AIS_FLAGS_LARGE_BOW_DIMENSION AIS_FLAGS = 128 27 // Distance to stern is larger than 511m 28 AIS_FLAGS_LARGE_STERN_DIMENSION AIS_FLAGS = 256 29 // Distance to port side is larger than 63m 30 AIS_FLAGS_LARGE_PORT_DIMENSION AIS_FLAGS = 512 31 // Distance to starboard side is larger than 63m 32 AIS_FLAGS_LARGE_STARBOARD_DIMENSION AIS_FLAGS = 1024 33 AIS_FLAGS_VALID_CALLSIGN AIS_FLAGS = 2048 34 AIS_FLAGS_VALID_NAME AIS_FLAGS = 4096 35 ) 36 37 var labels_AIS_FLAGS = map[AIS_FLAGS]string{ 38 AIS_FLAGS_POSITION_ACCURACY: "AIS_FLAGS_POSITION_ACCURACY", 39 AIS_FLAGS_VALID_COG: "AIS_FLAGS_VALID_COG", 40 AIS_FLAGS_VALID_VELOCITY: "AIS_FLAGS_VALID_VELOCITY", 41 AIS_FLAGS_HIGH_VELOCITY: "AIS_FLAGS_HIGH_VELOCITY", 42 AIS_FLAGS_VALID_TURN_RATE: "AIS_FLAGS_VALID_TURN_RATE", 43 AIS_FLAGS_TURN_RATE_SIGN_ONLY: "AIS_FLAGS_TURN_RATE_SIGN_ONLY", 44 AIS_FLAGS_VALID_DIMENSIONS: "AIS_FLAGS_VALID_DIMENSIONS", 45 AIS_FLAGS_LARGE_BOW_DIMENSION: "AIS_FLAGS_LARGE_BOW_DIMENSION", 46 AIS_FLAGS_LARGE_STERN_DIMENSION: "AIS_FLAGS_LARGE_STERN_DIMENSION", 47 AIS_FLAGS_LARGE_PORT_DIMENSION: "AIS_FLAGS_LARGE_PORT_DIMENSION", 48 AIS_FLAGS_LARGE_STARBOARD_DIMENSION: "AIS_FLAGS_LARGE_STARBOARD_DIMENSION", 49 AIS_FLAGS_VALID_CALLSIGN: "AIS_FLAGS_VALID_CALLSIGN", 50 AIS_FLAGS_VALID_NAME: "AIS_FLAGS_VALID_NAME", 51 } 52 53 var values_AIS_FLAGS = map[string]AIS_FLAGS{ 54 "AIS_FLAGS_POSITION_ACCURACY": AIS_FLAGS_POSITION_ACCURACY, 55 "AIS_FLAGS_VALID_COG": AIS_FLAGS_VALID_COG, 56 "AIS_FLAGS_VALID_VELOCITY": AIS_FLAGS_VALID_VELOCITY, 57 "AIS_FLAGS_HIGH_VELOCITY": AIS_FLAGS_HIGH_VELOCITY, 58 "AIS_FLAGS_VALID_TURN_RATE": AIS_FLAGS_VALID_TURN_RATE, 59 "AIS_FLAGS_TURN_RATE_SIGN_ONLY": AIS_FLAGS_TURN_RATE_SIGN_ONLY, 60 "AIS_FLAGS_VALID_DIMENSIONS": AIS_FLAGS_VALID_DIMENSIONS, 61 "AIS_FLAGS_LARGE_BOW_DIMENSION": AIS_FLAGS_LARGE_BOW_DIMENSION, 62 "AIS_FLAGS_LARGE_STERN_DIMENSION": AIS_FLAGS_LARGE_STERN_DIMENSION, 63 "AIS_FLAGS_LARGE_PORT_DIMENSION": AIS_FLAGS_LARGE_PORT_DIMENSION, 64 "AIS_FLAGS_LARGE_STARBOARD_DIMENSION": AIS_FLAGS_LARGE_STARBOARD_DIMENSION, 65 "AIS_FLAGS_VALID_CALLSIGN": AIS_FLAGS_VALID_CALLSIGN, 66 "AIS_FLAGS_VALID_NAME": AIS_FLAGS_VALID_NAME, 67 } 68 69 // MarshalText implements the encoding.TextMarshaler interface. 70 func (e AIS_FLAGS) MarshalText() ([]byte, error) { 71 if e == 0 { 72 return []byte("0"), nil 73 } 74 var names []string 75 for i := 0; i < 13; i++ { 76 mask := AIS_FLAGS(1 << i) 77 if e&mask == mask { 78 names = append(names, labels_AIS_FLAGS[mask]) 79 } 80 } 81 return []byte(strings.Join(names, " | ")), nil 82 } 83 84 // UnmarshalText implements the encoding.TextUnmarshaler interface. 85 func (e *AIS_FLAGS) UnmarshalText(text []byte) error { 86 labels := strings.Split(string(text), " | ") 87 var mask AIS_FLAGS 88 for _, label := range labels { 89 if value, ok := values_AIS_FLAGS[label]; ok { 90 mask |= value 91 } else if value, err := strconv.Atoi(label); err == nil { 92 mask |= AIS_FLAGS(value) 93 } else { 94 return fmt.Errorf("invalid label '%s'", label) 95 } 96 } 97 *e = mask 98 return nil 99 } 100 101 // String implements the fmt.Stringer interface. 102 func (e AIS_FLAGS) String() string { 103 val, _ := e.MarshalText() 104 return string(val) 105 }