NEW: add the M30T model stp and esp32 toolchain support

Signed-off-by: DJI-Martin <DJI-Martin@dji.com>
This commit is contained in:
DJI-Martin
2022-04-06 11:55:05 +08:00
parent 0e06bc3fd3
commit 77353a8b55
37 changed files with 1042840 additions and 100 deletions

View File

@ -56,4 +56,4 @@ You can get official support from DJI and the community with the following metho
You can also communicate with other developers by the following methods:
- Github Issues or [gitter.im](https://gitter.im/dji-sdk/Payload-SDK)
- Post questions on [**Stackoverflow**](http://stackoverflow.com) using [**dji-sdk**](http://stackoverflow.com/questions/tagged/dji-sdk) tag
- Post questions on [**Stackoverflow**](http://stackoverflow.com) using [**dji-sdk**](http://stackoverflow.com/questions/tagged/dji-sdk) tag

1042701
doc/simple_model/M30T.stp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -471,13 +471,16 @@ typedef struct {
typedef struct {
union {
struct {
uint8_t reserved[16];
uint32_t attributePhotoReserved: 22;
uint32_t attributePhotoRatio: 8;
uint32_t attributePhotoRotation: 2;
uint8_t reserved[12];
} photoAttribute;
struct {
uint8_t attributeVideoDuration;
uint8_t attributeVideoFramerate;
uint8_t attributeVideoRotation;
uint8_t attributeVideoResolution;
uint32_t attributeVideoDuration: 16;
uint32_t attributeVideoFramerate: 6;
uint32_t attributeVideoRotation: 2;
uint32_t attributeVideoResolution: 8;
uint8_t reserved[12];
} videoAttribute;
};
@ -488,7 +491,7 @@ typedef struct {
uint32_t fileSize;
uint32_t fileIndex;
T_DjiCameraManagerFileCreateTime createTime;
uint8_t type;
E_DjiCameraMediaFileType type;
T_DjiCameraManagerFileAttributeData attributeData;
} T_DjiCameraManagerFileListInfo;

View File

@ -252,6 +252,10 @@ typedef struct {
dji_f64_t latitude; /*!< unit: rad */
dji_f64_t longitude; /*!< unit: rad */
} T_DjiFlightControllerHomeLocation; // pack(1)
typedef struct {
char serialNum[16];
} T_DjiFlightControllerGeneralInfo;
#pragma pack()
/* Exported functions --------------------------------------------------------*/
@ -585,6 +589,14 @@ T_DjiReturnCode DjiFlightController_ExecuteEmergencyBrakeAction(void);
*/
T_DjiReturnCode DjiFlightController_CancelEmergencyBrakeAction(void);
/**
* @brief Get general info of the aircraft.
* @param generalInfo: the struct stored the serial num which contains a array of chars var in case the user gives an
* illegal length character pointer
* @return Execution result.
*/
T_DjiReturnCode DjiFlightController_GetGeneralInfo(T_DjiFlightControllerGeneralInfo *generalInfo);
#ifdef __cplusplus
}
#endif

View File

@ -53,10 +53,15 @@ typedef enum {
typedef enum {
DJI_LIVEVIEW_CAMERA_SOURCE_DEFAULT = 0,
DJI_LIVEVIEW_CAMERA_SOURCE_H20_WIDE = 1,
DJI_LIVEVIEW_CAMERA_SOURCE_H20T_WIDE = 1,
DJI_LIVEVIEW_CAMERA_SOURCE_H20_ZOOM = 2,
DJI_LIVEVIEW_CAMERA_SOURCE_H20T_WIDE = 1,
DJI_LIVEVIEW_CAMERA_SOURCE_H20T_ZOOM = 2,
DJI_LIVEVIEW_CAMERA_SOURCE_H20T_IR = 3
DJI_LIVEVIEW_CAMERA_SOURCE_H20T_IR = 3,
DJI_LIVEVIEW_CAMERA_SOURCE_M30_ZOOM = 1,
DJI_LIVEVIEW_CAMERA_SOURCE_M30_WIDE = 2,
DJI_LIVEVIEW_CAMERA_SOURCE_M30T_ZOOM = 1,
DJI_LIVEVIEW_CAMERA_SOURCE_M30T_WIDE = 2,
DJI_LIVEVIEW_CAMERA_SOURCE_M30T_IR = 3
} E_DjiLiveViewCameraSource;
/**

View File

@ -82,16 +82,6 @@ typedef enum {
DJI_CAMERA_FOCUS_MODE_AUTO = 1, /*!< Auto focus mode. */
} E_DjiCameraFocusMode;
/**
* @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. */
} E_DjiCameraMediaFileType;
/**
* @brief Camera playback mode in playback process.
*/

View File

@ -120,6 +120,17 @@ typedef enum {
DJI_CAMERA_TYPE_M30T, /*!< Camera type is M30T. */
} E_DjiCameraType;
/**
* @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_UNKNOWN = 255, /*!< Media file unknown type. */
} E_DjiCameraMediaFileType;
/**
* @brief Camera optical zoom specifies.
*/

View File

@ -37,7 +37,7 @@ extern "C" {
#define DJI_VERSION_MINOR 1 /*!< 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_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 1491 /*!< DJI SDK version build info, when jenkins trigger build changes. Range from 0 to 65535. */
#define DJI_VERSION_BUILD 1500 /*!< DJI SDK version build info, when jenkins trigger build changes. Range from 0 to 65535. */
/* Exported types ------------------------------------------------------------*/

Binary file not shown.

View File

@ -206,4 +206,4 @@ static void LiveviewConvertH264ToRgbCallback(E_DjiLiveViewCameraPosition positio
}
}
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/

View File

@ -90,37 +90,6 @@ void DjiUser_RunCameraStreamViewSample()
USER_LOG_ERROR("Get file current path error, stat = 0x%08llX", returnCode);
}
cout << "Please enter the type of camera stream you want to view\n\n"
<< "--> [f] Fpv Camera\n"
<< "--> [m] Main Camera\n"
<< "--> [v] Vice Camera\n"
<< "--> [t] Top Camera\n"
<< endl;
cin >> cameraIndexChar;
switch (cameraIndexChar) {
case 'f':
case 'F':
liveviewSample->StartFpvCameraStream(&DjiUser_ShowRgbImageCallback, &fpvName);
break;
case 'm':
case 'M':
liveviewSample->StartMainCameraStream(&DjiUser_ShowRgbImageCallback, &mainName);
break;
case 'v':
case 'V':
liveviewSample->StartViceCameraStream(&DjiUser_ShowRgbImageCallback, &viceName);
break;
case 't':
case 'T':
liveviewSample->StartTopCameraStream(&DjiUser_ShowRgbImageCallback, &topName);
break;
default:
cout << "No camera selected";
delete liveviewSample;
return;
}
cout << "Please choose the stream demo you want to run\n\n"
<< "--> [0] Normal RGB image display\n"
<< "--> [1] Binary image display\n"
@ -148,6 +117,33 @@ void DjiUser_RunCameraStreamViewSample()
return;
}
cout << "Please enter the type of camera stream you want to view\n\n"
<< "--> [0] Fpv Camera\n"
<< "--> [1] Main Camera\n"
<< "--> [2] Vice Camera\n"
<< "--> [3] Top Camera\n"
<< endl;
cin >> cameraIndexChar;
switch (cameraIndexChar) {
case '0':
liveviewSample->StartFpvCameraStream(&DjiUser_ShowRgbImageCallback, &fpvName);
break;
case '1':
liveviewSample->StartMainCameraStream(&DjiUser_ShowRgbImageCallback, &mainName);
break;
case '2':
liveviewSample->StartViceCameraStream(&DjiUser_ShowRgbImageCallback, &viceName);
break;
case '3':
liveviewSample->StartTopCameraStream(&DjiUser_ShowRgbImageCallback, &topName);
break;
default:
cout << "No camera selected";
delete liveviewSample;
return;
}
cout << "Please enter the 'q' or 'Q' to quit camera stream view\n"
<< endl;
@ -159,20 +155,16 @@ void DjiUser_RunCameraStreamViewSample()
}
switch (cameraIndexChar) {
case 'f':
case 'F':
case '0':
liveviewSample->StopFpvCameraStream();
break;
case 'm':
case 'M':
case '1':
liveviewSample->StopMainCameraStream();
break;
case 'v':
case 'V':
case '2':
liveviewSample->StopViceCameraStream();
break;
case 't':
case 'T':
case '3':
liveviewSample->StopTopCameraStream();
break;
default:

View File

@ -42,7 +42,7 @@
#define DJI_LOG_FOLDER_NAME "Logs"
#define DJI_LOG_PATH_MAX_SIZE (128)
#define DJI_LOG_FOLDER_NAME_MAX_SIZE (32)
#define DJI_LOG_SYSTEM_CMD_MAX_SIZE (64)
#define DJI_SYSTEM_CMD_STR_MAX_SIZE (64)
#define DJI_LOG_MAX_COUNT (10)
#define USER_UTIL_UNUSED(x) ((x) = (x))
@ -290,7 +290,7 @@ T_DjiReturnCode Application::DjiUser_LocalWriteFsInit(const char *path)
{
T_DjiReturnCode djiReturnCode = DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
char filePath[DJI_LOG_PATH_MAX_SIZE];
char systemCmd[DJI_LOG_SYSTEM_CMD_MAX_SIZE];
char systemCmd[DJI_SYSTEM_CMD_STR_MAX_SIZE];
char folderName[DJI_LOG_FOLDER_NAME_MAX_SIZE];
time_t currentTime = time(nullptr);
struct tm *localTime = localtime(&currentTime);

View File

@ -28,7 +28,7 @@
/* Private constants ---------------------------------------------------------*/
#define UART_DEV_NAME_STR_SIZE (128)
#define DJI_SYSTEM_CMD_MAX_SIZE (64)
#define DJI_SYSTEM_CMD_STR_MAX_SIZE (64)
#define DJI_SYSTEM_RESULT_STR_MAX_SIZE (128)
/* Private types -------------------------------------------------------------*/
@ -48,7 +48,7 @@ T_DjiReturnCode HalUart_Init(E_DjiHalUartNum uartNum, uint32_t baudRate, T_DjiUa
struct flock lock;
T_DjiReturnCode returnCode = DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
char uartName[UART_DEV_NAME_STR_SIZE];
char systemCmd[DJI_SYSTEM_CMD_MAX_SIZE];
char systemCmd[DJI_SYSTEM_CMD_STR_MAX_SIZE];
char *ret = NULL;
char lineBuf[DJI_SYSTEM_RESULT_STR_MAX_SIZE] = {0};
FILE *fp;

View File

@ -178,8 +178,8 @@ T_DjiReturnCode HalUsbBulk_ReadData(T_DjiUsbBulkHandle usbBulkHandle, uint8_t *b
T_DjiReturnCode HalUsbBulk_GetDeviceInfo(T_DjiHalUsbBulkDeviceInfo *deviceInfo)
{
//attention: need confirm your usb config in device mode.
deviceInfo->vid = 0x7020;
deviceInfo->pid = 0x9055;
deviceInfo->vid = 0x0955;
deviceInfo->pid = 0x7020;
deviceInfo->bulkChannelNum = 2;

View File

@ -1203,12 +1203,33 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
if (s_meidaFileList.totalCount > 0) {
for (int i = 0; i < s_meidaFileList.totalCount; ++i) {
USER_LOG_INFO("Media file_%03d name: %s, index: %d, size: %d, type: %d",
i, s_meidaFileList.fileListInfo[i].fileName,
s_meidaFileList.fileListInfo[i].fileIndex,
s_meidaFileList.fileListInfo[i].fileSize,
s_meidaFileList.fileListInfo[i].type);
osalHandler->TaskSleepMs(10);
if (s_meidaFileList.fileListInfo[i].fileSize < 1 * 1024 * 1024) {
USER_LOG_INFO(
"Media file_%03d name: %s, index: %d, time:%04d-%02d-%02d_%02d:%02d:%02d, size: %.2f KB, type: %d",
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,
s_meidaFileList.fileListInfo[i].type);
} else {
USER_LOG_INFO(
"Media file_%03d name: %s, index: %d, time:%04d-%02d-%02d_%02d:%02d:%02d, size: %.2f MB, type: %d",
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),
s_meidaFileList.fileListInfo[i].type);
}
}
osalHandler->TaskSleepMs(1000);
@ -1226,6 +1247,8 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
USER_LOG_ERROR("Delete media file by index failed, error code: 0x%08X.", returnCode);
return returnCode;
}
osalHandler->TaskSleepMs(1000);
} else {
USER_LOG_WARN("Media file is not existed in sdcard.");
}
@ -1242,10 +1265,6 @@ static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownlo
sprintf(extendInfo, " FileIndex: %d", packetInfo.fileIndex);
#ifdef SYSTEM_ARCH_LINUX
DjiUserUtil_PrintProgressBar(packetInfo.progressInPercent, 100, extendInfo);
#endif
if (packetInfo.downloadFileEvent == DJI_DOWNLOAD_FILE_EVENT_START) {
for (i = 0; i < s_meidaFileList.totalCount; ++i) {
if (s_meidaFileList.fileListInfo[i].fileIndex == packetInfo.fileIndex) {
@ -1253,17 +1272,23 @@ static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownlo
}
}
sprintf(fileName, "%s", s_meidaFileList.fileListInfo[i].fileName);
USER_LOG_INFO("Start download media file %s", s_meidaFileList.fileListInfo[i].fileName);
s_downloadMediaFile = fopen(fileName, "wb+");
if (s_downloadMediaFile == NULL) {
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
}
fwrite(data, 1, len, s_downloadMediaFile);
} else if (packetInfo.downloadFileEvent == DJI_DOWNLOAD_FILE_EVENT_TRANSFER) {
fwrite(data, 1, len, s_downloadMediaFile);
if (s_downloadMediaFile != NULL) {
fwrite(data, 1, len, s_downloadMediaFile);
}
} else if (packetInfo.downloadFileEvent == DJI_DOWNLOAD_FILE_EVENT_END) {
fwrite(data, 1, len, s_downloadMediaFile);
if (s_downloadMediaFile != NULL) {
fwrite(data, 1, len, s_downloadMediaFile);
}
USER_LOG_INFO("End download media file");
fclose(s_downloadMediaFile);
printf("\r\n");
}
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;

View File

@ -60,6 +60,7 @@ T_DjiReturnCode DjiTest_DataTransmissionStartService(void)
char ipAddr[DJI_IP_ADDR_STR_SIZE_MAX];
uint16_t port;
djiStat = DjiLowSpeedDataChannel_Init();
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("init data transmission module error.");
@ -176,20 +177,20 @@ static void *UserDataTransmission_Task(void *arg)
USER_LOG_ERROR("get send to onboard computer channel state error.");
}
#ifdef SYSTEM_ARCH_LINUX
djiStat = DjiHighSpeedDataChannel_SendDataStreamData(dataToBeSent, sizeof(dataToBeSent));
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
USER_LOG_ERROR("send data to data stream error.");
if (DjiPlatform_GetSocketHandler() != NULL) {
djiStat = DjiHighSpeedDataChannel_SendDataStreamData(dataToBeSent, sizeof(dataToBeSent));
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
USER_LOG_ERROR("send data to data stream error.");
djiStat = DjiHighSpeedDataChannel_GetDataStreamState(&state);
if (djiStat == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_DEBUG(
"data stream state: realtimeBandwidthLimit: %d, realtimeBandwidthBeforeFlowController: %d, busyState: %d.",
state.realtimeBandwidthLimit, state.realtimeBandwidthBeforeFlowController, state.busyState);
} else {
USER_LOG_ERROR("get data stream state error.");
djiStat = DjiHighSpeedDataChannel_GetDataStreamState(&state);
if (djiStat == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_DEBUG(
"data stream state: realtimeBandwidthLimit: %d, realtimeBandwidthBeforeFlowController: %d, busyState: %d.",
state.realtimeBandwidthLimit, state.realtimeBandwidthBeforeFlowController, state.busyState);
} else {
USER_LOG_ERROR("get data stream state error.");
}
}
#endif
} else if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_EXTENSION_PORT) {
channelAddress = DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO1;
djiStat = DjiLowSpeedDataChannel_SendData(channelAddress, dataToBeSent, sizeof(dataToBeSent));

View File

@ -39,7 +39,6 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_DjiReturnCode DjiTest_DataTransmissionStartService(void);

View File

@ -271,7 +271,7 @@ T_DjiReturnCode Osal_Stat(const char *filePath, T_DjiFileInfo *fileInfo)
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
}
fileTm = localtime(&(st.st_mtim));
fileTm = localtime((const time_t *) &(st.st_mtim));
if (fileTm == NULL) {
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
}

View File

@ -124,7 +124,7 @@ T_DjiReturnCode Osal_UdpSendData(T_DjiSocketHandle socketHandle, const char *ipA
addr.sin_port = htons(port);
addr.sin_addr.s_addr = inet_addr(ipAddr);
ret = sendto(socketHandleStruct->socketFd, buf, len, 0, (struct sockaddr *) &addr, sizeof(struct sockaddr_in));
ret = sendto(socketHandleStruct->socketFd, buf, len, MSG_DONTWAIT, (struct sockaddr *) &addr, sizeof(struct sockaddr_in));
if (ret >= 0) {
*realLen = ret;
} else {

View File

@ -60,8 +60,9 @@
#define DJI_LOG_FOLDER_NAME "Logs"
#define DJI_LOG_PATH_MAX_SIZE (128)
#define DJI_LOG_FOLDER_NAME_MAX_SIZE (32)
#define DJI_LOG_SYSTEM_CMD_MAX_SIZE (64)
#define DJI_LOG_MAX_COUNT (10)
#define DJI_SYSTEM_CMD_STR_MAX_SIZE (64)
#define DJI_SYSTEM_RESULT_STR_MAX_SIZE (128)
#define DJI_USE_WIDGET_INTERACTION 0
@ -505,7 +506,7 @@ static T_DjiReturnCode DjiUser_LocalWriteFsInit(const char *path)
{
T_DjiReturnCode djiReturnCode = DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
char filePath[DJI_LOG_PATH_MAX_SIZE];
char systemCmd[DJI_LOG_SYSTEM_CMD_MAX_SIZE];
char systemCmd[DJI_SYSTEM_CMD_STR_MAX_SIZE];
char folderName[DJI_LOG_FOLDER_NAME_MAX_SIZE];
time_t currentTime = time(NULL);
struct tm *localTime = localtime(&currentTime);

View File

@ -28,7 +28,7 @@
/* Private constants ---------------------------------------------------------*/
#define UART_DEV_NAME_STR_SIZE (128)
#define DJI_SYSTEM_CMD_MAX_SIZE (64)
#define DJI_SYSTEM_CMD_STR_MAX_SIZE (64)
#define DJI_SYSTEM_RESULT_STR_MAX_SIZE (128)
/* Private types -------------------------------------------------------------*/
@ -48,7 +48,7 @@ T_DjiReturnCode HalUart_Init(E_DjiHalUartNum uartNum, uint32_t baudRate, T_DjiUa
struct flock lock;
T_DjiReturnCode returnCode = DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
char uartName[UART_DEV_NAME_STR_SIZE];
char systemCmd[DJI_SYSTEM_CMD_MAX_SIZE];
char systemCmd[DJI_SYSTEM_CMD_STR_MAX_SIZE];
char *ret = NULL;
char lineBuf[DJI_SYSTEM_RESULT_STR_MAX_SIZE] = {0};
FILE *fp;

View File

@ -178,8 +178,8 @@ T_DjiReturnCode HalUsbBulk_ReadData(T_DjiUsbBulkHandle usbBulkHandle, uint8_t *b
T_DjiReturnCode HalUsbBulk_GetDeviceInfo(T_DjiHalUsbBulkDeviceInfo *deviceInfo)
{
//attention: need confirm your usb config in device mode.
deviceInfo->vid = 0x7020;
deviceInfo->pid = 0x9055;
deviceInfo->vid = 0x0955;
deviceInfo->pid = 0x7020;
deviceInfo->bulkChannelNum = 2;