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  }