github.com/bluenviron/gomavlib/v2@v2.2.1-0.20240308101627-2c07e3da629c/pkg/dialects/development/enum_mav_mode_property.go (about) 1 //autogenerated:yes 2 //nolint:revive,misspell,govet,lll,dupl,gocritic 3 package development 4 5 import ( 6 "fmt" 7 "strconv" 8 "strings" 9 ) 10 11 // Mode properties. 12 type MAV_MODE_PROPERTY uint64 13 14 const ( 15 // If set, this mode is an advanced mode. 16 // For example a rate-controlled manual mode might be advanced, whereas a position-controlled manual mode is not. 17 // A GCS can optionally use this flag to configure the UI for its intended users. 18 MAV_MODE_PROPERTY_ADVANCED MAV_MODE_PROPERTY = 1 19 // If set, this mode should not be added to the list of selectable modes. 20 // The mode might still be selected by the FC directly (for example as part of a failsafe). 21 MAV_MODE_PROPERTY_NOT_USER_SELECTABLE MAV_MODE_PROPERTY = 2 22 ) 23 24 var labels_MAV_MODE_PROPERTY = map[MAV_MODE_PROPERTY]string{ 25 MAV_MODE_PROPERTY_ADVANCED: "MAV_MODE_PROPERTY_ADVANCED", 26 MAV_MODE_PROPERTY_NOT_USER_SELECTABLE: "MAV_MODE_PROPERTY_NOT_USER_SELECTABLE", 27 } 28 29 var values_MAV_MODE_PROPERTY = map[string]MAV_MODE_PROPERTY{ 30 "MAV_MODE_PROPERTY_ADVANCED": MAV_MODE_PROPERTY_ADVANCED, 31 "MAV_MODE_PROPERTY_NOT_USER_SELECTABLE": MAV_MODE_PROPERTY_NOT_USER_SELECTABLE, 32 } 33 34 // MarshalText implements the encoding.TextMarshaler interface. 35 func (e MAV_MODE_PROPERTY) MarshalText() ([]byte, error) { 36 if e == 0 { 37 return []byte("0"), nil 38 } 39 var names []string 40 for i := 0; i < 2; i++ { 41 mask := MAV_MODE_PROPERTY(1 << i) 42 if e&mask == mask { 43 names = append(names, labels_MAV_MODE_PROPERTY[mask]) 44 } 45 } 46 return []byte(strings.Join(names, " | ")), nil 47 } 48 49 // UnmarshalText implements the encoding.TextUnmarshaler interface. 50 func (e *MAV_MODE_PROPERTY) UnmarshalText(text []byte) error { 51 labels := strings.Split(string(text), " | ") 52 var mask MAV_MODE_PROPERTY 53 for _, label := range labels { 54 if value, ok := values_MAV_MODE_PROPERTY[label]; ok { 55 mask |= value 56 } else if value, err := strconv.Atoi(label); err == nil { 57 mask |= MAV_MODE_PROPERTY(value) 58 } else { 59 return fmt.Errorf("invalid label '%s'", label) 60 } 61 } 62 *e = mask 63 return nil 64 } 65 66 // String implements the fmt.Stringer interface. 67 func (e MAV_MODE_PROPERTY) String() string { 68 val, _ := e.MarshalText() 69 return string(val) 70 }