DJI Typedef
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