github.com/bluenviron/gomavlib/v2@v2.2.1-0.20240308101627-2c07e3da629c/pkg/dialects/common/enum_gimbal_device_cap_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 // Gimbal device (low level) capability flags (bitmap). 12 type GIMBAL_DEVICE_CAP_FLAGS uint64 13 14 const ( 15 // Gimbal device supports a retracted position. 16 GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT GIMBAL_DEVICE_CAP_FLAGS = 1 17 // Gimbal device supports a horizontal, forward looking position, stabilized. 18 GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL GIMBAL_DEVICE_CAP_FLAGS = 2 19 // Gimbal device supports rotating around roll axis. 20 GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS GIMBAL_DEVICE_CAP_FLAGS = 4 21 // Gimbal device supports to follow a roll angle relative to the vehicle. 22 GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW GIMBAL_DEVICE_CAP_FLAGS = 8 23 // Gimbal device supports locking to a roll angle (generally that's the default with roll stabilized). 24 GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK GIMBAL_DEVICE_CAP_FLAGS = 16 25 // Gimbal device supports rotating around pitch axis. 26 GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS GIMBAL_DEVICE_CAP_FLAGS = 32 27 // Gimbal device supports to follow a pitch angle relative to the vehicle. 28 GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW GIMBAL_DEVICE_CAP_FLAGS = 64 29 // Gimbal device supports locking to a pitch angle (generally that's the default with pitch stabilized). 30 GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK GIMBAL_DEVICE_CAP_FLAGS = 128 31 // Gimbal device supports rotating around yaw axis. 32 GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS GIMBAL_DEVICE_CAP_FLAGS = 256 33 // Gimbal device supports to follow a yaw angle relative to the vehicle (generally that's the default). 34 GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW GIMBAL_DEVICE_CAP_FLAGS = 512 35 // Gimbal device supports locking to an absolute heading, i.e., yaw angle relative to North (earth frame, often this is an option available). 36 GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK GIMBAL_DEVICE_CAP_FLAGS = 1024 37 // Gimbal device supports yawing/panning infinitely (e.g. using slip disk). 38 GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW GIMBAL_DEVICE_CAP_FLAGS = 2048 39 // Gimbal device supports yaw angles and angular velocities relative to North (earth frame). This usually requires support by an autopilot via AUTOPILOT_STATE_FOR_GIMBAL_DEVICE. Support can go on and off during runtime, which is reported by the flag GIMBAL_DEVICE_FLAGS_CAN_ACCEPT_YAW_IN_EARTH_FRAME. 40 GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME GIMBAL_DEVICE_CAP_FLAGS = 4096 41 // Gimbal device supports radio control inputs as an alternative input for controlling the gimbal orientation. 42 GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS GIMBAL_DEVICE_CAP_FLAGS = 8192 43 ) 44 45 var labels_GIMBAL_DEVICE_CAP_FLAGS = map[GIMBAL_DEVICE_CAP_FLAGS]string{ 46 GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT: "GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT", 47 GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL: "GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL", 48 GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS: "GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS", 49 GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW: "GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW", 50 GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK: "GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK", 51 GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS: "GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS", 52 GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW: "GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW", 53 GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK: "GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK", 54 GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS: "GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS", 55 GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW: "GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW", 56 GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK: "GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK", 57 GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW: "GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW", 58 GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME: "GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME", 59 GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS: "GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS", 60 } 61 62 var values_GIMBAL_DEVICE_CAP_FLAGS = map[string]GIMBAL_DEVICE_CAP_FLAGS{ 63 "GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT": GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT, 64 "GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL": GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL, 65 "GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS": GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS, 66 "GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW": GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW, 67 "GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK": GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK, 68 "GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS": GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS, 69 "GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW": GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW, 70 "GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK": GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK, 71 "GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS": GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS, 72 "GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW": GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW, 73 "GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK": GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK, 74 "GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW": GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW, 75 "GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME": GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_YAW_IN_EARTH_FRAME, 76 "GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS": GIMBAL_DEVICE_CAP_FLAGS_HAS_RC_INPUTS, 77 } 78 79 // MarshalText implements the encoding.TextMarshaler interface. 80 func (e GIMBAL_DEVICE_CAP_FLAGS) MarshalText() ([]byte, error) { 81 if e == 0 { 82 return []byte("0"), nil 83 } 84 var names []string 85 for i := 0; i < 14; i++ { 86 mask := GIMBAL_DEVICE_CAP_FLAGS(1 << i) 87 if e&mask == mask { 88 names = append(names, labels_GIMBAL_DEVICE_CAP_FLAGS[mask]) 89 } 90 } 91 return []byte(strings.Join(names, " | ")), nil 92 } 93 94 // UnmarshalText implements the encoding.TextUnmarshaler interface. 95 func (e *GIMBAL_DEVICE_CAP_FLAGS) UnmarshalText(text []byte) error { 96 labels := strings.Split(string(text), " | ") 97 var mask GIMBAL_DEVICE_CAP_FLAGS 98 for _, label := range labels { 99 if value, ok := values_GIMBAL_DEVICE_CAP_FLAGS[label]; ok { 100 mask |= value 101 } else if value, err := strconv.Atoi(label); err == nil { 102 mask |= GIMBAL_DEVICE_CAP_FLAGS(value) 103 } else { 104 return fmt.Errorf("invalid label '%s'", label) 105 } 106 } 107 *e = mask 108 return nil 109 } 110 111 // String implements the fmt.Stringer interface. 112 func (e GIMBAL_DEVICE_CAP_FLAGS) String() string { 113 val, _ := e.MarshalText() 114 return string(val) 115 }