DJI Typedef

2024-02-08
4.5 分
2 用户已评分

Typedef 的头文件为dji_typedef.h,本文档描述了dji_typedef.h 文件中宏定义和结构体的关键信息和使用方法。

宏定义

  • 圆周率
#define DJI_PI                     (3.14159265358979323846f)
  • 文件名大小
#define DJI_FILE_NAME_SIZE_MAX     256
  • 路径长度
#define DJI_FILE_PATH_SIZE_MAX     (DJI_FILE_NAME_SIZE_MAX + 256)
  • IP 地址长度
#define DJI_IP_ADDR_STR_SIZE_MAX   15
  • MD5 缓冲区长度
#define DJI_MD5_BUFFER_LEN         16
  • 订阅模块索引偏移量
#define DJI_SUBSCRIPTION_MODULE_INDEX_OFFSET    24u
  • 订阅模块索引掩码
#define DJI_SUBSCRIPTION_MODULE_INDEX_MASK      0xFF000000u
#define DJI_SUBSCRIPTION_TOPIC_CODE_OFFSET      0u
#define DJI_SUBSCRIPTION_TOPIC_CODE_MASK        0x00FFFFFFu
#define DJI_DATA_SUBSCRIPTION_TOPIC(subscriptionModule, topicCode) \
(uint32_t)\
(((((uint32_t)(subscriptionModule)) << (DJI_SUBSCRIPTION_MODULE_INDEX_OFFSET)) & (DJI_SUBSCRIPTION_MODULE_INDEX_MASK)) | \
((((uint32_t)(topicCode)) << (DJI_SUBSCRIPTION_TOPIC_CODE_OFFSET)) & (DJI_SUBSCRIPTION_TOPIC_CODE_MASK)))

类型

  • 双精度浮点类型
typedef double dji_f64_t;
  • 单精度浮点类型
typedef float dji_f32_t;
  • 返回值类型定义(uint64)

    可以取详情请参见:DjiErrorCode 中的任意值。
typedef uint64_t T_DjiReturnCode;

枚举值

typedef enum E_DjiMountPositionType

安装位置类型。

typedef enum {
    DJI_MOUNT_POSITION_TYPE_UNKNOWN = 0,
    DJI_MOUNT_POSITION_TYPE_PAYLOAD_PORT = 1,
    DJI_MOUNT_POSITION_TYPE_EXTENSION_PORT = 2,
    DJI_MOUNT_POSITION_TYPE_EXTENSION_LITE_PORT = 3
} E_DjiMountPositionType;

typedef enum E_DjiMountPosition

安装位置

typedef enum {
    DJI_MOUNT_POSITION_UNKNOWN = 0,
    DJI_MOUNT_POSITION_PAYLOAD_PORT_NO1 = 1,
    DJI_MOUNT_POSITION_PAYLOAD_PORT_NO2 = 2,
    DJI_MOUNT_POSITION_PAYLOAD_PORT_NO3 = 3,
    DJI_MOUNT_POSITION_EXTENSION_PORT = 4,
    DJI_MOUNT_POSITION_EXTENSION_LITE_PORT = 5,
} E_DjiMountPosition;

typedef enum E_DjiAircraftSeries

无人机系列

typedef enum {
    DJI_AIRCRAFT_SERIES_UNKNOWN = 0,
    DJI_AIRCRAFT_SERIES_M200_V2 = 1,
    DJI_AIRCRAFT_SERIES_M300 = 2,
    DJI_AIRCRAFT_SERIES_M30 = 3,
    DJI_AIRCRAFT_SERIES_M3 = 4,
    DJI_AIRCRAFT_SERIES_M350 = 5,
    DJI_AIRCRAFT_SERIES_M3D = 6,
    DJI_AIRCRAFT_SERIES_FC30 = 7,
} E_DjiAircraftSeries;

typedef enum E_DjiAircraftType

无人机型号

typedef enum {
    DJI_AIRCRAFT_TYPE_UNKNOWN = 0, /*!< unknown */
    DJI_AIRCRAFT_TYPE_M200_V2 = 44, /*!< Matrice 200 V2 */
    DJI_AIRCRAFT_TYPE_M210_V2 = 45, /*!< Matrice 220 V2 */
    DJI_AIRCRAFT_TYPE_M210RTK_V2 = 46, /*!< Matrice 210 RTK V2 */
    DJI_AIRCRAFT_TYPE_M300_RTK = 60, /*!< Matrice 300 RTK */
    DJI_AIRCRAFT_TYPE_M30 = 67, /*!< Matrice 30 */
    DJI_AIRCRAFT_TYPE_M30T = 68, /*!< Matrice 30T */
    DJI_AIRCRAFT_TYPE_M3E = 77, /*!< Mavic 3E */
    DJI_AIRCRAFT_TYPE_FC30 = 78, /* !<FlyCart 30 */
    DJI_AIRCRAFT_TYPE_M3T = 79, /*!< Mavic 3T */
    DJI_AIRCRAFT_TYPE_M350_RTK = 89, /*!< Matrice 350 RTK */
    DJI_AIRCRAFT_TYPE_M3D = 91, /*!< Matrice 3D */
    DJI_AIRCRAFT_TYPE_M3TD = 93, /*!< Matrice 3TD */
} E_DjiAircraftType;

typedef enum E_DjiCameraType

相机类型

typedef enum {
    DJI_CAMERA_TYPE_UNKNOWN = 0, /*!< 相机类型为 unknown. */
    DJI_CAMERA_TYPE_Z30 = 20, /*!< 相机类型为 Z30. */
    DJI_CAMERA_TYPE_XT2 = 26, /*!< 相机类型为 XT2. */
    DJI_CAMERA_TYPE_PSDK = 31, /*!< 相机类型为基于 PSDK 的三方相机. */
    DJI_CAMERA_TYPE_XTS = 41, /*!< 相机类型为 XT S. */
    DJI_CAMERA_TYPE_H20 = 42, /*!< 相机类型为 H20. */
    DJI_CAMERA_TYPE_H20T = 43, /*!< 相机类型为 H20T. */
    DJI_CAMERA_TYPE_H20N = 61, /*!< 相机类型为 H20N. */
    DJI_CAMERA_TYPE_P1 = 50, /*!< 相机类型为 P1. */
    DJI_CAMERA_TYPE_L1, /*!< 相机类型为 L1. */
    DJI_CAMERA_TYPE_L2, /*!< 相机类型为 L2. */
    DJI_CAMERA_TYPE_M30, /*!< 相机类型为 M30. */
    DJI_CAMERA_TYPE_M30T, /*!< 相机类型为 M30T. */
    DJI_CAMERA_TYPE_M3E, /*!< 相机类型为 M3E. */
    DJI_CAMERA_TYPE_M3T, /*!< 相机类型为 M3T. */
    DJI_CAMERA_TYPE_M3D, /*!< 相机类型为 Matrice 3D. */
    DJI_CAMERA_TYPE_M3TD, /*!< 相机类型为 Matrice 3TD. */

} E_DjiCameraType;

typedef enum E_DjiCameraMediaFileType

相机媒体文件类型

typedef enum {
    DJI_CAMERA_FILE_TYPE_JPEG = 0, /*!< JPEG */
    DJI_CAMERA_FILE_TYPE_DNG = 1, /*!< DNG */
    DJI_CAMERA_FILE_TYPE_MOV = 2, /*!< MOV */
    DJI_CAMERA_FILE_TYPE_MP4 = 3, /*!< MP4 */
    DJI_CAMERA_FILE_TYPE_UNKNOWN = 255, /*!< 未知类型。 */
} E_DjiCameraMediaFileType;

typedef enum E_DjiGimbalMode

云台模式

typedef enum {
    DJI_GIMBAL_MODE_FREE = 0, /*!< 自由模式,在地面坐标系固定云台姿态,忽略飞行器的运动。 */
    DJI_GIMBAL_MODE_FPV = 1, /*!< FPV(第一人称视角)模式,仅控制云台在地面坐标中的横滚和偏航角跟随飞行器。 */
    DJI_GIMBAL_MODE_YAW_FOLLOW = 2, /*!< 偏航跟随模式,只控制云台在地面坐标的偏航角跟随飞行器。*/
} E_DjiGimbalMode;

typedef enum E_DjiGimbalRotationMode

云台旋转模式

typedef enum {
    DJI_GIMBAL_ROTATION_MODE_RELATIVE_ANGLE = 0, /*!< 相对角度旋转模式,表示根据当前角度旋转云台指定角度。 */
    DJI_GIMBAL_ROTATION_MODE_ABSOLUTE_ANGLE = 1, /*!< 绝对角度旋转模式,表示将云台旋转到地面坐标中的指定角度。 */
    DJI_GIMBAL_ROTATION_MODE_SPEED = 2, /*!< 速度旋转模式,指定云台在地面坐标下的旋转速度。 */
} E_DjiGimbalRotationMode;

typedef enum E_DjiMobileAppLanguage

Mobile App 系统语言

typedef enum {
    DJI_MOBILE_APP_LANGUAGE_UNKNOWN = 255, /*!< Mobile APP 的系统语言是 unknown */
    DJI_MOBILE_APP_LANGUAGE_ENGLISH = 0, /*!< Mobile APP 的系统语言是英语 */
    DJI_MOBILE_APP_LANGUAGE_CHINESE = 1, /*!< Mobile APP 的系统语言是中文 */
    DJI_MOBILE_APP_LANGUAGE_JAPANESE = 2, /*!< Mobile APP 的系统语言是日语 */
    DJI_MOBILE_APP_LANGUAGE_FRENCH = 3, /*!< Mobile APP 的系统语言是法语 */
} E_DjiMobileAppLanguage;

typedef enum E_DjiMobileAppScreenType

Mobile APP 屏幕类型

typedef enum {
    DJI_MOBILE_APP_SCREEN_TYPE_UNKNOWN = 255, /*!< Mobile APP 的屏幕类型为 unknown。 */
    DJI_MOBILE_APP_SCREEN_TYPE_BIG_SCREEN = 0, /*!< 移动设备的大屏是指屏幕尺寸大于等于6英寸。 */
    DJI_MOBILE_APP_SCREEN_TYPE_LITTLE_SCREEN = 1, /*!< 移动设备的小屏幕是指小于6英寸的屏幕。 */
} E_DjiMobileAppScreenType;

typedef enum E_DjiMobileAppScreenType

订阅频率类型

typedef enum {
    DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ = 1,
    DJI_DATA_SUBSCRIPTION_TOPIC_5_HZ = 5,
    DJI_DATA_SUBSCRIPTION_TOPIC_10_HZ = 10,
    DJI_DATA_SUBSCRIPTION_TOPIC_50_HZ = 50,
    DJI_DATA_SUBSCRIPTION_TOPIC_100_HZ = 100,
    DJI_DATA_SUBSCRIPTION_TOPIC_200_HZ = 200,
    DJI_DATA_SUBSCRIPTION_TOPIC_400_HZ = 400,
} E_DjiDataSubscriptionTopicFreq;

typedef enum E_DjiDataSubscriptionModule

DJI 模块枚举,用于定义数据订阅模块

typedef enum {
    DJI_DATA_SUBSCRIPTION_MODULE_FC = 0,
    DJI_DATA_SUBSCRIPTION_MODULE_CAMERA,
    DJI_DATA_SUBSCRIPTION_MODULE_ERROR,
} E_DjiDataSubscriptionModule;

typedef enum E_DjiSdkAdapterType

SDK适配器类型

typedef enum {
    DJI_SDK_ADAPTER_TYPE_UNKNOWN = 0, /*!< SDK适配器类型为 unknown。 */
    DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 = 1, /*!< SDK适配器类型为 Skyport V2。 */
    DJI_SDK_ADAPTER_TYPE_XPORT = 2, /*!< SDK适配器类型为 X-Port。 */
    DJI_SDK_ADAPTER_TYPE_NONE = 3, /*!< 在外无适配器。 */
} E_DjiSdkAdapterType;

typedef enum E_DjiChannelAddress

通道地址

typedef enum {
    DJI_CHANNEL_ADDRESS_UNKNOWN = 0,
    DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO1,
    DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO2,
    DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO3,
    DJI_CHANNEL_ADDRESS_EXTENSION_PORT,
    DJI_CHANNEL_ADDRESS_MASTER_RC_APP,
    DJI_CHANNEL_ADDRESS_SLAVE_RC_APP,
} E_DjiChannelAddress;

typedef enum E_DjiCameraZoomSpeed

相机变焦速度

typedef enum {
    DJI_CAMERA_ZOOM_SPEED_SLOWEST = 72, /*!< 镜头变焦处于最慢速度。 */
    DJI_CAMERA_ZOOM_SPEED_SLOW = 73, /*!< 镜头变焦处于慢速。 */
    DJI_CAMERA_ZOOM_SPEED_MODERATELY_SLOW = 74, /*!< 镜头变焦处于比普通速度稍慢的速度。 */
    DJI_CAMERA_ZOOM_SPEED_NORMAL = 75, /*!< 镜头变焦处于正常速度。 */
    DJI_CAMERA_ZOOM_SPEED_MODERATELY_FAST = 76, /*!< 镜头的变焦速度比正常速度略快。 */
    DJI_CAMERA_ZOOM_SPEED_FAST = 77, /*!< 镜头变焦处于快速。 */
    DJI_CAMERA_ZOOM_SPEED_FASTEST = 78, /*!< 镜头变焦处于最快速度。 */
} E_DjiCameraZoomSpeed;

typedef enum E_DjiCameraBurstCount

相机连拍计数

typedef enum {
    /*! 在连拍模式下每次连续拍摄的照片张数为 2*/
    DJI_CAMERA_BURST_COUNT_2  = 2,
    /*! 在连拍模式下每次连续拍摄的照片张数为 3*/
    DJI_CAMERA_BURST_COUNT_3 = 3,
    /*! 在连拍模式下每次连续拍摄的照片张数为 5*/
    DJI_CAMERA_BURST_COUNT_5 = 5,
    /*! 在连拍模式下每次连续拍摄的照片张数为 7*/
    DJI_CAMERA_BURST_COUNT_7 = 7,
    /*! 在连拍模式下每次连续拍摄的照片张数为 10, 仅被X4S 相机, X5S 相机和 Phantom 4 Pro 相机支持。*/
    DJI_CAMERA_BURST_COUNT_10 = 10,
    /*! 在连拍模式下每次连续拍摄的照片张数为 14, 仅被X4S 相机, X5S 相机和 Phantom 4 Pro 相机支持。*/
    DJI_CAMERA_BURST_COUNT_14 = 14,
    /*!	在连拍模式下每次连续拍摄的照片张数为 unknown.*/
    DJI_CAMERA_BURST_COUNT_KNOWN = 0xFF,
} E_DjiCameraBurstCount;

typedef enum E_DjiCameraZoomDirection

相机变焦方向

typedef enum {
    DJI_CAMERA_ZOOM_DIRECTION_OUT = 0, /*!< 镜头向远方移动,变焦倍数变小。 */
    DJI_CAMERA_ZOOM_DIRECTION_IN = 1, /*!< 镜头向近处移动,变焦倍数变大。*/
} E_DjiCameraZoomDirection;

结构体

typedef struct T_DjiCameraOpticalZoomSpec

typedef struct {
    uint16_t maxFocalLength; /*!< 镜头最大焦距, 单位: 0.1mm。 */
    uint16_t minFocalLength; /*!< 镜头最小焦距, 单位: 0.1mm。 */
    uint16_t focalLengthStep; /*!< 焦距变化的最小间隔, 单位: 0.1mm。 */
} T_DjiCameraOpticalZoomSpec;

typedef struct T_DjiCameraPointInScreen

对焦模式下的相机对焦目标点

typedef struct {
    dji_f32_t focusX; /*!< 指定水平区域坐标。 该参数介于 0 和 1 之间。点 [0.0, 0.0] 表示屏幕的左上角。*/
    dji_f32_t focusY; /*!< 指定垂直区域坐标。 此参数介于 0 和 1 之间。 */
} T_DjiCameraPointInScreen;

typedef struct T_DjiCameraPhotoTimeIntervalSettings

在间隔拍摄照片模式下的相机时间间隔设置。

typedef struct {
    uint8_t captureCount; /*!< 指定间隔设置的总拍摄计数。 0:保留 1~254:数字 255:一直拍摄直到停止*/
    uint16_t timeIntervalSeconds; /*!< 指定两次拍摄之间的间隔时间,单位:s*/
} T_DjiCameraPhotoTimeIntervalSettings;

typedef struct T_DjiDataChannelState

数据通道状态

typedef struct {
    /*! 数据流、视频流、下载流等通道的实时带宽限制,随飞行器系统的链路状态而变化。 必须保证数据传输的实际带宽小于实时带宽限制,单位:byte/s。*/
    int32_t realtimeBandwidthLimit;

    /*! 流控前计算的数据传输通道的实时实际传输带宽,单位:byte/s。 */
    int32_t realtimeBandwidthBeforeFlowController;

    /*! 流控后计算的数据传输通道的实时实际传输带宽,单位:byte/s。 如果指定通道不带流量控制器。 该值等于 ::realtimeBandwidthBeforeFlowController。 */
    int32_t realtimeBandwidthAfterFlowController;

    /*! 状态指定通道是否忙。 当数据不能直接发送到端点,而是发送到流控制器的缓冲区或丢弃时,将设置忙碌状态。 此时,用户应停止传输数据或减少通过该通道传输的数据量。 当数据带宽恢复正常后,此状态将再次被清除。 */
    bool busyState;
} T_DjiDataChannelState;

typedef struct T_DjiVector3d

定义空间向量的数据类型

typedef struct Vector3d {
    int32_t x; /*!< 为向量指定 x 的 int32 值。 */
    int32_t y; /*!< 为向量指定 y 的 int32 值。*/
    int32_t z; /*!< 为向量指定 z 的 int32 值。 */
} T_DjiVector3d;

typedef struct T_DjiVector3f

定义空间向量的数据类型

typedef struct Vector3f {
    dji_f32_t x; /*!< 为向量指定 x 的浮点值。*/
    dji_f32_t y; /*!< 为向量指定 y 的浮点值。 */
    dji_f32_t z; /*!< 为向量指定 z 的浮点值。 */
} T_DjiVector3f;

typedef struct T_DjiAttitude3d

typedef struct {
    int32_t pitch; /*!< 指定俯仰姿态的int32值 */
    int32_t roll; /*!< 指定横滚姿态的int32值 */
    int32_t yaw; /*!< 指定偏航姿态的int32值 */
} T_DjiAttitude3d;

typedef struct T_DjiAttitude3f

typedef struct {
    dji_f32_t pitch; /*!< 指定俯仰姿态的浮点值*/
    dji_f32_t roll; /*!< 指定横滚姿态的浮点值*/
    dji_f32_t yaw; /*!< 指定偏航姿态的浮点值*/
} T_DjiAttitude3f;

typedef struct T_DjiQuaternion4f

四元数数据结构

typedef struct {
    dji_f32_t q0; /*!< w, 当转换为旋转矩阵或欧拉角时。 */
    dji_f32_t q1; /*!< x, 当转换为旋转矩阵或欧拉角时。 */
    dji_f32_t q2; /*!< y, 当转换为旋转矩阵或欧拉角时。 */
    dji_f32_t q3; /*!< z, 当转换为旋转矩阵或欧拉角时。 */
} T_DjiQuaternion4f;

typedef struct T_DjiDataTimestamp

时间戳数据结构

typedef struct {
    uint32_t millisecond; /*!< 毫秒 */
    uint32_t microsecond; /*!< 微秒 */
} T_DjiDataTimestamp;

typedef function DjiReceiveDataOfTopicCallback

用于接收topic数据的回调函数原型。

说明: 用户不能在回调函数中执行阻塞式操作或函数,因为这会阻塞PSDK根线程,导致系统响应慢、payload断开或死循环等问题。

typedef T_DjiReturnCode (*DjiReceiveDataOfTopicCallback)(const uint8_t *data, uint16_t dataSize,
                                                         const T_DjiDataTimestamp *timestamp);
参数
data: 指向topic数据的指针,用户需要将此指针的类型传递给对应的数据结构指针,以便于获取topic的每一项。
dataSize: data参数指向的内存空间大小,等于topic对应的数据结构大小。
timestamp: 指向与此数据对应的时间戳的指针。
返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode
若您对文档有意见或疑惑,点击可快速反馈,我们会与您联系。