NEW: release DJI Payload-SDK version 3.8.1
This commit is contained in:
91
LICENSE.txt
91
LICENSE.txt
@ -7,8 +7,8 @@ The following portions of the DJI’s Payload SDK (“Software” referred to in
|
||||
│ │ ├── dji_sdk_template.c
|
||||
│ │ └── dji_sdk_template.h
|
||||
│ ├── reference_designs
|
||||
│ │ ├── E-Port Lite Schematic Reference.pdf
|
||||
│ │ └── Type-C Schematic Reference.pdf
|
||||
│ │ ├── E-Port Lite Schematic Reference.pdf
|
||||
│ │ └── E-Port Schematic Reference.pdf
|
||||
│ └── simple_model
|
||||
│ ├── H20.stp
|
||||
│ ├── H20T.stp
|
||||
@ -80,37 +80,15 @@ The following portions of the DJI’s Payload SDK (“Software” referred to in
|
||||
│ │ ├── psdk_widget.h
|
||||
│ │ └── psdk_xport.h
|
||||
│ └── lib
|
||||
│ ├── aarch64-himix100-linux-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── aarch64-linux-android-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── aarch64-linux-gnu-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── armcc_cortex-m4
|
||||
│ │ └── libpayload.lib
|
||||
│ ├── arm-himix100-linux-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-himix200-linux-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-hisiv300-linux-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-hisiv400-linux-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-hisiv500-linux-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-hisiv600-linux-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-linux-androideabi-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-linux-gnueabi-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-linux-gnueabihf-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── arm-none-eabi-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ ├── x86_64-linux-gnu-gcc
|
||||
│ │ └── libpayloadsdk.a
|
||||
│ └── xtensa-esp32-elf-gcc
|
||||
│ └── x86_64-linux-gnu-gcc
|
||||
│ └── libpayloadsdk.a
|
||||
├── README.md
|
||||
├── samples
|
||||
@ -154,8 +132,7 @@ The following portions of the DJI’s Payload SDK (“Software” referred to in
|
||||
│ │ │ │ └── test_gimbal_manager.h
|
||||
│ │ │ ├── hms
|
||||
│ │ │ │ ├── data
|
||||
│ │ │ │ │ ├── hms_2023_05_18.json
|
||||
│ │ │ │ │ └── hms_2023_08_22.json
|
||||
│ │ │ │ │ └── hms.json
|
||||
│ │ │ │ ├── hms_text
|
||||
│ │ │ │ │ ├── cn
|
||||
│ │ │ │ │ │ └── hms_text_config.json
|
||||
@ -202,6 +179,8 @@ The following portions of the DJI’s Payload SDK (“Software” referred to in
|
||||
│ │ │ ├── utils
|
||||
│ │ │ │ ├── cJSON.c
|
||||
│ │ │ │ ├── cJSON.h
|
||||
│ │ │ │ ├── dji_config_manager.c
|
||||
│ │ │ │ ├── dji_config_manager.h
|
||||
│ │ │ │ ├── util_buffer.c
|
||||
│ │ │ │ ├── util_buffer.h
|
||||
│ │ │ │ ├── util_file.c
|
||||
@ -330,19 +309,19 @@ The following portions of the DJI’s Payload SDK (“Software” referred to in
|
||||
│ │ │ │ ├── hal_uart.h
|
||||
│ │ │ │ ├── hal_usb_bulk.c
|
||||
│ │ │ │ └── hal_usb_bulk.h
|
||||
│ │ │ ├── nvidia_jetson
|
||||
│ │ │ │ ├── application
|
||||
│ │ │ │ │ ├── dji_sdk_app_info.h
|
||||
│ │ │ │ │ ├── dji_sdk_config.h
|
||||
│ │ │ │ │ └── main.c
|
||||
│ │ │ │ ├── CMakeLists.txt
|
||||
│ │ │ │ └── hal
|
||||
│ │ │ │ ├── hal_network.c
|
||||
│ │ │ │ ├── hal_network.h
|
||||
│ │ │ │ ├── hal_uart.c
|
||||
│ │ │ │ ├── hal_uart.h
|
||||
│ │ │ │ ├── hal_usb_bulk.c
|
||||
│ │ │ │ └── hal_usb_bulk.h
|
||||
│ │ │ └── nvidia_jetson
|
||||
│ │ │ ├── application
|
||||
│ │ │ │ ├── dji_sdk_app_info.h
|
||||
│ │ │ │ ├── dji_sdk_config.h
|
||||
│ │ │ │ └── main.c
|
||||
│ │ │ ├── CMakeLists.txt
|
||||
│ │ │ └── hal
|
||||
│ │ │ ├── hal_network.c
|
||||
│ │ │ ├── hal_network.h
|
||||
│ │ │ ├── hal_uart.c
|
||||
│ │ │ ├── hal_uart.h
|
||||
│ │ │ ├── hal_usb_bulk.c
|
||||
│ │ │ └── hal_usb_bulk.h
|
||||
│ │ └── rtos_freertos
|
||||
│ │ ├── common
|
||||
│ │ │ └── osal
|
||||
@ -750,8 +729,6 @@ The following portions of the DJI’s Payload SDK (“Software” referred to in
|
||||
│ │ ├── application
|
||||
│ │ │ ├── application.cpp
|
||||
│ │ │ ├── application.hpp
|
||||
│ │ │ ├── dji_config_manager.c
|
||||
│ │ │ ├── dji_config_manager.h
|
||||
│ │ │ ├── dji_sdk_app_info.h
|
||||
│ │ │ ├── dji_sdk_config.h
|
||||
│ │ │ ├── dji_sdk_config.json
|
||||
@ -764,21 +741,21 @@ The following portions of the DJI’s Payload SDK (“Software” referred to in
|
||||
│ │ ├── hal_uart.h
|
||||
│ │ ├── hal_usb_bulk.c
|
||||
│ │ └── hal_usb_bulk.h
|
||||
│ ├── nvidia_jetson
|
||||
│ │ ├── application
|
||||
│ │ │ ├── application.cpp
|
||||
│ │ │ ├── application.hpp
|
||||
│ │ │ ├── dji_sdk_app_info.h
|
||||
│ │ │ ├── dji_sdk_config.h
|
||||
│ │ │ └── main.cpp
|
||||
│ │ ├── CMakeLists.txt
|
||||
│ │ └── hal
|
||||
│ │ ├── hal_network.c
|
||||
│ │ ├── hal_network.h
|
||||
│ │ ├── hal_uart.c
|
||||
│ │ ├── hal_uart.h
|
||||
│ │ ├── hal_usb_bulk.c
|
||||
│ │ └── hal_usb_bulk.h
|
||||
│ └── nvidia_jetson
|
||||
│ ├── application
|
||||
│ │ ├── application.cpp
|
||||
│ │ ├── application.hpp
|
||||
│ │ ├── dji_sdk_app_info.h
|
||||
│ │ ├── dji_sdk_config.h
|
||||
│ │ └── main.cpp
|
||||
│ ├── CMakeLists.txt
|
||||
│ └── hal
|
||||
│ ├── hal_network.c
|
||||
│ ├── hal_network.h
|
||||
│ ├── hal_uart.c
|
||||
│ ├── hal_uart.h
|
||||
│ ├── hal_usb_bulk.c
|
||||
│ └── hal_usb_bulk.h
|
||||
└── tools
|
||||
└── file2c
|
||||
├── file2c.exe
|
||||
|
||||
30
README.md
30
README.md
@ -1,7 +1,7 @@
|
||||
# DJI Payload SDK (PSDK)
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## What is the DJI Payload SDK?
|
||||
@ -23,20 +23,22 @@ to get the latest version information.
|
||||
|
||||
## Latest Release
|
||||
|
||||
The latest release version of PSDK is 3.8.0. This version of Payload SDK mainly add some new features support and fixed some
|
||||
The latest release version of PSDK is 3.8.1. This version of Payload SDK mainly add some new features support and fixed some
|
||||
bugs. Please refer to the release notes for detailed changes list.
|
||||
|
||||
* Added support for the M3D series models
|
||||
* Fixed memory leak in the HMS Sample
|
||||
* Resolved compilation errors of Sample header files in certain environments
|
||||
* Fixed unexpected crashes in C++ Sample when attempting to use unsupported features
|
||||
* Enhanced prompts for camera Sample file downloads
|
||||
* Optimized some improper uses of CMake in samples
|
||||
* Change firmware version numbers in the PSDK Sample now align across DJI Assistant 2 and Pilot 2.
|
||||
> Note: DJI Assistant 2 prevents firmware downgrading during payload upgrades. Ensure your upgrade package's name (the version number) is higher than the payload's reported firmware version.
|
||||
> To comply with DJI Assistant 2 verification: You can simply rename your payload firmware upgrade package to make it valid, or maintain the previous practice of independently setting a version number to be checked during upgrades.
|
||||
* In the STM32 FreeRTOS Sample, the heap size has been increased to 90,000 bytes.
|
||||
> This may cause startup or build failures on some devices. You can adjust the stack size according to the business requirements of your hardware.
|
||||
* Removed the camera management module interface DjiCameraManager_GetPhotoBurstCount.
|
||||
* Removed the AEB photography function in the camera management module.
|
||||
* Fixed the issue where subscribing to real-time point cloud data was not byte-aligned on some platforms.
|
||||
* Fixed the discrepancy between flight speed units and annotations in the motion planning WP 2.0 feature.
|
||||
* Fixed issues with obtaining the camera shooting mode and zoom magnification on the Mavic 3 series drones.
|
||||
* Optimized the startup time for PSDK initialization.
|
||||
* Complemented the flight control topic CONTROL_DEVICE data structure definition and added related enumeration ranges.
|
||||
* Fixed the incorrect zoom multiplier retrieval for the H20N camera.
|
||||
* Fixed the issue where custom media file suffix names were not taking effect.
|
||||
* Fixed the occasional subscription errors for single battery data in the M300 RTK and M350 RTK.
|
||||
* Fixed anomalous Pilot widget values for the M30 series, M300 RTK, and M350 RTK remote controllers.
|
||||
* Note: Streamlined the toolchain for compiling PSDK, removing low-usage toolchain libraries.
|
||||
> We have stopped offering some toolchains on GitHub. If you have trouble building your project, reach out to the SDK Support Team for help.
|
||||
|
||||
## License
|
||||
|
||||
|
||||
3
doc/simple_model/Readme.txt
Normal file
3
doc/simple_model/Readme.txt
Normal file
@ -0,0 +1,3 @@
|
||||
Dear Developers, for subsequent new models, the model files will be updated on the designated page of our official website, and will no longer be maintained in the GitHub software package.
|
||||
For more details, please visit: https://developer.dji.com/doc/payload-sdk-tutorial/en/model-instruction/payload-develop-criterion.html#structural-design-standards
|
||||
|
||||
@ -133,24 +133,6 @@ typedef enum {
|
||||
DJI_CAMERA_MANAGER_EXPOSURE_MODE_EXPOSURE_UNKNOWN = 0xFF /*!< The camera exposure mode is unknown. */
|
||||
} E_DjiCameraManagerExposureMode;
|
||||
|
||||
/*! @brief the photo action of INTERVAL shooting photo mode
|
||||
*/
|
||||
typedef enum {
|
||||
/*! The number of pictures to continuously take at one time in AEB mode is 3
|
||||
*/
|
||||
DJI_CAMERA_MANAGER_PHOTO_AEB_COUNT_3 = 3,
|
||||
/*! The number of pictures to continuously take at one time in AEB mode is 5
|
||||
*/
|
||||
DJI_CAMERA_MANAGER_PHOTO_AEB_COUNT_5 = 5,
|
||||
/*! The number of pictures to continuously take at one time in AEB mode is 7
|
||||
*/
|
||||
DJI_CAMERA_MANAGER_PHOTO_AEB_COUNT_7 = 7,
|
||||
/*! The number of pictures to continuously take at one time in AEB mode is
|
||||
* unknown.
|
||||
*/
|
||||
DJI_CAMERA_MANAGER_PHOTO_AEB_COUNT_KNOWN = 0xFF,
|
||||
} E_DjiCameraManagerPhotoAEBCount;
|
||||
|
||||
/*! @breif CameraModule focus mode. If the physical AF switch on the camera is
|
||||
* set to auto.
|
||||
*/
|
||||
@ -454,7 +436,7 @@ typedef enum {
|
||||
DJI_CAMERA_MANAGER_SOURCE_ZOOM_CAM = 0x2,
|
||||
DJI_CAMERA_MANAGER_SOURCE_IR_CAM = 0x3,
|
||||
DJI_CAMERA_MANAGER_SOURCE_VISIBLE_CAM = 0x7,
|
||||
} E_DjiCameraManagerStreamSource;
|
||||
} E_DjiCameraManagerStreamSource, E_DjiCameraManagerStreamStorage;
|
||||
|
||||
typedef enum {
|
||||
DJI_CAMERA_MANAGER_NIGHT_SCENE_MODE_DISABLE = 0,
|
||||
@ -526,12 +508,23 @@ typedef struct {
|
||||
} T_DjiCameraManagerFileAttributeData;
|
||||
|
||||
typedef struct {
|
||||
char fileName[256];
|
||||
char fileName[DJI_FILE_NAME_SIZE_MAX];
|
||||
uint32_t fileSize;
|
||||
uint32_t fileIndex;
|
||||
T_DjiCameraManagerFileCreateTime createTime;
|
||||
E_DjiCameraMediaFileSubType type;
|
||||
T_DjiCameraManagerFileAttributeData attributeData;
|
||||
} T_DjiCameraManagerSubFileListInfo;
|
||||
|
||||
typedef struct {
|
||||
char fileName[DJI_FILE_NAME_SIZE_MAX];
|
||||
uint32_t fileSize;
|
||||
uint32_t fileIndex;
|
||||
T_DjiCameraManagerFileCreateTime createTime;
|
||||
E_DjiCameraMediaFileType type;
|
||||
T_DjiCameraManagerFileAttributeData attributeData;
|
||||
uint8_t subFileListTotalNum;
|
||||
T_DjiCameraManagerSubFileListInfo* subFileListInfo;
|
||||
} T_DjiCameraManagerFileListInfo;
|
||||
|
||||
typedef struct {
|
||||
@ -548,6 +541,7 @@ typedef enum {
|
||||
DJI_DOWNLOAD_FILE_EVENT_START,
|
||||
DJI_DOWNLOAD_FILE_EVENT_TRANSFER,
|
||||
DJI_DOWNLOAD_FILE_EVENT_END,
|
||||
DJI_DOWNLOAD_FILE_EVENT_START_TRANSFER_END,
|
||||
} E_DjiDownloadFileEvent;
|
||||
|
||||
typedef enum {
|
||||
@ -608,9 +602,9 @@ typedef enum {
|
||||
|
||||
typedef enum {
|
||||
DJI_CAMERA_MANAGER_RECORDING_STATE_IDLE = 0,
|
||||
DJI_CAMERA_MANAGER_RECORDING_STATE_STARTING = 0,
|
||||
DJI_CAMERA_MANAGER_RECORDING_STATE_RECORDING = 0,
|
||||
DJI_CAMERA_MANAGER_RECORDING_STATE_STOPPING = 0,
|
||||
DJI_CAMERA_MANAGER_RECORDING_STATE_STARTING = 1,
|
||||
DJI_CAMERA_MANAGER_RECORDING_STATE_RECORDING = 2,
|
||||
DJI_CAMERA_MANAGER_RECORDING_STATE_STOPPING = 3,
|
||||
} E_DjiCameraManagerRecordingState;
|
||||
|
||||
/*!< Attention: when the remote control is in split-screen mode, the coordinate range of the x-axis is 0 ~ 0.5
|
||||
@ -651,6 +645,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
E_DjiDownloadFileEvent downloadFileEvent;
|
||||
uint8_t fileType;
|
||||
uint32_t fileIndex;
|
||||
uint32_t fileSize;
|
||||
dji_f32_t progressInPercent;
|
||||
@ -670,7 +665,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
uint32_t size;
|
||||
E_DjiCameraManagerStreamSource streamSource[4];
|
||||
E_DjiCameraManagerStreamSource streamStorage[4];
|
||||
E_DjiCameraManagerStreamStorage streamStorage[4];
|
||||
} T_DjiCameraManagerStreamList;
|
||||
|
||||
typedef struct {
|
||||
@ -685,7 +680,7 @@ typedef struct {
|
||||
E_DjiCameraManagerVideoStorageFormat videoStorageFormat[16];
|
||||
E_DjiCameraManagerPhotoRatio photoRatioFormat[16];
|
||||
E_DjiCameraManagerStreamSource streamSource[16];
|
||||
E_DjiCameraManagerStreamSource streamStorage[16];
|
||||
E_DjiCameraManagerStreamStorage streamStorage[16];
|
||||
E_DjiCameraManagerNightSceneMode nightSceneMode[16];
|
||||
};
|
||||
uint32_t minValue;
|
||||
@ -709,24 +704,24 @@ typedef struct {
|
||||
uint32_t seqNum;
|
||||
uint64_t timestamp;
|
||||
uint32_t dataByte; /* actual num of bytes used for points */
|
||||
} T_DjiCameraManagerPointCloudHeader;
|
||||
} __attribute__((packed)) T_DjiCameraManagerPointCloudHeader;
|
||||
|
||||
typedef struct {
|
||||
float x; /* the x-axis of NED coordinate system */
|
||||
float y; /* the y-axis of NED coordinate system */
|
||||
float z; /* the z-axis of NED coordinate system */
|
||||
dji_f32_t x; /* the x-axis of NED coordinate system */
|
||||
dji_f32_t y; /* the y-axis of NED coordinate system */
|
||||
dji_f32_t z; /* the z-axis of NED coordinate system */
|
||||
uint8_t intensity;
|
||||
uint8_t r;
|
||||
uint8_t g;
|
||||
uint8_t b;
|
||||
} T_DjiCameraManagerPointXYZRGBInfo;
|
||||
}__attribute__((packed)) T_DjiCameraManagerPointXYZRGBInfo;
|
||||
|
||||
typedef struct {
|
||||
T_DjiCameraManagerPointCloudHeader pointCloudHeader;
|
||||
uint32_t crc_header;
|
||||
uint32_t crc_rest;
|
||||
T_DjiCameraManagerPointXYZRGBInfo points[1];
|
||||
} T_DjiCameraManagerColorPointCloud;
|
||||
}__attribute__((packed)) T_DjiCameraManagerColorPointCloud;
|
||||
|
||||
typedef T_DjiReturnCode (*DjiCameraManagerDownloadFileDataCallback)(T_DjiDownloadFilePacketInfo packetInfo,
|
||||
const uint8_t *data,
|
||||
@ -853,33 +848,6 @@ T_DjiReturnCode DjiCameraManager_GetCapturingState(E_DjiMountPosition position,
|
||||
T_DjiReturnCode DjiCameraManager_SetPhotoBurstCount(E_DjiMountPosition position,
|
||||
E_DjiCameraBurstCount count);
|
||||
|
||||
/**
|
||||
* @brief Get the burst count in the burst take-photo mode.
|
||||
* @param position: camera mounted position
|
||||
* @param count: see reference of E_DjiCameraBurstCount.
|
||||
* @return Execution result.
|
||||
*/
|
||||
T_DjiReturnCode DjiCameraManager_GetPhotoBurstCount(E_DjiMountPosition position,
|
||||
E_DjiCameraBurstCount *count);
|
||||
|
||||
/**
|
||||
* @brief Set the burst count in the AEB(Automatic Exposure Bracketing) take-photo mode.
|
||||
* @param position: camera mounted position
|
||||
* @param count: see reference of E_DjiCameraManagerPhotoAEBCount.
|
||||
* @return Execution result.
|
||||
*/
|
||||
T_DjiReturnCode DjiCameraManager_SetPhotoAEBCount(E_DjiMountPosition position,
|
||||
E_DjiCameraManagerPhotoAEBCount count);
|
||||
|
||||
/**
|
||||
* @brief Get the burst count in the AEB(Automatic Exposure Bracketing) take-photo mode.
|
||||
* @param position: camera mounted position
|
||||
* @param count: see reference of E_DjiCameraManagerPhotoAEBCount.
|
||||
* @return Execution result.
|
||||
*/
|
||||
T_DjiReturnCode DjiCameraManager_GetPhotoAEBCount(E_DjiMountPosition position,
|
||||
E_DjiCameraManagerPhotoAEBCount *count);
|
||||
|
||||
/**
|
||||
* @brief Set the parameters in the INTERVAL take-photo mode.
|
||||
* @note When in this shoot-photo mode, The camera will capture a photo, wait
|
||||
@ -1010,15 +978,6 @@ T_DjiReturnCode DjiCameraManager_GetOpticalZoomParam(E_DjiMountPosition position
|
||||
T_DjiReturnCode DjiCameraManager_SetInfraredZoomParam(E_DjiMountPosition position,
|
||||
dji_f32_t factor);
|
||||
|
||||
/**
|
||||
* @brief Stop camera optical zooming of the selected camera mounted position.
|
||||
* @note Called to stop focal length changing, when it currently is from
|
||||
* calling DjiCameraManager_StartContinuousOpticalZoom*.
|
||||
* @param position: camera mounted position
|
||||
* @return Execution result.
|
||||
*/
|
||||
T_DjiReturnCode DjiCameraManager_StopContinuousOpticalZoom(E_DjiMountPosition position);
|
||||
|
||||
/**
|
||||
* @brief Enable/Disable camera's tap-zoom function of the selected camera mounted position.
|
||||
* @note TapZoomAtTarget can only be called when tap-zoom is enabled.
|
||||
@ -1293,7 +1252,7 @@ T_DjiReturnCode DjiCameraManager_SetStreamSource(E_DjiMountPosition position,
|
||||
* @param rangeList: range list returned value
|
||||
* @return Execution result.
|
||||
*/
|
||||
T_DjiReturnCode DjiCameraManager_GetPhotoFormatStorageRange(E_DjiMountPosition position,
|
||||
T_DjiReturnCode DjiCameraManager_GetPhotoStorageFormatRange(E_DjiMountPosition position,
|
||||
T_DjiCameraManagerRangeList *rangeList);
|
||||
|
||||
/**
|
||||
@ -1517,6 +1476,18 @@ T_DjiReturnCode DjiCameraManager_RegDownloadFileDataCallback(E_DjiMountPosition
|
||||
*/
|
||||
T_DjiReturnCode DjiCameraManager_DownloadFileByIndex(E_DjiMountPosition position, uint32_t fileIndex);
|
||||
|
||||
/**
|
||||
* @brief Download selected camera media file by file index and file type.
|
||||
* @note This API only supports L2 camera.
|
||||
* Only support download one file at the same time, the new file download need wait for the previous file
|
||||
* download finished.The interface is a synchronous interface, which occupies more CPU resources when using it.
|
||||
* If the download file fails, the timeout time is 3S.
|
||||
* @param position: the mount position of the camera
|
||||
* @param fileIndex: the index of the camera media file
|
||||
* @param fileType: the sub type of the camera media file
|
||||
* @return Execution result.
|
||||
*/
|
||||
T_DjiReturnCode DjiCameraManager_DownloadSubFileByIndexAndSubType(E_DjiMountPosition position, uint32_t index, E_DjiCameraMediaFileSubType fileType);
|
||||
/**
|
||||
* @brief Before downloading media file(s), downloader rights should be obtained.
|
||||
* @param position: the mount position of the camera
|
||||
|
||||
@ -439,16 +439,16 @@ extern "C" {
|
||||
{DJI_ERROR_WAYPOINT_V3_MODULE_CODE_TRIGGER_NOT_FOUND, "Execute waypoint v3 failed due to trigger not found. ", NULL}, \
|
||||
{DJI_ERROR_WAYPOINT_V3_MODULE_CODE_TRIGGER_SINGLE_TIME_CHECK_FAIL, "Execute waypoint v3 failed due to single time check failed. ", NULL}, \
|
||||
|
||||
#define DJI_RETURN_CODE_OK DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS /*!< Payload SDK return code represents as status is ok. */
|
||||
#define DJI_RETURN_CODE_OK DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS /*!< Payload SDK return code represents as status is ok. */
|
||||
#define DJI_RETURN_CODE_ERR_ALLOC DJI_ERROR_SYSTEM_MODULE_CODE_MEMORY_ALLOC_FAILED /*!< Payload SDK return code represents as status alloc error. */
|
||||
#define DJI_RETURN_CODE_ERR_TIMEOUT DJI_ERROR_SYSTEM_MODULE_CODE_TIMEOUT /*!< Payload SDK return code represents as status timeout error. */
|
||||
#define DJI_RETURN_CODE_ERR_NOT_FOUND DJI_ERROR_SYSTEM_MODULE_CODE_NOT_FOUND /*!< Payload SDK return code represents as status not found error. */
|
||||
#define DJI_RETURN_CODE_ERR_OUT_OF_RANGE DJI_ERROR_SYSTEM_MODULE_CODE_OUT_OF_RANGE /*!< Payload SDK return code represents as status out of range error. */
|
||||
#define DJI_RETURN_CODE_ERR_PARAM DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER /*!< Payload SDK return code represents as status parameter error. */
|
||||
#define DJI_RETURN_CODE_ERR_SYSTEM DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR /*!< Payload SDK return code represents as status system error. */
|
||||
#define DJI_RETURN_CODE_ERR_BUSY DJI_ERROR_SYSTEM_MODULE_CODE_BUSY /*!< Payload SDK return code represents as status busy error. */
|
||||
#define DJI_RETURN_CODE_ERR_UNSUPPORT DJI_ERROR_SYSTEM_MODULE_CODE_NONSUPPORT /*!< Payload SDK return code represents as status nonsupport error. */
|
||||
#define DJI_RETURN_CODE_ERR_UNKNOWN DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN /*!< Payload SDK return code represents as status unknown error. */
|
||||
#define DJI_RETURN_CODE_ERR_TIMEOUT DJI_ERROR_SYSTEM_MODULE_CODE_TIMEOUT /*!< Payload SDK return code represents as status timeout error. */
|
||||
#define DJI_RETURN_CODE_ERR_NOT_FOUND DJI_ERROR_SYSTEM_MODULE_CODE_NOT_FOUND /*!< Payload SDK return code represents as status not found error. */
|
||||
#define DJI_RETURN_CODE_ERR_OUT_OF_RANGE DJI_ERROR_SYSTEM_MODULE_CODE_OUT_OF_RANGE /*!< Payload SDK return code represents as status out of range error. */
|
||||
#define DJI_RETURN_CODE_ERR_PARAM DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER /*!< Payload SDK return code represents as status parameter error. */
|
||||
#define DJI_RETURN_CODE_ERR_SYSTEM DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR /*!< Payload SDK return code represents as status system error. */
|
||||
#define DJI_RETURN_CODE_ERR_BUSY DJI_ERROR_SYSTEM_MODULE_CODE_BUSY /*!< Payload SDK return code represents as status busy error. */
|
||||
#define DJI_RETURN_CODE_ERR_UNSUPPORT DJI_ERROR_SYSTEM_MODULE_CODE_NONSUPPORT /*!< Payload SDK return code represents as status nonsupport error. */
|
||||
#define DJI_RETURN_CODE_ERR_UNKNOWN DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN /*!< Payload SDK return code represents as status unknown error. */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/**
|
||||
@ -508,6 +508,7 @@ typedef enum {
|
||||
DJI_ERROR_SYSTEM_MODULE_RAW_CODE_INVALID_PARAMETER = 0x0E3,
|
||||
DJI_ERROR_SYSTEM_MODULE_RAW_CODE_NONSUPPORT_IN_CURRENT_STATE = 0x0E4,
|
||||
DJI_ERROR_SYSTEM_MODULE_RAW_CODE_SYSTEM_ERROR = 0x0EC,
|
||||
DJI_ERROR_SYSTEM_MODULE_RAW_CODE_MODULE_INACTIVATED = 0xEE, /*!< Module is too not activated yet */
|
||||
DJI_ERROR_SYSTEM_MODULE_RAW_CODE_HARDWARE_ERR = 0x0FA,
|
||||
DJI_ERROR_SYSTEM_MODULE_RAW_CODE_INSUFFICIENT_ELECTRICITY = 0x0FB,
|
||||
DJI_ERROR_SYSTEM_MODULE_RAW_CODE_UNKNOWN = 0x0FF,
|
||||
@ -673,7 +674,6 @@ typedef enum {
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_SENSOR_ERROR = 0xEB, /*!< Sensor go wrong */
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_SYSTEM_ERROR = 0xEC, /*!< System error */
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_PARAMETER_TOTAL_TOO_LONG = 0xED, /*!< Length of the parameter is too long */
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_MODULE_INACTIVATED = 0xEE, /*!< Module is too not activated yet */
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_FIRMWARE_DATA_NUM_DISCONTINUOUS = 0xF0, /*!< Fireware data number is a discontinuous number */
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_FIRMWARE_VERIFICATION_ERROR = 0xF2, /*!< Error verifying fireware */
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_FLASH_WRITE_ERROR = 0xF4, /*!< Error writing flash */
|
||||
@ -703,7 +703,6 @@ typedef enum {
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_SENSOR_ERROR = 0xEB, /*!< Sensor go wrong */
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_SYSTEM_ERROR = 0xEC, /*!< System error */
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_PARAMETER_TOTAL_TOO_LONG = 0xED, /*!< Length of the parameter is too long */
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_MODULE_INACTIVATED = 0xEE, /*!< Module is too not activated yet */
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_FIRMWARE_DATA_NUM_DISCONTINUOUS = 0xF0, /*!< Fireware data number is a discontinuous number */
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_FIRMWARE_VERIFICATION_ERROR = 0xF2, /*!< Error verifying fireware */
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_FLASH_WRITE_ERROR = 0xF4, /*!< Error writing flash */
|
||||
@ -1102,7 +1101,7 @@ enum DjiErrorCode {
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_SENSOR_ERROR = DJI_ERROR_CODE(DJI_ERROR_MODULE_CAMERA_MANAGER, DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_SENSOR_ERROR),
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_SYSTEM_ERROR = DJI_ERROR_CODE(DJI_ERROR_MODULE_CAMERA_MANAGER, DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_SYSTEM_ERROR),
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_PARAMETER_TOTAL_TOO_LONG = DJI_ERROR_CODE(DJI_ERROR_MODULE_CAMERA_MANAGER, DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_PARAMETER_TOTAL_TOO_LONG),
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_MODULE_INACTIVATED = DJI_ERROR_CODE(DJI_ERROR_MODULE_CAMERA_MANAGER, DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_MODULE_INACTIVATED),
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_MODULE_INACTIVATED = DJI_ERROR_CODE(DJI_ERROR_MODULE_CAMERA_MANAGER, DJI_ERROR_SYSTEM_MODULE_RAW_CODE_MODULE_INACTIVATED),
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_FIRMWARE_DATA_NUM_DISCONTINUOUS = DJI_ERROR_CODE(DJI_ERROR_MODULE_CAMERA_MANAGER, DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_FIRMWARE_DATA_NUM_DISCONTINUOUS),
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_FIRMWARE_VERIFICATION_ERROR = DJI_ERROR_CODE(DJI_ERROR_MODULE_CAMERA_MANAGER, DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_FIRMWARE_VERIFICATION_ERROR),
|
||||
DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_FLASH_WRITE_ERROR = DJI_ERROR_CODE(DJI_ERROR_MODULE_CAMERA_MANAGER, DJI_ERROR_CAMERA_MANAGER_MODULE_RAW_CODE_FLASH_WRITE_ERROR),
|
||||
@ -1128,7 +1127,7 @@ enum DjiErrorCode {
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_CODE_SENSOR_ERROR = DJI_ERROR_CODE(DJI_ERROR_MODULE_GIMBAL_MANAGER, DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_SENSOR_ERROR),
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_CODE_SYSTEM_ERROR = DJI_ERROR_CODE(DJI_ERROR_MODULE_GIMBAL_MANAGER, DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_SYSTEM_ERROR),
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_CODE_PARAMETER_TOTAL_TOO_LONG = DJI_ERROR_CODE(DJI_ERROR_MODULE_GIMBAL_MANAGER, DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_PARAMETER_TOTAL_TOO_LONG),
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_CODE_MODULE_INACTIVATED = DJI_ERROR_CODE(DJI_ERROR_MODULE_GIMBAL_MANAGER, DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_MODULE_INACTIVATED),
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_CODE_MODULE_INACTIVATED = DJI_ERROR_CODE(DJI_ERROR_MODULE_GIMBAL_MANAGER, DJI_ERROR_SYSTEM_MODULE_RAW_CODE_MODULE_INACTIVATED),
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_CODE_FIRMWARE_DATA_NUM_DISCONTINUOUS = DJI_ERROR_CODE(DJI_ERROR_MODULE_GIMBAL_MANAGER, DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_FIRMWARE_DATA_NUM_DISCONTINUOUS),
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_CODE_FIRMWARE_VERIFICATION_ERROR = DJI_ERROR_CODE(DJI_ERROR_MODULE_GIMBAL_MANAGER, DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_FIRMWARE_VERIFICATION_ERROR),
|
||||
DJI_ERROR_GIMBAL_MANAGER_MODULE_CODE_FLASH_WRITE_ERROR = DJI_ERROR_CODE(DJI_ERROR_MODULE_GIMBAL_MANAGER, DJI_ERROR_GIMBAL_MANAGER_MODULE_RAW_CODE_FLASH_WRITE_ERROR),
|
||||
|
||||
@ -729,6 +729,64 @@ typedef enum {
|
||||
DJI_FC_SUBSCRIPTION_BATTERY_SOC_INVALID = 4, /*!< Battery SOC state is invalid. */
|
||||
} E_DJIFcSubscriptionBatterySocState;
|
||||
|
||||
/**
|
||||
* @brief Flight control mode.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_UNKNOWN = 0,
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_ANG_VER_VEL_YAW_ANG = 1, /*!< Horizontal mode is angle, vertical mode is velocity, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_ANG_VER_VEL_YAW_RAT = 2, /*!< Horizontal mode is angle, vertical mode is velocity, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_VEL_VER_VEL_YAW_ANG = 3, /*!< Horizontal mode is velocity, vertical mode is velocity, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_VEL_VER_VEL_YAW_RAT = 4, /*!< Horizontal mode is velocity, vertical mode is velocity, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_POS_VER_VEL_YAW_ANG = 5, /*!< Horizontal mode is position, vertical mode is velocity, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_POS_VER_VEL_YAW_RAT = 6, /*!< Horizontal mode is position, vertical mode is velocity, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_ANG_VER_POS_YAW_ANG = 7, /*!< Horizontal mode is angle, vertical mode is position, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_ANG_VER_POS_YAW_RAT = 8, /*!< Horizontal mode is angle, vertical mode is position, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_VEL_VER_POS_YAW_ANG = 9, /*!< Horizontal mode is velocity, vertical mode is position, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_VEL_VER_POS_YAW_RAT = 10, /*!< Horizontal mode is velocity, vertical mode is position, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_POS_VER_POS_YAW_ANG = 11, /*!< Horizontal mode is position, vertical mode is position, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_POS_VER_POS_YAW_RAT = 12, /*!< Horizontal mode is position, vertical mode is position, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_ANG_VER_THR_YAW_ANG = 13, /*!< Horizontal mode is angle, vertical mode is thrust, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_ANG_VER_THR_YAW_RAT = 14, /*!< Horizontal mode is angle, vertical mode is thrust, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_VEL_VER_THR_YAW_ANG = 15, /*!< Horizontal mode is velocity, vertical mode is thrust, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_VEL_VER_THR_YAW_RAT = 16, /*!< Horizontal mode is velocity, vertical mode is thrust, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_POS_VER_THR_YAW_ANG = 17, /*!< Horizontal mode is position, vertical mode is thrust, yaw mode is angle. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_POS_VER_THR_YAW_RAT = 18, /*!< Horizontal mode is position, vertical mode is thrust, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_AEL_VER_VEL_YAW_RAT = 19, /*!< Horizontal mode is angle-rate, vertical mode is velocity, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_AEL_VER_POS_YAW_RAT = 20, /*!< Horizontal mode is angle-rate, vertical mode is thrust, yaw mode is rate. */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_MODE_HOR_AEL_VER_THR_YAW_RAT = 21, /*!< Horizontal mode is angle-rate, vertical mode is velocity, yaw mode is rate. */
|
||||
} E_DJIFcSubscriptionControlMode;
|
||||
|
||||
/**
|
||||
* @brief Flight control authority.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_AUTHORITY_RC = 0, /*!< Authority is in remote control */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_AUTHORITY_MSDK = 1, /*!< Authority is in MSDK */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_AUTHORITY_PSDK = 4, /*!< Authority is in PSDK */
|
||||
DJI_FC_SUBSCRIPTION_CONTROL_AUTHORITY_DOCK = 5, /*!< Authority is in dock */
|
||||
} E_DJIFcSubscriptionControlAuthority;
|
||||
|
||||
/**
|
||||
* @brief Flight control authority change reason.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_UNKNOWN = 0, /*!< Reason unknown */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_MSDK_REQUEST = 1, /*!< Contro authority changed by MSDK request. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_USER_REQUEST = 2, /*!< Contro authority changed by user request. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_PSDK_REQUEST = 3, /*!< Contro authority changed by PSDK request. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_RC_LOST = 4, /*!< Contro authority changed for remote control lost. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_RC_NOT_P_MODE = 5, /*!< Contro authority changed for remote control not in P mode. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_RC_SWITCH = 6, /*!< Contro authority changed for remote control switching mode. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_RC_PAUSE_STOP = 7, /*!< Contro authority changed for remote control stop key paused. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_RC_ONE_KEY_GO_HOME = 8, /*!< Contro authority changed for remote control go-home key paused. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_BATTERY_LOW_GO_HOME = 9, /*!< Contro authority changed for remote control go-home key paused. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_BATTERY_SUPER_LOW_LANDING = 10, /*!< Contro authority changed for going home caused by low batter power. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_PSDK_LOST = 11, /*!< Contro authority changed for PSDK lost. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_NEAR_BOUNDARY = 13, /*!< Contro authority changed for nearing boundary. */
|
||||
DJI_FC_SUBSCRIPTION_AUTHORITY_CHANGE_REASON_AIRPORT_REQUEST = 14, /*!< Contro authority changed by airport request. */
|
||||
} E_DJIFcSubscriptionAuthorityChangeReason;
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
/**
|
||||
@ -1000,11 +1058,22 @@ typedef struct BatterySingleInfo {
|
||||
* @brief struct for TOPIC_CONTROL_DEVICE and data broadcast, return SDK info
|
||||
*/
|
||||
typedef struct SDKCtrlInfo {
|
||||
uint8_t controlMode; /*!< See CtlrMode in dji_status.hpp*/
|
||||
uint8_t deviceStatus: 3; /*!< 0->rc 1->app 4->serial */
|
||||
uint8_t flightStatus: 1; /*!< 1->opensd 0->close */
|
||||
uint8_t vrcStatus: 1;
|
||||
uint8_t reserved: 3;
|
||||
union {
|
||||
/* Used by M300 & M350 */
|
||||
struct {
|
||||
uint8_t controlMode; /*!< enum-type: E_DJIFcSubscriptionControlMode. */
|
||||
uint8_t deviceStatus: 3; /*!< 0->rc 1->app 4->psdk */
|
||||
uint8_t flightStatus: 1; /*!< 1->open 0->closed */
|
||||
uint8_t vrcStatus: 1;
|
||||
uint8_t reserved: 3;
|
||||
};
|
||||
|
||||
/* Used by other aircrafts */
|
||||
struct {
|
||||
uint8_t controlAuthority; /*!< enum-type: E_DJIFcSubscriptionControlAuthority. */
|
||||
uint8_t controlAuthorityChangeReason; /*!< enum-type: E_DJIFcSubscriptionAuthorityChangeReason. */
|
||||
};
|
||||
};
|
||||
} T_DjiFcSubscriptionControlDevice; // pack(1)
|
||||
|
||||
/*!
|
||||
|
||||
@ -540,6 +540,15 @@ T_DjiReturnCode DjiFlightController_SetGoHomeAltitude(E_DjiFlightControllerGoHom
|
||||
*/
|
||||
T_DjiReturnCode DjiFlightController_GetGoHomeAltitude(E_DjiFlightControllerGoHomeAltitude *altitude);
|
||||
|
||||
/**
|
||||
* @brief Get country code.
|
||||
* @param countryCode: Pointer of buffer to return country code. The country code indicates the current country or
|
||||
* region where the aircraft is located. Please refer to the ISO 3166-1 code table for the specific meaning of the
|
||||
* country code.
|
||||
* @return Execution result.
|
||||
*/
|
||||
T_DjiReturnCode DjiFlightController_GetCountryCode(uint16_t *countryCode);
|
||||
|
||||
/**
|
||||
* @brief Request go home action when the UAV is in the air
|
||||
* @return Execution result.
|
||||
|
||||
@ -42,11 +42,11 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
#define DJI_PI (3.14159265358979323846f)
|
||||
#define DJI_FILE_NAME_SIZE_MAX 256
|
||||
#define DJI_FILE_PATH_SIZE_MAX (DJI_FILE_NAME_SIZE_MAX + 256)
|
||||
#define DJI_IP_ADDR_STR_SIZE_MAX 15
|
||||
#define DJI_MD5_BUFFER_LEN 16
|
||||
#define DJI_PI (3.14159265358979323846f)
|
||||
#define DJI_FILE_NAME_SIZE_MAX 256
|
||||
#define DJI_FILE_PATH_SIZE_MAX (DJI_FILE_NAME_SIZE_MAX + 256)
|
||||
#define DJI_IP_ADDR_STR_SIZE_MAX 15
|
||||
#define DJI_MD5_BUFFER_LEN 16
|
||||
|
||||
#define DJI_SUBSCRIPTION_MODULE_INDEX_OFFSET 24u
|
||||
#define DJI_SUBSCRIPTION_MODULE_INDEX_MASK 0xFF000000u
|
||||
@ -54,9 +54,9 @@ extern "C" {
|
||||
#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)))
|
||||
(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)))
|
||||
|
||||
/**
|
||||
* @brief Type define double as dji_f64_t.
|
||||
@ -73,82 +73,101 @@ typedef float dji_f32_t;
|
||||
typedef uint64_t T_DjiReturnCode;
|
||||
|
||||
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_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 {
|
||||
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,
|
||||
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 {
|
||||
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,
|
||||
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 {
|
||||
DJI_AIRCRAFT_TYPE_UNKNOWN = 0, /*!< Aircraft type is unknown. */
|
||||
DJI_AIRCRAFT_TYPE_M200_V2 = 44, /*!< Aircraft type is Matrice 200 V2. */
|
||||
DJI_AIRCRAFT_TYPE_M210_V2 = 45, /*!< Aircraft type is Matrice 220 V2. */
|
||||
DJI_AIRCRAFT_TYPE_M210RTK_V2 = 46, /*!< Aircraft type is Matrice 210 RTK V2. */
|
||||
DJI_AIRCRAFT_TYPE_M300_RTK = 60, /*!< Aircraft type is Matrice 300 RTK. */
|
||||
DJI_AIRCRAFT_TYPE_M30 = 67, /*!< Aircraft type is Matrice 30. */
|
||||
DJI_AIRCRAFT_TYPE_M30T = 68, /*!< Aircraft type is Matrice 30T. */
|
||||
DJI_AIRCRAFT_TYPE_M3E = 77, /*!< Aircraft type is Mavic 3E. */
|
||||
DJI_AIRCRAFT_TYPE_FC30 = 78, /* !<Aircraft type is FlyCart 30> */
|
||||
DJI_AIRCRAFT_TYPE_M3T = 79, /*!< Aircraft type is Mavic 3T. */
|
||||
DJI_AIRCRAFT_TYPE_M350_RTK = 89, /*!< Aircraft type is Matrice 350 RTK. */
|
||||
DJI_AIRCRAFT_TYPE_M3D = 91, /*!< Aircraft type is Matrice 3D. */
|
||||
DJI_AIRCRAFT_TYPE_M3TD = 93, /*!< Aircraft type is Matrice 3TD. */
|
||||
DJI_AIRCRAFT_TYPE_UNKNOWN = 0, /*!< Aircraft type is unknown. */
|
||||
DJI_AIRCRAFT_TYPE_M200_V2 = 44, /*!< Aircraft type is Matrice 200 V2. */
|
||||
DJI_AIRCRAFT_TYPE_M210_V2 = 45, /*!< Aircraft type is Matrice 220 V2. */
|
||||
DJI_AIRCRAFT_TYPE_M210RTK_V2 = 46, /*!< Aircraft type is Matrice 210 RTK V2. */
|
||||
DJI_AIRCRAFT_TYPE_M300_RTK = 60, /*!< Aircraft type is Matrice 300 RTK. */
|
||||
DJI_AIRCRAFT_TYPE_M30 = 67, /*!< Aircraft type is Matrice 30. */
|
||||
DJI_AIRCRAFT_TYPE_M30T = 68, /*!< Aircraft type is Matrice 30T. */
|
||||
DJI_AIRCRAFT_TYPE_M3E = 77, /*!< Aircraft type is Mavic 3E. */
|
||||
DJI_AIRCRAFT_TYPE_FC30 = 78, /* !<Aircraft type is FlyCart 30> */
|
||||
DJI_AIRCRAFT_TYPE_M3T = 79, /*!< Aircraft type is Mavic 3T. */
|
||||
DJI_AIRCRAFT_TYPE_M350_RTK = 89, /*!< Aircraft type is Matrice 350 RTK. */
|
||||
DJI_AIRCRAFT_TYPE_M3D = 91, /*!< Aircraft type is Matrice 3D. */
|
||||
DJI_AIRCRAFT_TYPE_M3TD = 93, /*!< Aircraft type is Matrice 3TD. */
|
||||
} E_DjiAircraftType;
|
||||
|
||||
/**
|
||||
* @brief Camera type.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_CAMERA_TYPE_UNKNOWN = 0, /*!< Camera type is unknown. */
|
||||
DJI_CAMERA_TYPE_Z30 = 20, /*!< Camera type is Z30. */
|
||||
DJI_CAMERA_TYPE_XT2 = 26, /*!< Camera type is XT2. */
|
||||
DJI_CAMERA_TYPE_PSDK = 31, /*!< Camera type is third party camera based on Payload SDK. */
|
||||
DJI_CAMERA_TYPE_XTS = 41, /*!< Camera type is XT S. */
|
||||
DJI_CAMERA_TYPE_H20 = 42, /*!< Camera type is H20. */
|
||||
DJI_CAMERA_TYPE_H20T = 43, /*!< Camera type is H20T. */
|
||||
DJI_CAMERA_TYPE_H20N = 61, /*!< Camera type is H20N. */
|
||||
DJI_CAMERA_TYPE_P1 = 50, /*!< Camera type is P1. */
|
||||
DJI_CAMERA_TYPE_UNKNOWN = 0, /*!< Camera type is unknown. */
|
||||
DJI_CAMERA_TYPE_Z30 = 20, /*!< Camera type is Z30. */
|
||||
DJI_CAMERA_TYPE_XT2 = 26, /*!< Camera type is XT2. */
|
||||
DJI_CAMERA_TYPE_PSDK = 31, /*!< Camera type is third party camera based on Payload SDK. */
|
||||
DJI_CAMERA_TYPE_XTS = 41, /*!< Camera type is XT S. */
|
||||
DJI_CAMERA_TYPE_H20 = 42, /*!< Camera type is H20. */
|
||||
DJI_CAMERA_TYPE_H20T = 43, /*!< Camera type is H20T. */
|
||||
DJI_CAMERA_TYPE_H20N = 61, /*!< Camera type is H20N. */
|
||||
DJI_CAMERA_TYPE_P1 = 50, /*!< Camera type is P1. */
|
||||
DJI_CAMERA_TYPE_L1, /*!< Camera type is L1. */
|
||||
DJI_CAMERA_TYPE_L2, /*!< Camera type is L2. */
|
||||
DJI_CAMERA_TYPE_M30, /*!< Camera type is M30. */
|
||||
DJI_CAMERA_TYPE_M30T, /*!< Camera type is M30T. */
|
||||
DJI_CAMERA_TYPE_M3E, /*!< Camera type is M3E. */
|
||||
DJI_CAMERA_TYPE_M3T, /*!< Camera type is M3T. */
|
||||
DJI_CAMERA_TYPE_M3D, /*!< Camera type is Matrice 3D. */
|
||||
DJI_CAMERA_TYPE_M3TD, /*!< Camera type is Matrice 3TD. */
|
||||
DJI_CAMERA_TYPE_L2 = 84, /*!< Camera type is L2. */
|
||||
DJI_CAMERA_TYPE_M30 = 52, /*!< Camera type is M30. */
|
||||
DJI_CAMERA_TYPE_M30T = 53, /*!< Camera type is M30T. */
|
||||
DJI_CAMERA_TYPE_M3E = 66, /*!< Camera type is M3E. */
|
||||
DJI_CAMERA_TYPE_M3T = 67, /*!< Camera type is M3T. */
|
||||
DJI_CAMERA_TYPE_M3D = 80, /*!< Camera type is Matrice 3D. */
|
||||
DJI_CAMERA_TYPE_M3TD = 81, /*!< Camera type is Matrice 3TD. */
|
||||
} E_DjiCameraType;
|
||||
|
||||
/**
|
||||
* @brief Camera supported media file subtype.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
DJI_DOWNLOAD_FILE_ORG = 0, /*!< Media sub file origin data type. */
|
||||
DJI_DOWNLOAD_FILE_LDR = 21, /*!< Media sub file cloud point raw data type. */
|
||||
DJI_DOWNLOAD_FILE_SIG = 22, /*!< Media sub file point cloud signature type. */
|
||||
DJI_DOWNLOAD_FILE_RTK = 23, /*!< Media sub file point cloud real-time kinematic type. */
|
||||
DJI_DOWNLOAD_FILE_CLC = 25, /*!< Media sub file radar-camera external reference type. */
|
||||
DJI_DOWNLOAD_FILE_CLI = 26, /*!< Media sub file radar-IMU external reference type. */
|
||||
DJI_DOWNLOAD_FILE_IMU = 27, /*!< Media sub file IMU data type. */
|
||||
DJI_DOWNLOAD_FILE_RTL = 28, /*!< Media sub file RTK boom data type. */
|
||||
DJI_DOWNLOAD_FILE_RTB = 29, /*!< Media sub file RTK base station data type. */
|
||||
DJI_DOWNLOAD_FILE_RTS = 30, /*!< Media sub file RTK secondary antenna data type. */
|
||||
DJI_DOWNLOAD_FILE_RPOS = 31, /*!< Media sub file real-time fusion of attitude and position data type. */
|
||||
} E_DjiCameraMediaFileSubType;
|
||||
|
||||
/**
|
||||
* @brief Camera supported media file type.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_CAMERA_FILE_TYPE_JPEG = 0, /*!< Media file JPEG type. */
|
||||
DJI_CAMERA_FILE_TYPE_DNG = 1, /*!< Media file DNG type. */
|
||||
DJI_CAMERA_FILE_TYPE_MOV = 2, /*!< Media file MOV type. */
|
||||
DJI_CAMERA_FILE_TYPE_MP4 = 3, /*!< Media file MP4 type. */
|
||||
DJI_CAMERA_FILE_TYPE_TIFF = 5, /*!< Media file TIFF type. */
|
||||
DJI_CAMERA_FILE_TYPE_PCD = 24, /*!< Media file point cloud type. */
|
||||
DJI_CAMERA_FILE_TYPE_UNKNOWN = 255, /*!< Media file unknown type. */
|
||||
DJI_CAMERA_FILE_TYPE_JPEG = 0, /*!< Media file JPEG type. */
|
||||
DJI_CAMERA_FILE_TYPE_DNG = 1, /*!< Media file DNG type. */
|
||||
DJI_CAMERA_FILE_TYPE_MOV = 2, /*!< Media file MOV type. */
|
||||
DJI_CAMERA_FILE_TYPE_MP4 = 3, /*!< Media file MP4 type. */
|
||||
DJI_CAMERA_FILE_TYPE_TIFF = 5, /*!< Media file TIFF type. */
|
||||
DJI_CAMERA_FILE_TYPE_LDRT = 24, /*!< Media file LDRT type. */
|
||||
DJI_CAMERA_FILE_TYPE_RPT = 25, /*!< Media file RPT type. */
|
||||
DJI_CAMERA_FILE_TYPE_UNKNOWN = 255, /*!< Media file unknown type. */
|
||||
} E_DjiCameraMediaFileType;
|
||||
|
||||
/**
|
||||
@ -164,39 +183,39 @@ typedef struct {
|
||||
* @brief Gimbal work mode, specifies how gimbal follow aircraft movement.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_GIMBAL_MODE_FREE = 0, /*!< Free mode, fix gimbal attitude in the ground coordinate, ignoring movement of aircraft. */
|
||||
DJI_GIMBAL_MODE_FPV = 1, /*!< FPV (First Person View) mode, only control roll and yaw angle of gimbal in the ground coordinate to follow aircraft. */
|
||||
DJI_GIMBAL_MODE_YAW_FOLLOW = 2, /*!< Yaw follow mode, only control yaw angle of gimbal in the ground coordinate to follow aircraft. */
|
||||
DJI_GIMBAL_MODE_FREE = 0, /*!< Free mode, fix gimbal attitude in the ground coordinate, ignoring movement of aircraft. */
|
||||
DJI_GIMBAL_MODE_FPV = 1, /*!< FPV (First Person View) mode, only control roll and yaw angle of gimbal in the ground coordinate to follow aircraft. */
|
||||
DJI_GIMBAL_MODE_YAW_FOLLOW = 2, /*!< Yaw follow mode, only control yaw angle of gimbal in the ground coordinate to follow aircraft. */
|
||||
} E_DjiGimbalMode;
|
||||
|
||||
/**
|
||||
* @brief Gimbal rotation mode, specifies control style.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_GIMBAL_ROTATION_MODE_RELATIVE_ANGLE = 0, /*!< Relative angle rotation mode, represents rotating gimbal specified angles based on current angles. */
|
||||
DJI_GIMBAL_ROTATION_MODE_ABSOLUTE_ANGLE = 1, /*!< Absolute angle rotation mode, represents rotating gimbal to specified angles in the ground coordinate. */
|
||||
DJI_GIMBAL_ROTATION_MODE_SPEED = 2, /*!< Speed rotation mode, specifies rotation speed of gimbal in the ground coordinate. */
|
||||
DJI_GIMBAL_ROTATION_MODE_RELATIVE_ANGLE = 0, /*!< Relative angle rotation mode, represents rotating gimbal specified angles based on current angles. */
|
||||
DJI_GIMBAL_ROTATION_MODE_ABSOLUTE_ANGLE = 1, /*!< Absolute angle rotation mode, represents rotating gimbal to specified angles in the ground coordinate. */
|
||||
DJI_GIMBAL_ROTATION_MODE_SPEED = 2, /*!< Speed rotation mode, specifies rotation speed of gimbal in the ground coordinate. */
|
||||
} E_DjiGimbalRotationMode;
|
||||
|
||||
/**
|
||||
* @brief Mobile APP system language.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_MOBILE_APP_LANGUAGE_UNKNOWN = 255, /*!< The system language of the mobile app is unknown */
|
||||
DJI_MOBILE_APP_LANGUAGE_ENGLISH = 0, /*!< The system language of the mobile app is English */
|
||||
DJI_MOBILE_APP_LANGUAGE_CHINESE = 1, /*!< The system language of the mobile app is Chinese */
|
||||
DJI_MOBILE_APP_LANGUAGE_JAPANESE = 2, /*!< The system language of the mobile app is Japanese */
|
||||
DJI_MOBILE_APP_LANGUAGE_FRENCH = 3, /*!< The system language of the mobile app is French */
|
||||
DJI_MOBILE_APP_LANGUAGE_UNKNOWN = 255, /*!< The system language of the mobile app is unknown */
|
||||
DJI_MOBILE_APP_LANGUAGE_ENGLISH = 0, /*!< The system language of the mobile app is English */
|
||||
DJI_MOBILE_APP_LANGUAGE_CHINESE = 1, /*!< The system language of the mobile app is Chinese */
|
||||
DJI_MOBILE_APP_LANGUAGE_JAPANESE = 2, /*!< The system language of the mobile app is Japanese */
|
||||
DJI_MOBILE_APP_LANGUAGE_FRENCH = 3, /*!< The system language of the mobile app is French */
|
||||
} E_DjiMobileAppLanguage;
|
||||
|
||||
/**
|
||||
* @brief Mobile APP screen size type.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_MOBILE_APP_SCREEN_TYPE_UNKNOWN = 255, /*!< Mobile APP screen type is unknown. */
|
||||
DJI_MOBILE_APP_SCREEN_TYPE_BIG_SCREEN = 0, /*!< The big screen of mobile device refers to a screen
|
||||
DJI_MOBILE_APP_SCREEN_TYPE_UNKNOWN = 255, /*!< Mobile APP screen type is unknown. */
|
||||
DJI_MOBILE_APP_SCREEN_TYPE_BIG_SCREEN = 0, /*!< The big screen of mobile device refers to a screen
|
||||
* size greater than or equal to 6 inches. */
|
||||
DJI_MOBILE_APP_SCREEN_TYPE_LITTLE_SCREEN = 1, /*!< The little screen of mobile device refers to a
|
||||
DJI_MOBILE_APP_SCREEN_TYPE_LITTLE_SCREEN = 1, /*!< The little screen of mobile device refers to a
|
||||
* screen size less than 6 inches. */
|
||||
} E_DjiMobileAppScreenType;
|
||||
|
||||
@ -204,20 +223,20 @@ typedef enum {
|
||||
* @brief Subscription frequency type.
|
||||
*/
|
||||
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,
|
||||
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;
|
||||
|
||||
/**
|
||||
* @brief DJI module enum for defining data subscription module.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_DATA_SUBSCRIPTION_MODULE_FC = 0,
|
||||
DJI_DATA_SUBSCRIPTION_MODULE_FC = 0,
|
||||
DJI_DATA_SUBSCRIPTION_MODULE_CAMERA,
|
||||
DJI_DATA_SUBSCRIPTION_MODULE_ERROR,
|
||||
} E_DjiDataSubscriptionModule;
|
||||
@ -226,14 +245,14 @@ typedef enum {
|
||||
* @brief SDK adapter type.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_SDK_ADAPTER_TYPE_UNKNOWN = 0, /*!< SDK adapter type is unknown. */
|
||||
DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 = 1, /*!< SDK adapter type is Skyport V2. */
|
||||
DJI_SDK_ADAPTER_TYPE_XPORT = 2, /*!< SDK adapter type is X-Port. */
|
||||
DJI_SDK_ADAPTER_TYPE_NONE = 3, /*!< don't have any adapter outside */
|
||||
DJI_SDK_ADAPTER_TYPE_UNKNOWN = 0, /*!< SDK adapter type is unknown. */
|
||||
DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 = 1, /*!< SDK adapter type is Skyport V2. */
|
||||
DJI_SDK_ADAPTER_TYPE_XPORT = 2, /*!< SDK adapter type is X-Port. */
|
||||
DJI_SDK_ADAPTER_TYPE_NONE = 3, /*!< don't have any adapter outside */
|
||||
} E_DjiSdkAdapterType;
|
||||
|
||||
typedef enum {
|
||||
DJI_CHANNEL_ADDRESS_UNKNOWN = 0,
|
||||
DJI_CHANNEL_ADDRESS_UNKNOWN = 0,
|
||||
DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO1,
|
||||
DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO2,
|
||||
DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO3,
|
||||
@ -265,47 +284,47 @@ typedef struct {
|
||||
* @brief Camera zoom speed.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_CAMERA_ZOOM_SPEED_SLOWEST = 72, /*!< Lens zooms in slowest speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_SLOW = 73, /*!< Lens zooms in slow speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_MODERATELY_SLOW = 74, /*!< Lens zooms in speed slightly slower than normal speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_NORMAL = 75, /*!< Lens zooms in normal speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_MODERATELY_FAST = 76, /*!< Lens zooms very in speed slightly faster than normal speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_FAST = 77, /*!< Lens zooms very in fast speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_FASTEST = 78, /*!< Lens zooms very in fastest speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_SLOWEST = 72, /*!< Lens zooms in slowest speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_SLOW = 73, /*!< Lens zooms in slow speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_MODERATELY_SLOW = 74, /*!< Lens zooms in speed slightly slower than normal speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_NORMAL = 75, /*!< Lens zooms in normal speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_MODERATELY_FAST = 76, /*!< Lens zooms very in speed slightly faster than normal speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_FAST = 77, /*!< Lens zooms very in fast speed. */
|
||||
DJI_CAMERA_ZOOM_SPEED_FASTEST = 78, /*!< Lens zooms very in fastest speed. */
|
||||
} E_DjiCameraZoomSpeed;
|
||||
|
||||
typedef enum {
|
||||
/*! The number of pictures to continuously take each time in BURST mode is 2
|
||||
*/
|
||||
DJI_CAMERA_BURST_COUNT_2 = 2,
|
||||
DJI_CAMERA_BURST_COUNT_2 = 2,
|
||||
/*! The number of pictures to continuously take each time in BURST mode is 3
|
||||
*/
|
||||
DJI_CAMERA_BURST_COUNT_3 = 3,
|
||||
DJI_CAMERA_BURST_COUNT_3 = 3,
|
||||
/*! The number of pictures to continuously take each time in BURST mode is 5
|
||||
*/
|
||||
DJI_CAMERA_BURST_COUNT_5 = 5,
|
||||
DJI_CAMERA_BURST_COUNT_5 = 5,
|
||||
/*! The number of pictures to continuously take each time in BURST mode is 7
|
||||
*/
|
||||
DJI_CAMERA_BURST_COUNT_7 = 7,
|
||||
DJI_CAMERA_BURST_COUNT_7 = 7,
|
||||
/*! The number of pictures to continuously take at one time in BURST mode is
|
||||
* 10, Only supported by X4S camera, X5S camera and Phantom 4 Pro camera.
|
||||
*/
|
||||
DJI_CAMERA_BURST_COUNT_10 = 10,
|
||||
DJI_CAMERA_BURST_COUNT_10 = 10,
|
||||
/*! The number of pictures to continuously take at one time in BURST mode is
|
||||
* 14, Only supported by X4S camera, X5S camera and Phantom 4 Pro camera.
|
||||
*/
|
||||
DJI_CAMERA_BURST_COUNT_14 = 14,
|
||||
DJI_CAMERA_BURST_COUNT_14 = 14,
|
||||
/*! The camera burst shoot count value is unknown.
|
||||
*/
|
||||
DJI_CAMERA_BURST_COUNT_KNOWN = 0xFF,
|
||||
DJI_CAMERA_BURST_COUNT_KNOWN = 0xFF,
|
||||
} E_DjiCameraBurstCount;
|
||||
|
||||
/**
|
||||
* @brief Camera zoom direction.
|
||||
*/
|
||||
typedef enum {
|
||||
DJI_CAMERA_ZOOM_DIRECTION_OUT = 0, /*!< The lens moves in the far direction, the zoom factor becomes smaller. */
|
||||
DJI_CAMERA_ZOOM_DIRECTION_IN = 1, /*!< The lens moves in the near direction, the zoom factor becomes larger. */
|
||||
DJI_CAMERA_ZOOM_DIRECTION_OUT = 0, /*!< The lens moves in the far direction, the zoom factor becomes smaller. */
|
||||
DJI_CAMERA_ZOOM_DIRECTION_IN = 1, /*!< The lens moves in the near direction, the zoom factor becomes larger. */
|
||||
} E_DjiCameraZoomDirection;
|
||||
#pragma pack (1)
|
||||
|
||||
|
||||
@ -35,9 +35,9 @@ extern "C" {
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
#define DJI_VERSION_MAJOR 3 /*!< DJI SDK major version num, when have incompatible API changes. Range from 0 to 99. */
|
||||
#define DJI_VERSION_MINOR 8 /*!< DJI SDK minor version num, when add functionality in a backwards compatible manner changes. Range from 0 to 99. */
|
||||
#define DJI_VERSION_MODIFY 0 /*!< DJI SDK modify version num, when have backwards compatible bug fixes changes. Range from 0 to 99. */
|
||||
#define DJI_VERSION_MODIFY 1 /*!< DJI SDK modify version num, when have backwards compatible bug fixes changes. Range from 0 to 99. */
|
||||
#define DJI_VERSION_BETA 0 /*!< DJI SDK version beta info, release version will be 0, when beta version release changes. Range from 0 to 255. */
|
||||
#define DJI_VERSION_BUILD 1929 /*!< DJI SDK version build info, when jenkins trigger build changes. Range from 0 to 65535. */
|
||||
#define DJI_VERSION_BUILD 2006 /*!< DJI SDK version build info, when jenkins trigger build changes. Range from 0 to 65535. */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -36,6 +36,10 @@ extern "C" {
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief Type define dji_f32_t as T_DjiWaypointV2GlobalCruiseSpeed.
|
||||
* @details Type used for global cruise speed of waypoint mission, unit: m/s.
|
||||
*/
|
||||
typedef dji_f32_t T_DjiWaypointV2GlobalCruiseSpeed;
|
||||
|
||||
/**
|
||||
@ -340,6 +344,8 @@ typedef struct {
|
||||
* will fly backwards to previous waypoints. When it reaches the first waypoint, it
|
||||
* will then hover in place until a positive speed is applied. "maxFlightSpeed" has
|
||||
* a range of [2,15] m/s.
|
||||
*
|
||||
* unit: m/s
|
||||
*/
|
||||
dji_f32_t maxFlightSpeed;
|
||||
|
||||
@ -355,6 +361,8 @@ typedef struct {
|
||||
* joystick. In flight controller firmware 3.2.10.0 or above, different speeds
|
||||
* between individual waypoints can also be set in waypoint objects which will
|
||||
* overwrite "autoFlightSpeed".
|
||||
*
|
||||
* unit: m/s.
|
||||
*/
|
||||
dji_f32_t autoFlightSpeed;
|
||||
} T_DjiWaypointV2;
|
||||
@ -1089,6 +1097,7 @@ typedef struct {
|
||||
* negative, then the aircraft will fly backwards to previous waypoints. When it
|
||||
* reaches the first waypoint, it will then hover in place until a positive speed
|
||||
* is applied. `maxFlightSpeed` has a range of [2,15] m/s.
|
||||
*
|
||||
* unit: m/s
|
||||
*/
|
||||
dji_f32_t maxFlightSpeed;
|
||||
@ -1103,6 +1112,7 @@ typedef struct {
|
||||
* `autoFlightSpeed` <0 and the aircraft is at the first waypoint, the aircraft
|
||||
* will hover in place until the speed is made positive by the remote controller
|
||||
* joystick.
|
||||
*
|
||||
* unit: m/s
|
||||
*/
|
||||
dji_f32_t autoFlightSpeed;
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -45,7 +45,6 @@ static const char *s_cameraManagerSampleSelectList[] = {
|
||||
[E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_CAMERA_TAP_ZOOM_POINT] = "Set camera tap zoom point |",
|
||||
[E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_CAMERA_ZOOM_PARAM] = "Set camera zoom param |",
|
||||
[E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_SINGLE_PHOTO] = "Shoot single photo |",
|
||||
[E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_AEB_PHOTO] = "Shoot aeb photo |",
|
||||
[E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_BURST_PHOTO] = "Shoot busrt photo |",
|
||||
[E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_INTERVAL_PHOTO] = "Shoot interval photo |",
|
||||
[E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_RECORD_VIDEO] = "Record video |",
|
||||
|
||||
@ -210,17 +210,9 @@ static void DjiUser_ShowRgbImageCallback(CameraRGBImage img, void *userData)
|
||||
cout << " x: " << faces[i].x;
|
||||
cout << " y: " << faces[i].y << endl;
|
||||
|
||||
#ifdef OPEN_CV_VERSION_3
|
||||
cv::rectangle(mat, cvPoint(faces[i].x, faces[i].y),
|
||||
cvPoint(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
|
||||
Scalar(0, 0, 255), 2, 1, 0);
|
||||
#endif
|
||||
|
||||
#ifdef OPEN_CV_VERSION_4
|
||||
cv::rectangle(mat, cv::Point(faces[i].x, faces[i].y),
|
||||
cv::Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
|
||||
Scalar(0, 0, 255), 2, 1, 0);
|
||||
#endif
|
||||
}
|
||||
imshow(name, mat);
|
||||
} else if (s_demoIndex == 3) {
|
||||
@ -279,15 +271,8 @@ static void DjiUser_ShowRgbImageCallback(CameraRGBImage img, void *userData)
|
||||
|
||||
int baseLine = 0;
|
||||
Size labelSize = getTextSize(label, FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
|
||||
#ifdef OPEN_CV_VERSION_3
|
||||
rectangle(mat, Rect(Point(xLeftBottom, yLeftBottom - labelSize.height),
|
||||
Size(labelSize.width, labelSize.height + baseLine)), Scalar(0, 255, 0), CV_FILLED);
|
||||
#endif
|
||||
|
||||
#ifdef OPEN_CV_VERSION_4
|
||||
rectangle(mat, Rect(Point(xLeftBottom, yLeftBottom - labelSize.height),
|
||||
Size(labelSize.width, labelSize.height + baseLine)), Scalar(0, 255, 0), cv::FILLED);
|
||||
#endif
|
||||
putText(mat, label, Point(xLeftBottom, yLeftBottom), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
@ -379,15 +379,8 @@ static void *DjiTest_StereoImagesDisplayTask(void *arg)
|
||||
sprintf(&showFpsString[i][0], "%s%d", fpsStr, fps);
|
||||
}
|
||||
timePrev[i] = timeNow[i];
|
||||
#ifdef OPEN_CV_VERSION_3
|
||||
cv::putText(cv_img_stereo, &showFpsString[i][0], cv::Point(5, 20),
|
||||
CV_FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0));
|
||||
#endif
|
||||
|
||||
#ifdef OPEN_CV_VERSION_4
|
||||
cv::putText(cv_img_stereo, &showFpsString[i][0], cv::Point(5, 20),
|
||||
cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0));
|
||||
#endif
|
||||
}
|
||||
cv::imshow(nameStr, cv_img_stereo);
|
||||
cv::waitKey(1);
|
||||
|
||||
@ -71,13 +71,6 @@ if (OpenCV_FOUND)
|
||||
message(STATUS " - Includes: ${OpenCV_INCLUDE_DIRS}")
|
||||
message(STATUS " - Libraries: ${OpenCV_LIBRARIES}")
|
||||
add_definitions(-DOPEN_CV_INSTALLED)
|
||||
if ("${OpenCV_VERSION}" STRLESS "4.0.0")
|
||||
add_definitions(-DOPEN_CV_VERSION_3)
|
||||
|
||||
else ()
|
||||
add_definitions(-DOPEN_CV_VERSION_4)
|
||||
|
||||
endif ()
|
||||
else ()
|
||||
message(STATUS "Did not find OpenCV in the system, image data is inside RecvContainer as raw data")
|
||||
endif ()
|
||||
@ -89,10 +82,10 @@ if (FFMPEG_FOUND)
|
||||
message(STATUS " - Libraries: ${FFMPEG_LIBRARIES}")
|
||||
|
||||
EXECUTE_PROCESS(COMMAND ffmpeg -version
|
||||
OUTPUT_VARIABLE ffmpeg_version_psdk_libput
|
||||
OUTPUT_VARIABLE ffmpeg_version_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
string(REGEX MATCH "version.*Copyright" ffmpeg_version_line ${ffmpeg_version_psdk_libput})
|
||||
string(REGEX MATCH "version.*Copyright" ffmpeg_version_line ${ffmpeg_version_output})
|
||||
string(REGEX MATCH " .* " ffmpeg_version ${ffmpeg_version_line})
|
||||
string(REGEX MATCH "^ 5.*$" ffmpeg_major_version ${ffmpeg_version})
|
||||
|
||||
|
||||
@ -31,7 +31,6 @@
|
||||
#include <dji_aircraft_info.h>
|
||||
#include <csignal>
|
||||
#include "dji_sdk_config.h"
|
||||
#include "dji_config_manager.h"
|
||||
|
||||
#include "../common/osal/osal.h"
|
||||
#include "../common/osal/osal_fs.h"
|
||||
@ -40,6 +39,7 @@
|
||||
#include "../manifold2/hal/hal_uart.h"
|
||||
#include "../manifold2/hal/hal_network.h"
|
||||
|
||||
#include "utils/dji_config_manager.h"
|
||||
#include <gimbal_emu/test_payload_gimbal_emu.h>
|
||||
#include <camera_emu/test_payload_cam_emu_media.h>
|
||||
#include <camera_emu/test_payload_cam_emu_base.h>
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
#include "stdio.h"
|
||||
#include "hal_network.h"
|
||||
#include "dji_logger.h"
|
||||
#include "dji_config_manager.h"
|
||||
#include "utils/dji_config_manager.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
|
||||
@ -63,7 +63,7 @@ T_DjiReturnCode HalNetWork_Init(const char *ipAddr, const char *netMask, T_DjiNe
|
||||
strcpy(networkDeviceName, LINUX_NETWORK_DEV);
|
||||
}
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s up", LINUX_NETWORK_DEV);
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s up", networkDeviceName);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Can't open the network."
|
||||
@ -72,7 +72,7 @@ T_DjiReturnCode HalNetWork_Init(const char *ipAddr, const char *netMask, T_DjiNe
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s %s netmask %s", LINUX_NETWORK_DEV, ipAddr, netMask);
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s %s netmask %s", networkDeviceName, ipAddr, netMask);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Can't config the ip address of network."
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <dji_logger.h>
|
||||
#include "hal_uart.h"
|
||||
#include "dji_config_manager.h"
|
||||
#include "utils/dji_config_manager.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define UART_DEV_NAME_STR_SIZE (128)
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "hal_usb_bulk.h"
|
||||
#include "dji_logger.h"
|
||||
#include "dji_config_manager.h"
|
||||
#include "utils/dji_config_manager.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define LINUX_USB_BULK_TRANSFER_TIMEOUT_MS (50)
|
||||
|
||||
@ -54,13 +54,6 @@ if (OpenCV_FOUND)
|
||||
message(STATUS " - Includes: ${OpenCV_INCLUDE_DIRS}")
|
||||
message(STATUS " - Libraries: ${OpenCV_LIBRARIES}")
|
||||
add_definitions(-DOPEN_CV_INSTALLED)
|
||||
if ("${OpenCV_VERSION}" STRLESS "4.0.0")
|
||||
add_definitions(-DOPEN_CV_VERSION_3)
|
||||
|
||||
else ()
|
||||
add_definitions(-DOPEN_CV_VERSION_4)
|
||||
|
||||
endif ()
|
||||
else ()
|
||||
message(STATUS "Did not find OpenCV in the system, image data is inside RecvContainer as raw data")
|
||||
endif ()
|
||||
@ -72,10 +65,10 @@ if (FFMPEG_FOUND)
|
||||
message(STATUS " - Libraries: ${FFMPEG_LIBRARIES}")
|
||||
|
||||
EXECUTE_PROCESS(COMMAND ffmpeg -version
|
||||
OUTPUT_VARIABLE ffmpeg_version_psdk_libput
|
||||
OUTPUT_VARIABLE ffmpeg_version_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
string(REGEX MATCH "version.*Copyright" ffmpeg_version_line ${ffmpeg_version_psdk_libput})
|
||||
string(REGEX MATCH "version.*Copyright" ffmpeg_version_line ${ffmpeg_version_output})
|
||||
string(REGEX MATCH " .* " ffmpeg_version ${ffmpeg_version_line})
|
||||
string(REGEX MATCH "^ 5.*$" ffmpeg_major_version ${ffmpeg_version})
|
||||
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
#define TEST_CAMERA_MOP_CHANNEL_WAIT_TIME_MS (3 * 1000)
|
||||
#define TEST_CAMERA_MOP_CHANNEL_MAX_RECV_COUNT 30
|
||||
#define TEST_CAMEAR_POINT_CLOUD_FILE_PATH_STR_MAX_SIZE 256
|
||||
#define TEST_CAMEAR_MEDIA_SUB_FILE_NOT_FOUND -1
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
@ -625,80 +626,6 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootBurstPhoto(E_DjiMountPosition pos
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
/*! @brief Sample to shoot AEB photo, using async api
|
||||
*
|
||||
* @note In this interface, camera will be set to be the SHOOT_PHOTO mode
|
||||
* then start to shoot a AEB photo.
|
||||
* @param index payload node index, input limit see enum
|
||||
* DJI::OSDK::PayloadIndexType
|
||||
* @param photoNum The number of pictures in each AEB shooting
|
||||
* @return T_DjiReturnCode error code
|
||||
*/
|
||||
T_DjiReturnCode DjiTest_CameraManagerStartShootAEBPhoto(E_DjiMountPosition position,
|
||||
E_DjiCameraManagerPhotoAEBCount aebCount)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
E_DjiCameraManagerWorkMode workMode;
|
||||
|
||||
/*!< set camera work mode as shoot photo */
|
||||
USER_LOG_INFO("set mounted position %d camera's work mode as shoot photo mode.", position);
|
||||
returnCode = DjiCameraManager_SetMode(position, DJI_CAMERA_MANAGER_WORK_MODE_SHOOT_PHOTO);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS &&
|
||||
returnCode != DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_UNSUPPORTED_COMMAND) {
|
||||
USER_LOG_ERROR("set mounted position %d camera's work mode as shoot photo mode failed,"
|
||||
" error code :0x%08X.", position, returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
|
||||
returnCode = DjiCameraManager_GetMode(position, &workMode);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS &&
|
||||
returnCode != DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_UNSUPPORTED_COMMAND) {
|
||||
USER_LOG_ERROR("get mounted position %d camera's work mode failed,"
|
||||
" error code :0x%08X", position, returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
USER_LOG_INFO("Camera current workmode is %d", workMode);
|
||||
|
||||
/*!< set shoot-photo mode */
|
||||
USER_LOG_INFO("Set mounted position %d camera's shoot photo mode as AEB-photo mode", position);
|
||||
returnCode = DjiCameraManager_SetShootPhotoMode(position, DJI_CAMERA_MANAGER_SHOOT_PHOTO_MODE_AEB);
|
||||
if (returnCode == DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_UNSUPPORTED_COMMAND) {
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set mounted position %d camera's shoot photo mode as AEB-photo mode failed,"
|
||||
" error code :0x%08X.", position, returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
/*! wait the APP change the shoot-photo mode display */
|
||||
USER_LOG_INFO("Sleep 0.5s...");
|
||||
osalHandler->TaskSleepMs(500);
|
||||
|
||||
/*!< set shoot-photo mode parameter */
|
||||
USER_LOG_INFO("Set mounted position %d camera's AEB count to %d", position, aebCount);
|
||||
returnCode = DjiCameraManager_SetPhotoAEBCount(position, aebCount);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS &&
|
||||
returnCode != DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_UNSUPPORTED_COMMAND) {
|
||||
USER_LOG_ERROR("set mounted position %d camera's AEB count(%d) failed,"
|
||||
" error code :0x%08X.", position, aebCount, returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
/*!< start to shoot single photo */
|
||||
USER_LOG_INFO("Mounted position %d camera start to shoot photo.", position);
|
||||
returnCode = DjiCameraManager_StartShootPhoto(position, DJI_CAMERA_MANAGER_SHOOT_PHOTO_MODE_AEB);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Mounted position %d camera shoot photo failed, "
|
||||
"error code :0x%08X.", position, returnCode);
|
||||
}
|
||||
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
/*! @brief Sample to start shooting interval photo, using async api
|
||||
*
|
||||
* @note In this interface, camera will be set to be the SHOOT_PHOTO mode
|
||||
@ -1135,17 +1062,6 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
}
|
||||
break;
|
||||
}
|
||||
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_AEB_PHOTO: {
|
||||
USER_LOG_INFO("--> Function i: Shoot AEB photo with 3 pictures in one time");
|
||||
DjiTest_WidgetLogAppend("--> Function i: Shoot AEB photo with 3 pictures in one time");
|
||||
returnCode = DjiTest_CameraManagerStartShootAEBPhoto(mountPosition, DJI_CAMERA_MANAGER_PHOTO_AEB_COUNT_3);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Mounted position %d camera shoot AEB photo failed,"
|
||||
"error code: 0x%08X\r\n", mountPosition, returnCode);
|
||||
goto exitCameraModule;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_BURST_PHOTO: {
|
||||
USER_LOG_INFO("--> Function j: Shoot Burst photo with 5 pictures in one time");
|
||||
DjiTest_WidgetLogAppend("--> Function j: Shoot Burst photo with 5pictures in one time");
|
||||
@ -1487,12 +1403,6 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOW_STORAGE_INFO: {
|
||||
T_DjiCameraManagerStorageInfo storageInfo;
|
||||
|
||||
if (cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_P1 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3D || cameraType == DJI_CAMERA_TYPE_M3TD) {
|
||||
USER_LOG_INFO("Position %d, camera type %d, doesn't support get storage info. Sample exits.");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < 30; i++) {
|
||||
returnCode = DjiCameraManager_GetStorageInfo(mountPosition, &storageInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -1775,7 +1685,7 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
returnCode = DjiCameraManager_GetPhotoFormatStorageRange(mountPosition, &photoFormatRange);
|
||||
returnCode = DjiCameraManager_GetPhotoStorageFormatRange(mountPosition, &photoFormatRange);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get range failed!");
|
||||
goto exitCameraModule;
|
||||
@ -2102,8 +2012,7 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
uint16_t recordingTime;
|
||||
uint8_t remainingTime;
|
||||
|
||||
if (cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_P1 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3D || cameraType == DJI_CAMERA_TYPE_M3TD) {
|
||||
if (cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_P1) {
|
||||
USER_LOG_INFO("Camera type %d does not support to get camera stauts such as "
|
||||
"capturing state, recording state.", cameraType);
|
||||
goto exitCameraModule;
|
||||
@ -2192,6 +2101,8 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
|
||||
T_DjiReturnCode returnCode;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
uint16_t downloadCount = 0;
|
||||
uint16_t subFileDownloadCount = 0;
|
||||
int i = 0, j= 0;
|
||||
|
||||
s_nextDownloadFileIndex = 0;
|
||||
returnCode = DjiCameraManager_RegDownloadFileDataCallback(position, DjiTest_CameraManagerDownloadFileDataCallback);
|
||||
@ -2213,11 +2124,13 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
|
||||
|
||||
if (s_meidaFileList.totalCount > 0) {
|
||||
downloadCount = s_meidaFileList.totalCount;
|
||||
subFileDownloadCount = s_meidaFileList.fileListInfo->subFileListTotalNum;
|
||||
printf(
|
||||
"\033[1;33;40m -> Download file list finished, total file count is %d, the following %d is list details: \033[0m\r\n",
|
||||
"\033[1;33;40m -> Download file list finished, total media file count is %d "
|
||||
"the following %d is list details: \033[0m\r\n",
|
||||
s_meidaFileList.totalCount, downloadCount);
|
||||
for (int i = 0; i < downloadCount; ++i) {
|
||||
if (s_meidaFileList.fileListInfo[i].fileSize < 1 * 1024 * 1024) {
|
||||
|
||||
for (i = 0; i < downloadCount; ++i) {
|
||||
printf(
|
||||
"\033[1;32;40m ### Media file_%03d name: %s, index: %d, time:%04d-%02d-%02d_%02d:%02d:%02d, size: %.2f KB, type: %d \033[0m\r\n",
|
||||
i, s_meidaFileList.fileListInfo[i].fileName,
|
||||
@ -2228,21 +2141,23 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
|
||||
s_meidaFileList.fileListInfo[i].createTime.hour,
|
||||
s_meidaFileList.fileListInfo[i].createTime.minute,
|
||||
s_meidaFileList.fileListInfo[i].createTime.second,
|
||||
(dji_f32_t) s_meidaFileList.fileListInfo[i].fileSize / 1024,
|
||||
s_meidaFileList.fileListInfo[i].type);
|
||||
} else {
|
||||
printf(
|
||||
"\033[1;32;40m ### Media file_%03d name: %s, index: %d, time:%04d-%02d-%02d_%02d:%02d:%02d, size: %.2f MB, type: %d \033[0m\r\n",
|
||||
i, s_meidaFileList.fileListInfo[i].fileName,
|
||||
s_meidaFileList.fileListInfo[i].fileIndex,
|
||||
s_meidaFileList.fileListInfo[i].createTime.year,
|
||||
s_meidaFileList.fileListInfo[i].createTime.month,
|
||||
s_meidaFileList.fileListInfo[i].createTime.day,
|
||||
s_meidaFileList.fileListInfo[i].createTime.hour,
|
||||
s_meidaFileList.fileListInfo[i].createTime.minute,
|
||||
s_meidaFileList.fileListInfo[i].createTime.second,
|
||||
(dji_f32_t) s_meidaFileList.fileListInfo[i].fileSize / (1024 * 1024),
|
||||
(dji_f32_t) s_meidaFileList.fileListInfo[i].fileSize / (1024),
|
||||
s_meidaFileList.fileListInfo[i].type);
|
||||
if (s_meidaFileList.fileListInfo[i].type == DJI_CAMERA_FILE_TYPE_LDRT) {
|
||||
for (j = 0; j < s_meidaFileList.fileListInfo[i].subFileListTotalNum; j++) {
|
||||
printf(
|
||||
"\033[1;32;40m ### Media file_%03d, sub_file_%03d, name: %s, index: %d, time:%04d-%02d-%02d_%02d:%02d:%02d, size: %.2f KB, sub type: %d\033[0m\r\n",
|
||||
i, j, s_meidaFileList.fileListInfo[i].subFileListInfo[j].fileName,
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].fileIndex,
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].createTime.year,
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].createTime.month,
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].createTime.day,
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].createTime.hour,
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].createTime.minute,
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].createTime.second,
|
||||
(dji_f32_t) s_meidaFileList.fileListInfo[i].subFileListInfo[j].fileSize / (1024),
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].type);
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("\r\n");
|
||||
@ -2251,24 +2166,38 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
|
||||
|
||||
downloadCount = s_meidaFileList.totalCount;
|
||||
|
||||
for (int i = 0; i < downloadCount; ++i) {
|
||||
redownload:
|
||||
for (i = 0; i < downloadCount; ++i) {
|
||||
redownload:
|
||||
if (i != s_nextDownloadFileIndex) {
|
||||
i = s_nextDownloadFileIndex;
|
||||
}
|
||||
|
||||
returnCode = DjiCameraManager_DownloadFileByIndex(position, s_meidaFileList.fileListInfo[i].fileIndex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Download media file by index failed, error code: 0x%08X.", returnCode);
|
||||
s_nextDownloadFileIndex--;
|
||||
goto redownload;
|
||||
}
|
||||
if (s_meidaFileList.fileListInfo[i].type == DJI_CAMERA_FILE_TYPE_LDRT) {
|
||||
for (j = 0; j < s_meidaFileList.fileListInfo[i].subFileListTotalNum; j++) {
|
||||
subFileRedownload:
|
||||
returnCode = DjiCameraManager_DownloadSubFileByIndexAndSubType(position,
|
||||
s_meidaFileList.fileListInfo[i].fileIndex,
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].type);
|
||||
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Download sub media file by index and type failed, error code: 0x%08X.", returnCode);
|
||||
goto subFileRedownload;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
returnCode = DjiCameraManager_DeleteFileByIndex(position, s_meidaFileList.fileListInfo[0].fileIndex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Delete media file by index failed, error code: 0x%08X.", returnCode);
|
||||
return returnCode;
|
||||
if (s_meidaFileList.fileListInfo[0].type == DJI_CAMERA_FILE_TYPE_JPEG) {
|
||||
returnCode = DjiCameraManager_DeleteFileByIndex(position, s_meidaFileList.fileListInfo[0].fileIndex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Delete media file by index failed, error code: 0x%08X.", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
@ -2368,23 +2297,45 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadFileListBySlices(E_DjiM
|
||||
static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownloadFilePacketInfo packetInfo,
|
||||
const uint8_t *data, uint16_t len)
|
||||
{
|
||||
int32_t i;
|
||||
int32_t i =0, j = 0;
|
||||
float downloadSpeed = 0.0f;
|
||||
uint32_t mediaFileIndex = 0, mediaSubFileIndex = -1;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
|
||||
if (packetInfo.downloadFileEvent == DJI_DOWNLOAD_FILE_EVENT_START) {
|
||||
for (i = 0; i < s_meidaFileList.totalCount; ++i) {
|
||||
if (s_meidaFileList.fileListInfo[i].fileIndex == packetInfo.fileIndex) {
|
||||
s_nextDownloadFileIndex = i + 1;
|
||||
break;
|
||||
memset(downloadFileName, 0, sizeof(downloadFileName));
|
||||
if (packetInfo.fileType == DJI_DOWNLOAD_FILE_ORG) {
|
||||
for (i = 0; i < s_meidaFileList.totalCount; ++i) {
|
||||
if (s_meidaFileList.fileListInfo[i].fileIndex == packetInfo.fileIndex) {
|
||||
snprintf(downloadFileName, sizeof(downloadFileName), "%s", s_meidaFileList.fileListInfo[i].fileName);
|
||||
mediaFileIndex = i;
|
||||
s_nextDownloadFileIndex = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < s_meidaFileList.totalCount; ++i) {
|
||||
for (j = 0; j < s_meidaFileList.fileListInfo[i].subFileListTotalNum; ++j) {
|
||||
if (s_meidaFileList.fileListInfo[i].subFileListInfo[j].fileIndex == packetInfo.fileIndex &&
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].type == packetInfo.fileType) {
|
||||
snprintf(downloadFileName, sizeof(downloadFileName), "%s",
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].fileName);
|
||||
mediaFileIndex = i;
|
||||
mediaSubFileIndex = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
osalHandler->GetTimeMs(&downloadStartMs);
|
||||
|
||||
memset(downloadFileName, 0, sizeof(downloadFileName));
|
||||
snprintf(downloadFileName, sizeof(downloadFileName), "%s", s_meidaFileList.fileListInfo[i].fileName);
|
||||
USER_LOG_INFO("Start download media file, index : %d, next download media file, index: %d", i,
|
||||
s_nextDownloadFileIndex);
|
||||
if (mediaSubFileIndex != TEST_CAMEAR_MEDIA_SUB_FILE_NOT_FOUND) {
|
||||
USER_LOG_INFO("Start download media sub file, index : %d, media file, index: %d", mediaSubFileIndex, mediaFileIndex);
|
||||
} else {
|
||||
USER_LOG_INFO("Start download media file, index : %d", mediaFileIndex);
|
||||
}
|
||||
|
||||
s_downloadMediaFile = fopen(downloadFileName, "wb+");
|
||||
if (s_downloadMediaFile == NULL) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
@ -2415,6 +2366,57 @@ static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownlo
|
||||
USER_LOG_INFO("End download media file, Download Speed %.2f KB/S\r\n\r\n", downloadSpeed);
|
||||
fclose(s_downloadMediaFile);
|
||||
s_downloadMediaFile = NULL;
|
||||
} else if (packetInfo.downloadFileEvent == DJI_DOWNLOAD_FILE_EVENT_START_TRANSFER_END) {
|
||||
|
||||
memset(downloadFileName, 0, sizeof(downloadFileName));
|
||||
if (packetInfo.fileType == DJI_DOWNLOAD_FILE_ORG) {
|
||||
for (i = 0; i < s_meidaFileList.totalCount; ++i) {
|
||||
if (s_meidaFileList.fileListInfo[i].fileIndex == packetInfo.fileIndex) {
|
||||
snprintf(downloadFileName, sizeof(downloadFileName), "%s", s_meidaFileList.fileListInfo[i].fileName);
|
||||
mediaFileIndex = i;
|
||||
s_nextDownloadFileIndex = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < s_meidaFileList.totalCount; ++i) {
|
||||
for (j = 0; j < s_meidaFileList.fileListInfo[i].subFileListTotalNum; ++j) {
|
||||
if (s_meidaFileList.fileListInfo[i].subFileListInfo[j].fileIndex == packetInfo.fileIndex &&
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].type == packetInfo.fileType) {
|
||||
snprintf(downloadFileName, sizeof(downloadFileName), "%s",
|
||||
s_meidaFileList.fileListInfo[i].subFileListInfo[j].fileName);
|
||||
mediaFileIndex = i;
|
||||
mediaSubFileIndex = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mediaSubFileIndex != TEST_CAMEAR_MEDIA_SUB_FILE_NOT_FOUND) {
|
||||
USER_LOG_INFO("Start download media sub file, index : %d, media file, index: %d", mediaSubFileIndex, mediaFileIndex);
|
||||
} else {
|
||||
USER_LOG_INFO("Start download media file, index : %d", mediaFileIndex);
|
||||
}
|
||||
|
||||
s_downloadMediaFile = fopen(downloadFileName, "wb+");
|
||||
if (s_downloadMediaFile == NULL) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
fwrite(data, 1, len, s_downloadMediaFile);
|
||||
|
||||
printf("\033[1;32;40m ### [Complete rate : %0.1f%%] (%s), size: %u, mediaFileIndex: %d\033[0m\r\n",
|
||||
packetInfo.progressInPercent, downloadFileName, packetInfo.fileSize, packetInfo.fileIndex);
|
||||
printf("\033[1A");
|
||||
|
||||
downloadSpeed = (float) packetInfo.fileSize / 1.0;
|
||||
printf("\033[1;32;40m ### [Complete rate : %0.1f%%] (%s), size: %u, mediaFileIndex: %d\033[0m\r\n",
|
||||
packetInfo.progressInPercent, downloadFileName, packetInfo.fileSize, packetInfo.fileIndex);
|
||||
printf("\033[1A");
|
||||
printf("\r\n");
|
||||
USER_LOG_INFO("End download media file, Download Speed %.2f KB/S\r\n\r\n", downloadSpeed);
|
||||
fclose(s_downloadMediaFile);
|
||||
s_downloadMediaFile = NULL;
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -2550,6 +2552,7 @@ T_DjiReturnCode DjiTest_CameraManagerSubscribePointCloud(E_DjiMountPosition posi
|
||||
T_DjiCameraManagerColorPointCloud *colorPointCloud;
|
||||
uint32_t colorPointCloudDataByte = 0;
|
||||
uint32_t colorPointsNum = 0;
|
||||
static bool isMopInit = false;
|
||||
|
||||
returnCode = DjiCameraManager_StartRecordPointCloud(position);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -2568,11 +2571,15 @@ T_DjiReturnCode DjiTest_CameraManagerSubscribePointCloud(E_DjiMountPosition posi
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
returnCode = DjiMopChannel_Init();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
fclose(fp);
|
||||
USER_LOG_ERROR("Mop channel init error, stat:0x%08llX.", returnCode);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
if (isMopInit == false) {
|
||||
returnCode = DjiMopChannel_Init();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
fclose(fp);
|
||||
USER_LOG_ERROR("Mop channel init error, stat:0x%08llX.", returnCode);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
} else {
|
||||
isMopInit = true;
|
||||
}
|
||||
}
|
||||
|
||||
returnCode = DjiMopChannel_Create(&s_mopChannelHandle, DJI_MOP_CHANNEL_TRANS_UNRELIABLE);
|
||||
|
||||
@ -47,7 +47,6 @@ typedef enum {
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_CAMERA_TAP_ZOOM_POINT,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_CAMERA_ZOOM_PARAM,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_SINGLE_PHOTO,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_AEB_PHOTO,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_BURST_PHOTO,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_INTERVAL_PHOTO,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_RECORD_VIDEO,
|
||||
@ -223,18 +222,6 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootSinglePhoto(E_DjiMountPosition po
|
||||
T_DjiReturnCode DjiTest_CameraManagerStartShootBurstPhoto(E_DjiMountPosition position,
|
||||
E_DjiCameraBurstCount burstCount);
|
||||
|
||||
/*! @brief Sample to shoot AEB photo, using async api
|
||||
*
|
||||
* @note In this interface, camera will be set to be the SHOOT_PHOTO mode
|
||||
* then start to shoot a AEB photo.
|
||||
* @param index payload node index, input limit see enum
|
||||
* DJI::OSDK::PayloadIndexType
|
||||
* @param photoNum The number of pictures in each AEB shooting
|
||||
* @return T_DjiReturnCode error code
|
||||
*/
|
||||
T_DjiReturnCode DjiTest_CameraManagerStartShootAEBPhoto(E_DjiMountPosition position,
|
||||
E_DjiCameraManagerPhotoAEBCount aebCount);
|
||||
|
||||
/*! @brief Sample to start shooting interval photo, using async api
|
||||
*
|
||||
* @note In this interface, camera will be set to be the SHOOT_PHOTO mode
|
||||
|
||||
@ -664,6 +664,7 @@ void DjiTest_FlightControlSetGetParamSample()
|
||||
E_DjiFlightControllerRtkPositionEnableStatus rtkEnableStatus;
|
||||
E_DjiFlightControllerRCLostAction rcLostAction;
|
||||
T_DjiAircraftInfoBaseInfo aircraftInfoBaseInfo;
|
||||
uint16_t countryCode;
|
||||
|
||||
returnCode = DjiAircraftInfo_GetBaseInfo(&aircraftInfoBaseInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -673,6 +674,12 @@ void DjiTest_FlightControlSetGetParamSample()
|
||||
USER_LOG_INFO("Flight control set-get-param sample start");
|
||||
DjiTest_WidgetLogAppend("Flight control set-get-param sample start");
|
||||
|
||||
returnCode = DjiFlightController_GetCountryCode(&countryCode);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get aircraft country code error.");
|
||||
}
|
||||
USER_LOG_INFO("country code: %hd", countryCode);
|
||||
|
||||
/*! Turn on horizontal vision avoid enable */
|
||||
USER_LOG_INFO("--> Step 1: Turn on horizontal visual obstacle avoidance");
|
||||
DjiTest_WidgetLogAppend("--> Step 1: Turn on horizontal visual obstacle avoidance");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -212,7 +212,7 @@ static T_DjiReturnCode DjiTest_HmsManagerInit(void)
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
snprintf(tempFileDirPath, HMS_DIR_PATH_LEN_MAX, "%s/data/hms_2023_08_22.json", curFileDirPath);
|
||||
snprintf(tempFileDirPath, HMS_DIR_PATH_LEN_MAX, "%s/data/hms.json", curFileDirPath);
|
||||
|
||||
returnCode = UtilFile_GetFileSizeByPath(tempFileDirPath, &fileSize);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
|
||||
@ -47,31 +47,20 @@ static T_DjiReturnCode DjiUserConfigManager_GetLinkConfigInner(const char *path,
|
||||
T_DjiReturnCode DjiUserConfigManager_LoadConfiguration(const char *path)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
char curFileDirPath[DJI_FILE_PATH_SIZE_MAX];
|
||||
char tempFileDirPath[DJI_FILE_PATH_SIZE_MAX];
|
||||
|
||||
if (path == NULL) {
|
||||
returnCode = DjiUserUtil_GetCurrentFileDirPath(__FILE__, DJI_FILE_PATH_SIZE_MAX,
|
||||
curFileDirPath);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get file current path error, stat = 0x%08llX", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
snprintf(tempFileDirPath, DJI_FILE_PATH_SIZE_MAX, "%s/dji_sdk_config.json",
|
||||
curFileDirPath);
|
||||
} else {
|
||||
strcpy(tempFileDirPath, path);
|
||||
perror("Config file path is null.\n");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
printf("Load configuration start.\r\n");
|
||||
printf("Load configuration start, config file path is: %s\r\n", path);
|
||||
|
||||
returnCode = DjiUserConfigManager_GetAppInfoInner(tempFileDirPath, &s_configManagerUserInfo);
|
||||
returnCode = DjiUserConfigManager_GetAppInfoInner(path, &s_configManagerUserInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
perror("Get app info failed.\n");
|
||||
}
|
||||
|
||||
returnCode = DjiUserConfigManager_GetLinkConfigInner(tempFileDirPath, &s_configManagerLinkInfo);
|
||||
returnCode = DjiUserConfigManager_GetLinkConfigInner(path, &s_configManagerLinkInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
perror("Get link info failed.\n");
|
||||
}
|
||||
@ -133,7 +122,8 @@ static T_DjiReturnCode DjiUserConfigManager_GetAppInfoInner(const char *path, T_
|
||||
|
||||
jsonRoot = cJSON_Parse((char *) jsonData);
|
||||
if (jsonRoot == NULL) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
returnCode = DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
goto jsonDataFree;
|
||||
}
|
||||
|
||||
jsonItem = cJSON_GetObjectItem(jsonRoot, "dji_sdk_app_info");
|
||||
@ -176,7 +166,8 @@ static T_DjiReturnCode DjiUserConfigManager_GetAppInfoInner(const char *path, T_
|
||||
strlen(userInfo->developerAccount) >= sizeof(userInfo->developerAccount) ||
|
||||
strlen(userInfo->baudRate) > sizeof(userInfo->baudRate)) {
|
||||
USER_LOG_ERROR("Length of user information string is beyond limit. Please check.");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
returnCode = DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
goto jsonDataFree;
|
||||
}
|
||||
|
||||
if (!strcmp(userInfo->appName, "your_app_name") ||
|
||||
@ -187,9 +178,11 @@ static T_DjiReturnCode DjiUserConfigManager_GetAppInfoInner(const char *path, T_
|
||||
!strcmp(userInfo->baudRate, "your_baud_rate")) {
|
||||
USER_LOG_ERROR(
|
||||
"Please fill in correct user information to 'samples/sample_c++/platform/linux/manifold2/application/dji_sdk_config.json' file.");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
returnCode = DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
goto jsonDataFree;
|
||||
}
|
||||
|
||||
jsonDataFree:
|
||||
osalHandler->Free(jsonData);
|
||||
#endif
|
||||
|
||||
@ -42,6 +42,7 @@ static T_DjiWaypointV3MissionState s_lastWaypointV3MissionState = {0};
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
static T_DjiReturnCode DjiTest_WaypointV3MissionStateCallback(T_DjiWaypointV3MissionState missionState);
|
||||
static T_DjiReturnCode DjiTest_WaypointV3ActionStateCallback(T_DjiWaypointV3ActionState actionState);
|
||||
static T_DjiReturnCode DjiTest_WaypointV3WaitEndFlightStatus(T_DjiFcSubscriptionFlightStatus status);
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
|
||||
@ -136,8 +137,6 @@ T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
|
||||
goto close_file;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(2000);
|
||||
|
||||
close_file:
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
returnCode = fclose(kmzFile);
|
||||
@ -155,21 +154,49 @@ close_file:
|
||||
goto out;
|
||||
}
|
||||
|
||||
do {
|
||||
osalHandler->TaskSleepMs(2000);
|
||||
USER_LOG_INFO("The aircraft is on the ground and motors are stoped...");
|
||||
returnCode = DjiTest_WaypointV3WaitEndFlightStatus(DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_STOPED);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Wait end flight status error.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
|
||||
(uint8_t *) &flightStatus,
|
||||
sizeof(T_DjiFcSubscriptionFlightStatus),
|
||||
&flightStatusTimestamp);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get value of topic flight status failed, error code:0x%08llX", returnCode);
|
||||
}
|
||||
USER_LOG_INFO("The aircraft is on the ground and motors are rotating...");
|
||||
returnCode = DjiTest_WaypointV3WaitEndFlightStatus(DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_ON_GROUND);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Wait end flight status error.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("flight status: %d", flightStatus);
|
||||
} while(flightStatus == DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_IN_AIR);
|
||||
USER_LOG_INFO("The aircraft is in the air...");
|
||||
returnCode = DjiTest_WaypointV3WaitEndFlightStatus(DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_IN_AIR);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Wait end flight status error.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("The aircraft is on the ground now.");
|
||||
USER_LOG_INFO("The aircraft is on the ground and motors are rotating...");
|
||||
returnCode = DjiTest_WaypointV3WaitEndFlightStatus(DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_ON_GROUND);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Wait end flight status error.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
|
||||
(uint8_t *) &flightStatus,
|
||||
sizeof(T_DjiFcSubscriptionFlightStatus),
|
||||
&flightStatusTimestamp);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get value of topic flight status failed, error code:0x%08llX", returnCode);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (flightStatus != DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_STOPED) {
|
||||
USER_LOG_ERROR("Aircraft's flight status error, motors are not stoped.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("The aircraft is on the ground now, and motor are stoped.");
|
||||
|
||||
out:
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
@ -209,4 +236,25 @@ static T_DjiReturnCode DjiTest_WaypointV3ActionStateCallback(T_DjiWaypointV3Acti
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static T_DjiReturnCode DjiTest_WaypointV3WaitEndFlightStatus(T_DjiFcSubscriptionFlightStatus status) {
|
||||
T_DjiReturnCode returnCode;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
T_DjiDataTimestamp flightStatusTimestamp = {0};
|
||||
T_DjiFcSubscriptionFlightStatus flightStatus = 0;
|
||||
|
||||
do {
|
||||
osalHandler->TaskSleepMs(20);
|
||||
|
||||
returnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
|
||||
(uint8_t *)&flightStatus,
|
||||
sizeof(T_DjiFcSubscriptionFlightStatus),
|
||||
&flightStatusTimestamp);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get value of topic flight status failed, error code:0x%08llX", returnCode);
|
||||
}
|
||||
} while(flightStatus == status);
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -87,12 +87,11 @@ typedef enum {
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_TAP_ZOOM = 20,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_OPTICAL_ZOOM = 21,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_SINGLE_PHOTO = 22,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_AEB_PHOTO = 23,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_BURST_PHOTO = 24,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_INTERVAL_PHOTO = 25,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_RECORDER_VIDEO = 26,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_MEDIA_DOWNLOAD = 27,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_THERMOMETRY = 28,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_BURST_PHOTO = 23,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_INTERVAL_PHOTO = 24,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_RECORDER_VIDEO = 25,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_MEDIA_DOWNLOAD = 26,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_THERMOMETRY = 27,
|
||||
E_DJI_SAMPLE_INDEX_UNKNOWN = 0xFF,
|
||||
} E_DjiExtensionPortSampleIndex;
|
||||
|
||||
@ -583,10 +582,6 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
DjiTest_CameraManagerRunSample(s_mountPosition,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_SINGLE_PHOTO);
|
||||
break;
|
||||
case E_DJI_SAMPLE_INDEX_CAMMGR_AEB_PHOTO:
|
||||
DjiTest_CameraManagerRunSample(s_mountPosition,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_AEB_PHOTO);
|
||||
break;
|
||||
case E_DJI_SAMPLE_INDEX_CAMMGR_BURST_PHOTO:
|
||||
DjiTest_CameraManagerRunSample(s_mountPosition,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_BURST_PHOTO);
|
||||
|
||||
@ -205,22 +205,19 @@
|
||||
"item_name": "23_test_cammgr-single_photo"
|
||||
},
|
||||
{
|
||||
"item_name": "24_test_cammgr-AEB_photo"
|
||||
"item_name": "24_test_cammgr-burst_photo"
|
||||
},
|
||||
{
|
||||
"item_name": "25_test_cammgr-burst_photo"
|
||||
"item_name": "25_test_cammgr-interval_photo"
|
||||
},
|
||||
{
|
||||
"item_name": "26_test_cammgr-interval_photo"
|
||||
"item_name": "26_test_cammgr-recorder_video"
|
||||
},
|
||||
{
|
||||
"item_name": "27_test_cammgr-recorder_video"
|
||||
"item_name": "27_test_cammgr-media_download"
|
||||
},
|
||||
{
|
||||
"item_name": "28_test_cammgr-media_download"
|
||||
},
|
||||
{
|
||||
"item_name": "29_test_cammgr-thermometry"
|
||||
"item_name": "28_test_cammgr-thermometry"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@ -205,22 +205,19 @@
|
||||
"item_name": "23_test_cammgr-single_photo"
|
||||
},
|
||||
{
|
||||
"item_name": "24_test_cammgr-AEB_photo"
|
||||
"item_name": "24_test_cammgr-burst_photo"
|
||||
},
|
||||
{
|
||||
"item_name": "25_test_cammgr-burst_photo"
|
||||
"item_name": "25_test_cammgr-interval_photo"
|
||||
},
|
||||
{
|
||||
"item_name": "26_test_cammgr-interval_photo"
|
||||
"item_name": "26_test_cammgr-recorder_video"
|
||||
},
|
||||
{
|
||||
"item_name": "27_test_cammgr-recorder_video"
|
||||
"item_name": "27_test_cammgr-media_download"
|
||||
},
|
||||
{
|
||||
"item_name": "28_test_cammgr-media_download"
|
||||
},
|
||||
{
|
||||
"item_name": "29_test_cammgr-thermometry"
|
||||
"item_name": "28_test_cammgr-thermometry"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@ -75,6 +75,9 @@ T_DjiReturnCode Osal_TaskCreate(const char *name, void *(*taskFunc)(void *), uin
|
||||
|
||||
T_DjiReturnCode Osal_TaskDestroy(T_DjiTaskHandle task)
|
||||
{
|
||||
if (task == NULL) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
pthread_cancel(*(pthread_t *) task);
|
||||
free(task);
|
||||
|
||||
@ -344,4 +347,4 @@ void Osal_Free(void *ptr)
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -143,7 +143,7 @@ int main(int argc, char **argv)
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("get aircraft version info error");
|
||||
} else {
|
||||
USER_LOG_INFO("Aircraft version is V%d.%d.%d.%d", aircraftInfoVersion.majorVersion,
|
||||
USER_LOG_INFO("Aircraft version is V%02d.%02d.%02d.%02d", aircraftInfoVersion.majorVersion,
|
||||
aircraftInfoVersion.minorVersion, aircraftInfoVersion.modifyVersion,
|
||||
aircraftInfoVersion.debugVersion);
|
||||
}
|
||||
|
||||
@ -141,9 +141,9 @@ int main(int argc, char **argv)
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("get aircraft version info error");
|
||||
} else {
|
||||
USER_LOG_INFO("Aircraft version is V%d.%d.%d.%d", aircraftInfoVersion.debugVersion,
|
||||
aircraftInfoVersion.modifyVersion, aircraftInfoVersion.minorVersion,
|
||||
aircraftInfoVersion.majorVersion);
|
||||
USER_LOG_INFO("Aircraft version is V%02d.%02d.%02d.%02d", aircraftInfoVersion.majorVersion,
|
||||
aircraftInfoVersion.minorVersion, aircraftInfoVersion.modifyVersion,
|
||||
aircraftInfoVersion.debugVersion);
|
||||
}
|
||||
|
||||
returnCode = DjiCore_SetAlias("PSDK_APPALIAS");
|
||||
|
||||
@ -62,6 +62,11 @@ extern "C" {
|
||||
|
||||
//#endif
|
||||
|
||||
#define USER_FIRMWARE_MAJOR_VERSION (1)
|
||||
#define USER_FIRMWARE_MINOR_VERSION (33)
|
||||
#define USER_FIRMWARE_MODIFY_VERSION (88)
|
||||
#define USER_FIRMWARE_DEBUG_VERSION (99)
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
@ -410,6 +410,11 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>dji_config_manager.c</FileName>
|
||||
<FilePath>..\..\..\..\..\module_sample\utils\dji_config_manager.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>file_binary_array_list_en.c</FileName>
|
||||
<FilePath>..\..\..\..\..\module_sample\widget\file_binary_array_list_en.c</FilePath>
|
||||
</File>
|
||||
|
||||
Reference in New Issue
Block a user