NEW: release DJI Payload-SDK version 3.4

Signed-off-by: DJI-Martin <DJI-Martin@dji.com>
This commit is contained in:
DJI-Martin
2023-04-18 21:26:50 +08:00
parent b621c93fde
commit 29109dd0db
106 changed files with 3030521 additions and 1114 deletions

View File

@ -33,6 +33,10 @@
/* Private constants ---------------------------------------------------------*/
#define TEST_CAMERA_MANAGER_MEDIA_FILE_NAME_MAX_SIZE 256
#define TEST_CAMERA_MANAGER_MEDIA_DOWNLOAD_FILE_NUM 5
#define CAMERA_MANAGER_SUBSCRIPTION_FREQ 5
#define TEST_CAMERA_MAX_INFRARED_ZOOM_FACTOR 8
#define TEST_CAMERA_MIN_INFRARED_ZOOM_FACTOR 2
/* Private types -------------------------------------------------------------*/
typedef struct {
@ -63,13 +67,17 @@ static T_DjiCameraManagerFileList s_meidaFileList;
static uint32_t downloadStartMs = 0;
static uint32_t downloadEndMs = 0;
static char downloadFileName[TEST_CAMERA_MANAGER_MEDIA_FILE_NAME_MAX_SIZE] = {0};
static uint32_t nextDownloadFileIndex = 0;
static uint32_t s_nextDownloadFileIndex = 0;
/* Private functions declaration ---------------------------------------------*/
static uint8_t DjiTest_CameraManagerGetCameraTypeIndex(E_DjiCameraType cameraType);
static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_DjiMountPosition position);
static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownloadFilePacketInfo packetInfo,
const uint8_t *data, uint16_t len);
static T_DjiReturnCode DjiTest_CameraManagerGetAreaThermometryData(E_DjiMountPosition position);
static T_DjiReturnCode DjiTest_CameraManagerGetPointThermometryData(E_DjiMountPosition position);
static T_DjiReturnCode DjiTest_CameraManagerGetLidarRangingInfo(E_DjiMountPosition position);
/* Exported functions definition ---------------------------------------------*/
/*! @brief Sample to set EV for camera, using async api
@ -480,6 +488,7 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootSinglePhoto(E_DjiMountPosition po
{
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);
@ -491,6 +500,17 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootSinglePhoto(E_DjiMountPosition po
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 single-photo mode", position);
returnCode = DjiCameraManager_SetShootPhotoMode(position, DJI_CAMERA_MANAGER_SHOOT_PHOTO_MODE_SINGLE);
@ -530,6 +550,7 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootBurstPhoto(E_DjiMountPosition pos
{
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);
@ -540,6 +561,17 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootBurstPhoto(E_DjiMountPosition pos
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 burst-photo mode", position);
returnCode = DjiCameraManager_SetShootPhotoMode(position, DJI_CAMERA_MANAGER_SHOOT_PHOTO_MODE_BURST);
@ -592,6 +624,7 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootAEBPhoto(E_DjiMountPosition posit
{
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);
@ -603,6 +636,17 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootAEBPhoto(E_DjiMountPosition posit
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);
@ -654,6 +698,7 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootIntervalPhoto(E_DjiMountPosition
{
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);
@ -666,6 +711,15 @@ T_DjiReturnCode DjiTest_CameraManagerStartShootIntervalPhoto(E_DjiMountPosition
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 interval-photo mode", position);
returnCode = DjiCameraManager_SetShootPhotoMode(position, DJI_CAMERA_MANAGER_SHOOT_PHOTO_MODE_INTERVAL);
@ -743,6 +797,9 @@ T_DjiReturnCode DjiTest_CameraManagerStopShootPhoto(E_DjiMountPosition position)
T_DjiReturnCode DjiTest_CameraManagerStartRecordVideo(E_DjiMountPosition position)
{
T_DjiReturnCode returnCode;
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
E_DjiCameraManagerWorkMode workMode;
/*!< set camera work mode as record video */
USER_LOG_INFO("set mounted position %d camera's work mode as record-video mode", position);
returnCode = DjiCameraManager_SetMode(position, DJI_CAMERA_MANAGER_WORK_MODE_RECORD_VIDEO);
@ -753,6 +810,17 @@ T_DjiReturnCode DjiTest_CameraManagerStartRecordVideo(E_DjiMountPosition positio
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);
/*!< start to take video */
USER_LOG_INFO("Mounted position %d camera start to record video.", position);
returnCode = DjiCameraManager_StartRecordVideo(position);
@ -797,7 +865,7 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
T_DjiCameraManagerFocusPosData focusPosData;
T_DjiCameraManagerTapZoomPosData tapZoomPosData;
USER_LOG_INFO("Camera manager sample start");
USER_LOG_INFO("Camera manager sample start, cameraManagerSampleSelect %d", cameraManagerSampleSelect);
DjiTest_WidgetLogAppend("Camera manager sample start");
USER_LOG_INFO("--> Step 1: Init camera manager module");
@ -835,8 +903,9 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
USER_LOG_INFO("--> Function a: Set camera shutter speed to 1/100 s");
DjiTest_WidgetLogAppend("--> Function a: Set camera shutter speed to 1/100 s");
if (cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_H20T ||
cameraType == DJI_CAMERA_TYPE_M30 || cameraType == DJI_CAMERA_TYPE_M30T ||
cameraType == DJI_CAMERA_TYPE_M3E || cameraType == DJI_CAMERA_TYPE_M3T) {
cameraType == DJI_CAMERA_TYPE_H20N || cameraType == DJI_CAMERA_TYPE_M30 ||
cameraType == DJI_CAMERA_TYPE_M30T || cameraType == DJI_CAMERA_TYPE_M3E ||
cameraType == DJI_CAMERA_TYPE_M3T) {
USER_LOG_INFO("Set mounted position %d camera's exposure mode to manual mode.",
mountPosition);
returnCode = DjiTest_CameraManagerSetExposureMode(mountPosition,
@ -872,9 +941,10 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_CAMERA_APERTURE: {
USER_LOG_INFO("--> Function b: Set camera aperture to 400(F/4)");
DjiTest_WidgetLogAppend("--> Function b: Set camera aperture to 400(F/4)");
if (cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_H20T
|| cameraType == DJI_CAMERA_TYPE_M30 || cameraType == DJI_CAMERA_TYPE_M30T
|| cameraType == DJI_CAMERA_TYPE_M3E || cameraType == DJI_CAMERA_TYPE_M3T) {
if (cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_H20N
|| cameraType == DJI_CAMERA_TYPE_H20T || cameraType == DJI_CAMERA_TYPE_M30
|| cameraType == DJI_CAMERA_TYPE_M30T || cameraType == DJI_CAMERA_TYPE_M3E
|| cameraType == DJI_CAMERA_TYPE_M3T) {
USER_LOG_INFO("Set mounted position %d camera's exposure mode to manual mode.",
mountPosition);
returnCode = DjiTest_CameraManagerSetExposureMode(mountPosition,
@ -1117,13 +1187,54 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
}
break;
}
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_DOWNLOAD_AND_DELETE_MEDIA_FILE:
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_DOWNLOAD_AND_DELETE_MEDIA_FILE: {
#ifdef SYSTEM_ARCH_LINUX
DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(mountPosition);
#else
USER_LOG_WARN("This feature does not support RTOS platform.");
#endif
break;
}
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_THERMOMETRY: {
returnCode = DjiTest_CameraManagerGetPointThermometryData(mountPosition);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Mounted position %d camera start point thermometry failed, error code: 0x%08X\r\n",
mountPosition, returnCode);
goto exitCameraModule;
}
returnCode = DjiTest_CameraManagerGetAreaThermometryData(mountPosition);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Mounted position %d camera start area thermometry failed, error code: 0x%08X\r\n",
mountPosition, returnCode);
goto exitCameraModule;
}
break;
}
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_GET_LIDAR_RANGING_INFO: {
returnCode = DjiTest_CameraManagerGetLidarRangingInfo(mountPosition);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_WARN("Get lidar ranging info failed at position %d, error code: 0x%08X\r\n",
mountPosition, returnCode);
}
break;
}
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_IR_CAMERA_ZOOM_PARAM: {
for (uint16_t factor = TEST_CAMERA_MIN_INFRARED_ZOOM_FACTOR;
factor <= TEST_CAMERA_MAX_INFRARED_ZOOM_FACTOR;
factor = factor * 2) {
USER_LOG_INFO("Set infrared zoom factor to %d", factor);
returnCode = DjiCameraManager_SetInfraredZoomParam(mountPosition, (dji_f32_t) factor);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Mounted position %d camera infrared zoom factor %d rfailed, error code: 0x%08X\r\n",
mountPosition, factor, returnCode);
goto exitCameraModule;
}
osalHandler->TaskSleepMs(2000);
}
break;
}
default: {
USER_LOG_ERROR("There is no valid command input!");
break;
@ -1160,8 +1271,8 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
T_DjiReturnCode returnCode;
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
uint16_t downloadCount = 0;
nextDownloadFileIndex = 0;
s_nextDownloadFileIndex = 0;
returnCode = DjiCameraManager_RegDownloadFileDataCallback(position, DjiTest_CameraManagerDownloadFileDataCallback);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Register download file data callback failed, error code: 0x%08X.", returnCode);
@ -1216,14 +1327,14 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
for (int i = 0; i < downloadCount; ++i) {
redownload:
if (i != nextDownloadFileIndex) {
i = nextDownloadFileIndex;
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);
nextDownloadFileIndex--;
s_nextDownloadFileIndex--;
goto redownload;
}
}
@ -1252,7 +1363,7 @@ static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownlo
if (packetInfo.downloadFileEvent == DJI_DOWNLOAD_FILE_EVENT_START) {
for (i = 0; i < s_meidaFileList.totalCount; ++i) {
if (s_meidaFileList.fileListInfo[i].fileIndex == packetInfo.fileIndex) {
nextDownloadFileIndex = i + 1;
s_nextDownloadFileIndex = i + 1;
break;
}
}
@ -1260,7 +1371,7 @@ static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownlo
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, nextDownloadFileIndex);
USER_LOG_INFO("Start download media file, index : %d, next download media file, index: %d", i, s_nextDownloadFileIndex);
s_downloadMediaFile = fopen(downloadFileName, "wb+");
if (s_downloadMediaFile == NULL) {
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
@ -1293,4 +1404,118 @@ static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownlo
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
static T_DjiReturnCode DjiTest_CameraManagerGetPointThermometryData(E_DjiMountPosition position)
{
T_DjiReturnCode djiStat;
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
T_DjiCameraManagerPointThermometryCoordinate pointCoordinate = {0};
T_DjiCameraManagerPointThermometryData pointThermometryData = {0};
USER_LOG_INFO("--> Step 1: Set point thermometry coordinate");
pointCoordinate.pointX = 0.5;
pointCoordinate.pointY = 0.5;
djiStat = DjiCameraManager_SetPointThermometryCoordinate(position, pointCoordinate);
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Set point thermometry coordinate failed, stat = 0x%08llX", djiStat);
return djiStat;
}
USER_LOG_INFO("--> Step 2: Get data of point thermometry");
for (int i = 0; i < 30; ++i) {
osalHandler->TaskSleepMs(1000 / CAMERA_MANAGER_SUBSCRIPTION_FREQ);
djiStat = DjiCameraManager_GetPointThermometryData(position, &pointThermometryData);
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Get data of point thermometry error.");
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
USER_LOG_INFO("received camera point thermometry data, point_x = %.2f, point_y = %.2f "
"point temperature = %.2f\r\n", pointThermometryData.pointX,
pointThermometryData.pointY, pointThermometryData.pointTemperature);
}
return djiStat;
}
static T_DjiReturnCode DjiTest_CameraManagerGetAreaThermometryData(E_DjiMountPosition position)
{
T_DjiReturnCode djiStat;
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
T_DjiCameraManagerAreaThermometryData areaThermometryData = {0};
T_DjiCameraManagerAreaThermometryCoordinate areaCoordinate = {0};
USER_LOG_INFO("--> Step 1: Set area thermometry coordinate");
areaCoordinate.areaTempLtX = 0.2;
areaCoordinate.areaTempLtY = 0.2;
areaCoordinate.areaTempRbX = 0.8;
areaCoordinate.areaTempRbY = 0.8;
djiStat = DjiCameraManager_SetAreaThermometryCoordinate(position, areaCoordinate);
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Set area coordinate failed, stat = 0x%08llX", djiStat);
return djiStat;
}
USER_LOG_INFO("--> Step 2: Get data of area thermometry");
for (int i = 0; i < 30; ++i) {
osalHandler->TaskSleepMs(1000 / CAMERA_MANAGER_SUBSCRIPTION_FREQ);
djiStat = DjiCameraManager_GetAreaThermometryData(position, &areaThermometryData);
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Get data of area thermometry error.");
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
USER_LOG_INFO("received camera area thermometry data, lt_point_x = %.2f, lt_point_y = %.2f "
"rb_point_x = %.2f, rb_point_y = %.2f, area min temperature = %.2f, area max temperature = %.2f, "
"area average temperature = %.2f\r\n", areaThermometryData.areaTempLtX,
areaThermometryData.areaTempLtY,
areaThermometryData.areaTempRbX, areaThermometryData.areaTempRbY, areaThermometryData.areaMinTemp,
areaThermometryData.areaMaxTemp, areaThermometryData.areaAveTemp);
USER_LOG_INFO("min temperature point_x = %.2f, min temperature point_y = %.2f, max temperature point_x = %.2f, "
"max temperature point_y = %.2f\r\n", areaThermometryData.areaMinTempPointX,
areaThermometryData.areaMinTempPointY,
areaThermometryData.areaMaxTempPointX, areaThermometryData.areaMaxTempPointY);
}
return djiStat;
}
static T_DjiReturnCode DjiTest_CameraManagerGetLidarRangingInfo(E_DjiMountPosition position)
{
T_DjiReturnCode returnCode = 0;
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
T_DjiCameraManagerLaserRangingInfo rangingInfo = {0};
for (int i = 0; i < 5; i++) {
osalHandler->TaskSleepMs(1000);
returnCode = DjiCameraManager_GetLaserRangingInfo(position, &rangingInfo);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Get mounted position %d laser ranging info failed, error code: 0x%08X.",
position, returnCode);
return returnCode;
}
USER_LOG_INFO(
"Receive lidar range info, lon:%.6f, lat:%.6f, alt:%.1f, dis:%d, enable:%d, exception:%d, x:%d, y:%d",
rangingInfo.longitude,
rangingInfo.latitude,
(float) rangingInfo.altitude / 10,
rangingInfo.distance,
rangingInfo.enable_lidar,
rangingInfo.exception,
rangingInfo.screenX,
rangingInfo.screenY);
}
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/

View File

@ -52,6 +52,10 @@ typedef enum {
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_INTERVAL_PHOTO,
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_RECORD_VIDEO,
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_DOWNLOAD_AND_DELETE_MEDIA_FILE,
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_THERMOMETRY,
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_GET_LIDAR_RANGING_INFO,
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_IR_CAMERA_ZOOM_PARAM,
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_INDEX_MAX
} E_DjiTestCameraManagerSampleSelect;
/* Exported functions --------------------------------------------------------*/

View File

@ -391,7 +391,7 @@ static void *UserGimbal_Task(void *arg)
NULL);
if (djiStat == DJI_ERROR_SUBSCRIPTION_MODULE_CODE_TOPIC_DUPLICATE) {
USER_LOG_DEBUG("Subscribe topic quaternion duplicate.");
} else {
} else if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Subscribe topic quaternion error.");
}

View File

@ -152,4 +152,5 @@ out:
/* Private functions definition-----------------------------------------------*/
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/

View File

@ -0,0 +1,76 @@
{
"version": {
"major": 1,
"minor": 0
},
"hms_database": {
"hms_position_desc": "负载%position_index",
"hms_error_code_list": [
{
"hms_error_code": "0x1E020000",
"hms_interface": {
"message_title": "HMS测试文案: 我是错误码标题0",
"message_content": "HMS测试文案: 我是错误码内容0"
},
"fpv_interface": {
"message_on_the_ground": "HMS测试文案: 我在地面发生了错误0",
"is_keep_history_on_the_ground": false,
"message_in_the_sky": "HMS测试文案: 我在空中发生了错误0",
"is_keep_history_in_the_sky": false
}
},
{
"hms_error_code": "0x1E020001",
"hms_interface": {
"message_title": "HMS测试文案: 我是错误码标题1",
"message_content": "HMS测试文案: 我是错误码内容1"
},
"fpv_interface": {
"message_on_the_ground": "HMS测试文案: 我在地面发生了错误1",
"is_keep_history_on_the_ground": false,
"message_in_the_sky": "HMS测试文案: 我在空中发生了错误1",
"is_keep_history_in_the_sky": false
}
},
{
"hms_error_code": "0x1E020002",
"hms_interface": {
"message_title": "HMS测试文案: 我是错误码标题2",
"message_content": "HMS测试文案: 我是错误码内容2"
},
"fpv_interface": {
"message_on_the_ground": "HMS测试文案: 我在地面发生了错误2",
"is_keep_history_on_the_ground": true,
"message_in_the_sky": "HMS测试文案: 我在空中发生了错误2",
"is_keep_history_in_the_sky": true
}
},
{
"hms_error_code": "0x1E020003",
"hms_interface": {
"message_title": "HMS测试文案: 我是错误码标题3",
"message_content": "HMS测试文案: 我是错误码内容3"
},
"fpv_interface": {
"message_on_the_ground": "HMS测试文案: 我在地面发生了错误3",
"is_keep_history_on_the_ground": true,
"message_in_the_sky": "HMS测试文案: 我在空中发生了错误3",
"is_keep_history_in_the_sky": true
}
},
{
"hms_error_code": "0x1E020004",
"hms_interface": {
"message_title": "HMS测试文案: 我是错误码标题4",
"message_content": "HMS测试文案: 我是错误码内容4"
},
"fpv_interface": {
"message_on_the_ground": "HMS测试文案: 我在地面发生了错误4",
"is_keep_history_on_the_ground": true,
"message_in_the_sky": "HMS测试文案: 我在空中发生了错误4",
"is_keep_history_in_the_sky": true
}
}
]
}
}

View File

@ -0,0 +1,76 @@
{
"version": {
"major": 1,
"minor": 0
},
"hms_database": {
"hms_position_desc": "Payload %position_index",
"hms_error_code_list": [
{
"hms_error_code": "0x1E020000",
"hms_interface": {
"message_title": "HMS test text: I am error code Title 0",
"message_content": "HMS test text: I am error code Content 0"
},
"fpv_interface": {
"message_on_the_ground": "HMS test text: I got error on the ground 0",
"is_keep_history_on_the_ground": false,
"message_in_the_sky": "HMS test text: I got error in the sky 0",
"is_keep_history_in_the_sky": false
}
},
{
"hms_error_code": "0x1E020001",
"hms_interface": {
"message_title": "HMS test text: I am error code Title 1",
"message_content": "HMS test text: I am error code Content 1"
},
"fpv_interface": {
"message_on_the_ground": "HMS test text: I got error on the ground 1",
"is_keep_history_on_the_ground": false,
"message_in_the_sky": "HMS test text: I got error in the sky 1",
"is_keep_history_in_the_sky": false
}
},
{
"hms_error_code": "0x1E020002",
"hms_interface": {
"message_title": "HMS test text: I am error code Title 2",
"message_content": "HMS test text: I am error code Content 2"
},
"fpv_interface": {
"message_on_the_ground": "HMS test text: I got error on the ground 2",
"is_keep_history_on_the_ground": true,
"message_in_the_sky": "HMS test text: I got error in the sky 2",
"is_keep_history_in_the_sky": true
}
},
{
"hms_error_code": "0x1E020003",
"hms_interface": {
"message_title": "HMS test text: I am error code Title 3",
"message_content": "HMS test text: I am error code Content 3"
},
"fpv_interface": {
"message_on_the_ground": "HMS test text: I got error on the ground 3",
"is_keep_history_on_the_ground": true,
"message_in_the_sky": "HMS test text: I got error in the sky 3",
"is_keep_history_in_the_sky": true
}
},
{
"hms_error_code": "0x1E020004",
"hms_interface": {
"message_title": "HMS test text: I am error code Title 4",
"message_content": "HMS test text: I am error code Content 4"
},
"fpv_interface": {
"message_on_the_ground": "HMS test text: I got error on the ground 4",
"is_keep_history_on_the_ground": true,
"message_in_the_sky": "HMS test text: I got error in the sky 4",
"is_keep_history_in_the_sky": true
}
}
]
}
}

View File

@ -0,0 +1,188 @@
/* Generated by file2c, do not edit manually */
#ifndef __hms_text_config_json_h_included
#define __hms_text_config_json_h_included
#include <stdint.h>
/* Contents of file hms_text_config.json */
#define hms_text_config_json_fileName "hms_text_config.json"
#define hms_text_config_json_fileSize 2783
static const uint8_t hms_text_config_json_fileBinaryArray[2783] = {
0x7B, 0x0A, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x22, 0x3A, 0x20, 0x7B,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x61, 0x6A, 0x6F, 0x72, 0x22, 0x3A, 0x20, 0x31, 0x2C,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x69, 0x6E, 0x6F, 0x72, 0x22, 0x3A, 0x20, 0x30, 0x0A,
0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x64, 0x61, 0x74, 0x61,
0x62, 0x61, 0x73, 0x65, 0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x6D,
0x73, 0x5F, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x5F, 0x64, 0x65, 0x73, 0x63, 0x22,
0x3A, 0x20, 0x22, 0x50, 0x61, 0x79, 0x6C, 0x6F, 0x61, 0x64, 0x20, 0x25, 0x70, 0x6F, 0x73, 0x69,
0x74, 0x69, 0x6F, 0x6E, 0x5F, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x63, 0x6F, 0x64, 0x65,
0x5F, 0x6C, 0x69, 0x73, 0x74, 0x22, 0x3A, 0x20, 0x5B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x65,
0x72, 0x72, 0x6F, 0x72, 0x5F, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x30, 0x78, 0x31,
0x45, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x22, 0x3A, 0x20,
0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20,
0x49, 0x20, 0x61, 0x6D, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x20,
0x54, 0x69, 0x74, 0x6C, 0x65, 0x20, 0x30, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x63, 0x6F, 0x6E,
0x74, 0x65, 0x6E, 0x74, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74,
0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x61, 0x6D, 0x20, 0x65, 0x72, 0x72, 0x6F,
0x72, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x20, 0x30,
0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x66, 0x70, 0x76, 0x5F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66,
0x61, 0x63, 0x65, 0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x6F, 0x6E, 0x5F, 0x74, 0x68,
0x65, 0x5F, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20,
0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x67, 0x6F, 0x74,
0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72,
0x6F, 0x75, 0x6E, 0x64, 0x20, 0x30, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x22, 0x69, 0x73, 0x5F, 0x6B, 0x65, 0x65, 0x70, 0x5F, 0x68, 0x69, 0x73, 0x74,
0x6F, 0x72, 0x79, 0x5F, 0x6F, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x67, 0x72, 0x6F, 0x75, 0x6E,
0x64, 0x22, 0x3A, 0x20, 0x66, 0x61, 0x6C, 0x73, 0x65, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x69, 0x6E,
0x5F, 0x74, 0x68, 0x65, 0x5F, 0x73, 0x6B, 0x79, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20,
0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x67, 0x6F, 0x74,
0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6B,
0x79, 0x20, 0x30, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x22, 0x69, 0x73, 0x5F, 0x6B, 0x65, 0x65, 0x70, 0x5F, 0x68, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79,
0x5F, 0x69, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x73, 0x6B, 0x79, 0x22, 0x3A, 0x20, 0x66, 0x61,
0x6C, 0x73, 0x65, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x65, 0x72, 0x72, 0x6F,
0x72, 0x5F, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x30, 0x78, 0x31, 0x45, 0x30, 0x32,
0x30, 0x30, 0x30, 0x31, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x68, 0x6D, 0x73, 0x5F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3A, 0x20,
0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x5F, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D,
0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x61,
0x6D, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x54, 0x69, 0x74,
0x6C, 0x65, 0x20, 0x31, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E,
0x74, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65,
0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x61, 0x6D, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x63,
0x6F, 0x64, 0x65, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x20, 0x31, 0x22, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x22, 0x66, 0x70, 0x76, 0x5F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x6F, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x67,
0x72, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73,
0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x67, 0x6F, 0x74, 0x20, 0x65, 0x72,
0x72, 0x6F, 0x72, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x6E,
0x64, 0x20, 0x31, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x22, 0x69, 0x73, 0x5F, 0x6B, 0x65, 0x65, 0x70, 0x5F, 0x68, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79,
0x5F, 0x6F, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x3A,
0x20, 0x66, 0x61, 0x6C, 0x73, 0x65, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x69, 0x6E, 0x5F, 0x74, 0x68,
0x65, 0x5F, 0x73, 0x6B, 0x79, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73,
0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x67, 0x6F, 0x74, 0x20, 0x65, 0x72,
0x72, 0x6F, 0x72, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6B, 0x79, 0x20, 0x31,
0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x73,
0x5F, 0x6B, 0x65, 0x65, 0x70, 0x5F, 0x68, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x5F, 0x69, 0x6E,
0x5F, 0x74, 0x68, 0x65, 0x5F, 0x73, 0x6B, 0x79, 0x22, 0x3A, 0x20, 0x66, 0x61, 0x6C, 0x73, 0x65,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x63,
0x6F, 0x64, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x30, 0x78, 0x31, 0x45, 0x30, 0x32, 0x30, 0x30, 0x30,
0x32, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x6D, 0x73,
0x5F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x5F, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74,
0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x61, 0x6D, 0x20, 0x65,
0x72, 0x72, 0x6F, 0x72, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x54, 0x69, 0x74, 0x6C, 0x65, 0x20,
0x32, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x22, 0x3A,
0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A,
0x20, 0x49, 0x20, 0x61, 0x6D, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x63, 0x6F, 0x64, 0x65,
0x20, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x20, 0x32, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x66, 0x70, 0x76, 0x5F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3A, 0x20,
0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x5F, 0x6F, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x67, 0x72, 0x6F, 0x75,
0x6E, 0x64, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74,
0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x67, 0x6F, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72,
0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x20, 0x32,
0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x73,
0x5F, 0x6B, 0x65, 0x65, 0x70, 0x5F, 0x68, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x5F, 0x6F, 0x6E,
0x5F, 0x74, 0x68, 0x65, 0x5F, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x3A, 0x20, 0x74, 0x72,
0x75, 0x65, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x69, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x73, 0x6B,
0x79, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65,
0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x67, 0x6F, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20,
0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6B, 0x79, 0x20, 0x32, 0x22, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x73, 0x5F, 0x6B, 0x65, 0x65,
0x70, 0x5F, 0x68, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x5F, 0x69, 0x6E, 0x5F, 0x74, 0x68, 0x65,
0x5F, 0x73, 0x6B, 0x79, 0x22, 0x3A, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x68, 0x6D, 0x73, 0x5F, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x5F, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A,
0x20, 0x22, 0x30, 0x78, 0x31, 0x45, 0x30, 0x32, 0x30, 0x30, 0x30, 0x33, 0x22, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x69, 0x6E, 0x74, 0x65,
0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x74, 0x69, 0x74,
0x6C, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74,
0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x61, 0x6D, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20,
0x63, 0x6F, 0x64, 0x65, 0x20, 0x54, 0x69, 0x74, 0x6C, 0x65, 0x20, 0x33, 0x22, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x5F, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53,
0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x61, 0x6D,
0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x43, 0x6F, 0x6E, 0x74,
0x65, 0x6E, 0x74, 0x20, 0x33, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D,
0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x66, 0x70, 0x76, 0x5F, 0x69,
0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F,
0x6F, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x3A, 0x20,
0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20,
0x49, 0x20, 0x67, 0x6F, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x6F, 0x6E, 0x20, 0x74,
0x68, 0x65, 0x20, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x20, 0x33, 0x22, 0x2C, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x73, 0x5F, 0x6B, 0x65, 0x65, 0x70,
0x5F, 0x68, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x5F, 0x6F, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F,
0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x3A, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x5F, 0x69, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x73, 0x6B, 0x79, 0x22, 0x3A, 0x20, 0x22,
0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49,
0x20, 0x67, 0x6F, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68,
0x65, 0x20, 0x73, 0x6B, 0x79, 0x20, 0x33, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x73, 0x5F, 0x6B, 0x65, 0x65, 0x70, 0x5F, 0x68, 0x69, 0x73,
0x74, 0x6F, 0x72, 0x79, 0x5F, 0x69, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x73, 0x6B, 0x79, 0x22,
0x3A, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x65,
0x72, 0x72, 0x6F, 0x72, 0x5F, 0x63, 0x6F, 0x64, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x30, 0x78, 0x31,
0x45, 0x30, 0x32, 0x30, 0x30, 0x30, 0x34, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x22, 0x68, 0x6D, 0x73, 0x5F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x22, 0x3A, 0x20,
0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20,
0x49, 0x20, 0x61, 0x6D, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x20,
0x54, 0x69, 0x74, 0x6C, 0x65, 0x20, 0x34, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x63, 0x6F, 0x6E,
0x74, 0x65, 0x6E, 0x74, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74, 0x65, 0x73, 0x74,
0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x61, 0x6D, 0x20, 0x65, 0x72, 0x72, 0x6F,
0x72, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x20, 0x34,
0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x66, 0x70, 0x76, 0x5F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66,
0x61, 0x63, 0x65, 0x22, 0x3A, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x6F, 0x6E, 0x5F, 0x74, 0x68,
0x65, 0x5F, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20,
0x74, 0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x67, 0x6F, 0x74,
0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72,
0x6F, 0x75, 0x6E, 0x64, 0x20, 0x34, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x22, 0x69, 0x73, 0x5F, 0x6B, 0x65, 0x65, 0x70, 0x5F, 0x68, 0x69, 0x73, 0x74,
0x6F, 0x72, 0x79, 0x5F, 0x6F, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x67, 0x72, 0x6F, 0x75, 0x6E,
0x64, 0x22, 0x3A, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5F, 0x69, 0x6E, 0x5F,
0x74, 0x68, 0x65, 0x5F, 0x73, 0x6B, 0x79, 0x22, 0x3A, 0x20, 0x22, 0x48, 0x4D, 0x53, 0x20, 0x74,
0x65, 0x73, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3A, 0x20, 0x49, 0x20, 0x67, 0x6F, 0x74, 0x20,
0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6B, 0x79,
0x20, 0x34, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x69, 0x73, 0x5F, 0x6B, 0x65, 0x65, 0x70, 0x5F, 0x68, 0x69, 0x73, 0x74, 0x6F, 0x72, 0x79, 0x5F,
0x69, 0x6E, 0x5F, 0x74, 0x68, 0x65, 0x5F, 0x73, 0x6B, 0x79, 0x22, 0x3A, 0x20, 0x74, 0x72, 0x75,
0x65, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x5D, 0x0A, 0x20, 0x20, 0x7D, 0x0A, 0x7D
};
#endif /* __hms_text_config_json_h_included */

View File

@ -24,25 +24,34 @@
/* Includes ------------------------------------------------------------------*/
#include <widget_interaction_test/test_widget_interaction.h>
#include <utils/util_misc.h>
#include "test_hms.h"
#include "dji_hms.h"
#include "dji_hms_info_table.h"
#include "dji_logger.h"
#include "dji_platform.h"
#include "dji_fc_subscription.h"
#include "hms_text_c/en/hms_text_config_json.h"
/* Private constants ---------------------------------------------------------*/
#define MAX_HMS_PRINT_COUNT 150
#define MAX_BUFFER_LEN 256
#define MIN_HMS_ERROR_LEVEL 0
#define MID_HMS_ERROR_LEVEL 3
#define MAX_HMS_ERROR_LEVEL 6
#define MAX_HMS_PRINT_COUNT (150)
#define MAX_BUFFER_LEN (256)
#define MIN_HMS_ERROR_LEVEL (0)
#define MID_HMS_ERROR_LEVEL (3)
#define MAX_HMS_ERROR_LEVEL (6)
#define HMS_DIR_PATH_LEN_MAX (256)
#define DJI_CUSTOM_HMS_CODE_INJECT_ON (0)
/* Private types -------------------------------------------------------------*/
/* Private values -------------------------------------------------------------*/
static const char *oldReplaceAlarmIdStr = "%alarmid";
static const char *oldReplaceIndexStr = "%index";
static const char *oldReplaceComponentIndexStr = "%component_index";
static T_DjiHmsFileBinaryArray s_EnHmsTextConfigFileBinaryArrayList[] = {
{hms_text_config_json_fileName, hms_text_config_json_fileSize, hms_text_config_json_fileBinaryArray},
};
/* Private functions declaration ---------------------------------------------*/
static T_DjiReturnCode DjiTest_HmsInit(void);
@ -94,6 +103,75 @@ out:
return returnCode;
}
T_DjiReturnCode DjiTest_HmsStartService(void)
{
T_DjiReturnCode returnCode;
#ifdef SYSTEM_ARCH_LINUX
char curFileDirPath[HMS_DIR_PATH_LEN_MAX];
char tempPath[HMS_DIR_PATH_LEN_MAX];
#endif
returnCode = DjiHms_Init();
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Hms init error, error code:0x%08llX", returnCode);
return returnCode;
}
#ifdef SYSTEM_ARCH_LINUX
//Step 2 : Set hms text Config (Linux environment)
returnCode = DjiUserUtil_GetCurrentFileDirPath(__FILE__, HMS_DIR_PATH_LEN_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(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/en", curFileDirPath);
//set default hms text config path
returnCode = DjiHms_RegDefaultHmsTextConfigByDirPath(tempPath);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Add default hms text config error, stat = 0x%08llX", returnCode);
return returnCode;
}
//set hms text config for English language
returnCode = DjiHms_RegHmsTextConfigByDirPath(DJI_MOBILE_APP_LANGUAGE_ENGLISH,
tempPath);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Add hms text config error, stat = 0x%08llX", returnCode);
return returnCode;
}
//set hms text config for Chinese language
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/cn", curFileDirPath);
returnCode = DjiHms_RegHmsTextConfigByDirPath(DJI_MOBILE_APP_LANGUAGE_CHINESE,
tempPath);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Add hms text config error, stat = 0x%08llX", returnCode);
return returnCode;
}
#else
//Step 2 : Set hms text Config (RTOS environment)
T_DjiHmsBinaryArrayConfig enHmsTextBinaryArrayConfig = {
.binaryArrayCount = sizeof(s_EnHmsTextConfigFileBinaryArrayList) / sizeof(T_DjiHmsFileBinaryArray),
.fileBinaryArrayList = s_EnHmsTextConfigFileBinaryArrayList
};
//set default hms text config
returnCode = DjiHms_RegDefaultHmsTextConfigByBinaryArray(&enHmsTextBinaryArrayConfig);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Add default hms text config error, stat = 0x%08llX", returnCode);
return returnCode;
}
#endif
#if DJI_CUSTOM_HMS_CODE_INJECT_ON
DjiHms_InjectHmsErrorCode(0x1E020000, DJI_HMS_ERROR_LEVEL_FATAL);
#endif
return returnCode;
}
/* Private functions definition-----------------------------------------------*/
static T_DjiReturnCode DjiTest_HmsInit(void)
{
@ -134,17 +212,17 @@ static T_DjiReturnCode DjiTest_HmsDeInit(void)
static T_DjiFcSubscriptionFlightStatus DjiTest_GetValueOfFlightStatus(void)
{
T_DjiReturnCode djiStat;
T_DjiReturnCode returnCode;
T_DjiFcSubscriptionFlightStatus flightStatus;
T_DjiDataTimestamp flightStatusTimestamp = {0};
djiStat = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
(uint8_t *) &flightStatus,
sizeof(T_DjiFcSubscriptionFlightStatus),
&flightStatusTimestamp);
returnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
(uint8_t *) &flightStatus,
sizeof(T_DjiFcSubscriptionFlightStatus),
&flightStatusTimestamp);
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Get value of topic flight status failed, error code:0x%08llX", djiStat);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Get value of topic flight status failed, error code:0x%08llX", returnCode);
flightStatus = 0;
} else {
USER_LOG_DEBUG("Timestamp: millisecond %u microsecond %u.", flightStatusTimestamp.millisecond,
@ -184,7 +262,6 @@ static bool DjiTest_ReplaceStr(char *buffer, uint32_t bufferMaxLen, const char *
return true;
}
static bool DjiTest_MarchErrCodeInfoTable(T_DjiHmsInfoTable hmsInfoTable)
{
char alarmIdStr[20] = {0};

View File

@ -40,6 +40,7 @@ extern "C" {
/* Exported functions --------------------------------------------------------*/
T_DjiReturnCode DjiTest_HmsRunSample(void);
T_DjiReturnCode DjiTest_HmsStartService(void);
#ifdef __cplusplus
}

View File

@ -33,8 +33,11 @@
#include "time.h"
/* Private constants ---------------------------------------------------------*/
#define TEST_LIVEVIEW_STREAM_FILE_PATH_STR_MAX_SIZE 256
#define TEST_LIVEVIEW_STREAM_STROING_TIME_IN_SECONDS 20
#define TEST_LIVEVIEW_STREAM_FILE_PATH_STR_MAX_SIZE 256
#define TEST_LIVEVIEW_STREAM_STROING_TIME_IN_SECONDS 20
#define TEST_LIVEVIEW_STREAM_REQUEST_I_FRAME_ON 1
#define TEST_LIVEVIEW_STREAM_REQUEST_I_FRAME_TICK_IN_SECONDS 5
/* Private types -------------------------------------------------------------*/
@ -109,15 +112,25 @@ T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition)
for (int i = 0; i < TEST_LIVEVIEW_STREAM_STROING_TIME_IN_SECONDS; ++i) {
USER_LOG_INFO("Storing camera h264 stream, second: %d.", i + 1);
#if TEST_LIVEVIEW_STREAM_REQUEST_I_FRAME_ON
if (i % TEST_LIVEVIEW_STREAM_REQUEST_I_FRAME_TICK_IN_SECONDS == 0) {
returnCode = DjiLiveview_RequestIntraframeFrameData((E_DjiLiveViewCameraPosition) mountPosition,
DJI_LIVEVIEW_CAMERA_SOURCE_DEFAULT);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Request stream I frame of payload %d failed, error code: 0x%08X", mountPosition,
returnCode);
}
}
#endif
osalHandler->TaskSleepMs(1000);
}
USER_LOG_INFO("--> Step 3: Stop h264 stream of the fpv and selected payload\r\n");
DjiTest_WidgetLogAppend("--> Step 3: Stop h264 stream of the fpv and selected payload");
if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3E) {
//TODO: how to use on M3E
} else if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3T) {
//TODO: how to use on M3T
} else {
returnCode = DjiLiveview_StopH264Stream(DJI_LIVEVIEW_CAMERA_POSITION_FPV, DJI_LIVEVIEW_CAMERA_SOURCE_DEFAULT);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
@ -157,7 +170,7 @@ T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition)
}
returnCode = DjiLiveview_StopH264Stream((E_DjiLiveViewCameraPosition) mountPosition,
DJI_LIVEVIEW_CAMERA_SOURCE_DEFAULT);
DJI_LIVEVIEW_CAMERA_SOURCE_M3T_IR);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Request to stop h264 of payload %d failed, error code: 0x%08X", mountPosition, returnCode);
goto out;

View File

@ -39,7 +39,8 @@
static T_DjiWaypointV3MissionState s_lastWaypointV3MissionState = {0};
/* Private functions declaration ---------------------------------------------*/
static T_DjiReturnCode DjiTest_WaypointV3StateCallback(T_DjiWaypointV3MissionState missionState);
static T_DjiReturnCode DjiTest_WaypointV3MissionStateCallback(T_DjiWaypointV3MissionState missionState);
static T_DjiReturnCode DjiTest_WaypointV3ActionStateCallback(T_DjiWaypointV3ActionState actionState);
/* Exported functions definition ---------------------------------------------*/
T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
@ -47,7 +48,7 @@ T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
T_DjiReturnCode returnCode;
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
#ifdef SYSTEM_ARCH_LINUX
FILE *kmzFile;
FILE *kmzFile = NULL;
uint32_t kmzFileSize = 0;
uint8_t *kmzFileBuf;
uint16_t readLen;
@ -60,12 +61,18 @@ T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
return returnCode;
}
returnCode = DjiWaypointV3_RegMissionStateCallback(DjiTest_WaypointV3StateCallback);
returnCode = DjiWaypointV3_RegMissionStateCallback(DjiTest_WaypointV3MissionStateCallback);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Register waypoint v3 state callback failed.");
goto out;
}
returnCode = DjiWaypointV3_RegActionStateCallback(DjiTest_WaypointV3ActionStateCallback);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Register waypoint v3 action state callback failed.");
goto out;
}
returnCode = DjiUserUtil_GetCurrentFileDirPath(__FILE__, DJI_TEST_WAYPOINT_V3_KMZ_FILE_PATH_LEN_MAX,
curFileDirPath);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
@ -113,8 +120,8 @@ T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
returnCode = DjiWaypointV3_UploadKmzFile(waypoint_v3_test_file_kmz_fileBinaryArray,
waypoint_v3_test_file_kmz_fileSize);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Upload kmz file failed.");
goto out;
USER_LOG_ERROR("Upload kmz file binary array failed.");
return returnCode;
}
#endif
@ -125,14 +132,24 @@ T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
goto out;
}
#ifdef SYSTEM_ARCH_LINUX
fclose(kmzFile);
#endif
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
out:
#ifdef SYSTEM_ARCH_LINUX
if (kmzFile != NULL) {
fclose(kmzFile);
}
#endif
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
/* Private functions definition-----------------------------------------------*/
static T_DjiReturnCode DjiTest_WaypointV3StateCallback(T_DjiWaypointV3MissionState missionState)
static T_DjiReturnCode DjiTest_WaypointV3MissionStateCallback(T_DjiWaypointV3MissionState missionState)
{
if (s_lastWaypointV3MissionState.state == missionState.state
&& s_lastWaypointV3MissionState.currentWaypointIndex == missionState.currentWaypointIndex
@ -147,4 +164,16 @@ static T_DjiReturnCode DjiTest_WaypointV3StateCallback(T_DjiWaypointV3MissionSta
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
static T_DjiReturnCode DjiTest_WaypointV3ActionStateCallback(T_DjiWaypointV3ActionState actionState)
{
USER_LOG_INFO(
"Waypoint v3 action state: %d, current waypoint index: %d, wayLine id: %d, action group: %d, action id: %d",
actionState.state,
actionState.currentWaypointIndex, actionState.wayLineId,
actionState.actionGroupId, actionState.actionId);
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/

View File

@ -6,209 +6,250 @@
/* Contents of file waypoint_v3_test_file.kmz */
#define waypoint_v3_test_file_kmz_fileName "waypoint_v3_test_file.kmz"
#define waypoint_v3_test_file_kmz_fileSize 3186
#define waypoint_v3_test_file_kmz_fileSize 3856
static const uint8_t waypoint_v3_test_file_kmz_fileBinaryArray[3186] = {
0x50, 0x4B, 0x03, 0x04, 0x14, 0x00, 0x08, 0x08, 0x08, 0x00, 0x22, 0x6D, 0x34, 0x55, 0x00, 0x00,
static const uint8_t waypoint_v3_test_file_kmz_fileBinaryArray[3856] = {
0x50, 0x4B, 0x03, 0x04, 0x14, 0x00, 0x08, 0x08, 0x08, 0x00, 0x8A, 0x81, 0x3E, 0x56, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x77, 0x70,
0x6D, 0x7A, 0x2F, 0x74, 0x65, 0x6D, 0x70, 0x6C, 0x61, 0x74, 0x65, 0x2E, 0x6B, 0x6D, 0x6C, 0xED,
0x5B, 0x4D, 0x8F, 0xDB, 0x36, 0x10, 0xBD, 0xE7, 0x57, 0x08, 0x3E, 0xB5, 0x40, 0x6A, 0x53, 0xDF,
0x52, 0xE0, 0x38, 0xD8, 0x6E, 0x3E, 0x76, 0x91, 0x4D, 0x63, 0xC4, 0x4E, 0xF7, 0x58, 0x30, 0x32,
0x6D, 0xB3, 0x2B, 0x91, 0x86, 0x44, 0xAD, 0xD7, 0x3D, 0x05, 0x28, 0x52, 0xB4, 0x40, 0x4E, 0x2D,
0x8A, 0x1E, 0x8A, 0x1E, 0x52, 0xA0, 0x40, 0x4F, 0xBD, 0x34, 0xC7, 0xB4, 0xFF, 0x66, 0x83, 0xF4,
0x5F, 0x94, 0x92, 0x25, 0x59, 0x94, 0xE8, 0x4D, 0x10, 0x05, 0xD8, 0xAC, 0x6D, 0x9F, 0x2C, 0xCE,
0x7B, 0x43, 0xCD, 0xCC, 0x23, 0x25, 0x0F, 0xE1, 0xEE, 0xAD, 0xB3, 0xC0, 0x57, 0x4E, 0x51, 0x18,
0x61, 0x4A, 0x6E, 0xB6, 0xD4, 0x36, 0x68, 0x29, 0x88, 0x78, 0x74, 0x84, 0xC9, 0xE4, 0x66, 0xEB,
0xF1, 0xF0, 0xEE, 0x67, 0x4E, 0xEB, 0x56, 0xEF, 0x5A, 0xF7, 0x84, 0xA3, 0x38, 0x92, 0x44, 0x37,
0x5B, 0x53, 0xC6, 0x66, 0x37, 0x3A, 0x9D, 0xF9, 0x7C, 0xDE, 0xA6, 0x33, 0x44, 0x26, 0x38, 0x6A,
0x13, 0xC4, 0x3A, 0x1C, 0xD1, 0xD1, 0xDA, 0x5A, 0x6B, 0x09, 0xBB, 0x31, 0x9F, 0x05, 0xBE, 0x80,
0x1D, 0x7D, 0x8D, 0xDB, 0x1E, 0x0D, 0x3A, 0xDC, 0xF0, 0x4D, 0x87, 0xCF, 0xD3, 0x56, 0x5B, 0xBD,
0x6B, 0x8A, 0xD2, 0xBD, 0x4D, 0xBD, 0x38, 0x40, 0x84, 0x25, 0x17, 0xFC, 0x32, 0xE1, 0xDD, 0xF0,
0x42, 0x04, 0x19, 0x1A, 0xE2, 0x00, 0xF5, 0x54, 0xCB, 0xD2, 0x2D, 0x53, 0xD3, 0x55, 0x4B, 0x07,
0x66, 0xB7, 0x53, 0x35, 0x97, 0x48, 0xF1, 0x6C, 0x54, 0x21, 0x19, 0x86, 0x6B, 0x59, 0x76, 0x46,
0x2A, 0x99, 0x4B, 0xA4, 0x00, 0x47, 0x49, 0xE4, 0xFB, 0x94, 0x8C, 0xF1, 0x64, 0x69, 0xC8, 0x4D,
0x63, 0x7F, 0x31, 0xA4, 0xC7, 0x70, 0xE1, 0x63, 0x82, 0x1E, 0xD0, 0x11, 0xEA, 0x45, 0x70, 0x8C,
0xFC, 0x45, 0xE6, 0xAE, 0x66, 0x15, 0xB9, 0x98, 0xE0, 0x68, 0xBA, 0xE7, 0x31, 0xEE, 0xBB, 0x37,
0xA1, 0x07, 0x34, 0x40, 0x39, 0xAF, 0x6C, 0x11, 0x38, 0xE8, 0x0C, 0xB3, 0x87, 0xE4, 0xD1, 0xFE,
0x11, 0x8D, 0x58, 0x0F, 0x9D, 0x21, 0x2F, 0x66, 0x28, 0xF9, 0xBE, 0xC4, 0x66, 0x74, 0x01, 0x54,
0xA1, 0xA7, 0x8C, 0xA5, 0xA9, 0x98, 0xF9, 0x73, 0xE8, 0x9D, 0x14, 0xD4, 0x3A, 0x40, 0xF0, 0xC0,
0xE0, 0x09, 0x7A, 0x38, 0x1E, 0x0F, 0x38, 0x2C, 0xC4, 0x6C, 0x71, 0x80, 0xF0, 0x64, 0xCA, 0x7A,
0x1A, 0xC8, 0xF8, 0x72, 0xB3, 0xE0, 0x61, 0xE2, 0xD3, 0x27, 0xD0, 0x1F, 0x86, 0x90, 0x44, 0x38,
0xF1, 0x0F, 0xFD, 0xC1, 0x0C, 0xA1, 0x51, 0x2F, 0x2F, 0xDC, 0x3A, 0xBB, 0xE0, 0x64, 0x14, 0x52,
0x82, 0x0E, 0xC9, 0x98, 0xE6, 0xC3, 0x82, 0xE1, 0x0E, 0x89, 0x83, 0x2F, 0xA1, 0x1F, 0xA3, 0x9E,
0x9D, 0x57, 0xB6, 0x32, 0x2E, 0x63, 0x0D, 0xE2, 0x27, 0x2B, 0x00, 0x28, 0xF3, 0x04, 0x4B, 0x7E,
0x1F, 0x1D, 0xF9, 0x8D, 0x2C, 0x1D, 0xCE, 0x78, 0xD1, 0x29, 0x1C, 0xC9, 0xEE, 0x30, 0x33, 0xAD,
0x1C, 0x5A, 0x56, 0xE6, 0xAB, 0x66, 0x91, 0x33, 0xA5, 0xF7, 0x29, 0xB3, 0xC9, 0xE9, 0x7D, 0xBA,
0xCC, 0xEB, 0x21, 0x19, 0xA1, 0xB3, 0x2A, 0x5F, 0x34, 0x8A, 0xA1, 0x4A, 0x62, 0x7A, 0x8F, 0x60,
0x4D, 0x53, 0x37, 0x2E, 0x31, 0x5E, 0xED, 0x1D, 0xE2, 0x2D, 0x76, 0x98, 0x38, 0x62, 0x34, 0xE8,
0x2F, 0x91, 0x5F, 0x40, 0xBE, 0x29, 0xF4, 0x07, 0xB7, 0xEF, 0x7F, 0xB5, 0xD7, 0xEF, 0xEF, 0x1D,
0x1D, 0xEE, 0x0D, 0xF2, 0x8D, 0xA6, 0x86, 0xAA, 0xB8, 0x19, 0x53, 0x0F, 0xFA, 0x47, 0x7C, 0x13,
0x64, 0xD3, 0xE2, 0xF6, 0xCB, 0x63, 0x15, 0x78, 0x84, 0x48, 0x44, 0xC3, 0x83, 0x02, 0x9A, 0x5F,
0x4B, 0x61, 0xC7, 0x15, 0xD8, 0x71, 0x15, 0x86, 0x03, 0x38, 0x41, 0x2B, 0x67, 0xD9, 0xA5, 0x0C,
0x74, 0x2C, 0x82, 0x6A, 0x9E, 0x02, 0x4C, 0x06, 0x53, 0x4A, 0xD9, 0x21, 0x61, 0x28, 0x3C, 0x85,
0x7E, 0x01, 0xAF, 0x19, 0x2E, 0x4A, 0xE3, 0x72, 0x4F, 0x11, 0xA5, 0x22, 0x02, 0x97, 0x88, 0xE1,
0x62, 0xC6, 0xB7, 0x68, 0x21, 0xC5, 0x25, 0xC3, 0x85, 0xD4, 0xB4, 0x06, 0xAF, 0x9F, 0xFF, 0xF0,
0xDF, 0x8F, 0x7F, 0x49, 0xF8, 0x62, 0x85, 0x64, 0xFC, 0x07, 0x98, 0xF4, 0x61, 0x08, 0x2B, 0x82,
0x5B, 0x8F, 0xB8, 0xD8, 0x19, 0x3C, 0x7B, 0x9B, 0x33, 0x01, 0x71, 0xA1, 0x33, 0x71, 0xC9, 0xD6,
0x2D, 0xAB, 0xC4, 0x4B, 0xA4, 0x29, 0xCB, 0x7C, 0xD3, 0x02, 0x19, 0xEF, 0x5F, 0xA0, 0xF3, 0xEF,
0x7F, 0x79, 0xF3, 0xE2, 0xCF, 0x8D, 0x2C, 0x90, 0x4C, 0xB6, 0x97, 0x54, 0x20, 0xAD, 0x41, 0x81,
0x5E, 0x3D, 0x3D, 0x7F, 0xF6, 0xF7, 0x46, 0x16, 0x48, 0x96, 0x95, 0x4B, 0x2A, 0x90, 0xFE, 0xFE,
0x05, 0x7A, 0xF3, 0xFC, 0xDB, 0xF3, 0x5F, 0x5F, 0xBE, 0xFE, 0xED, 0xC5, 0x07, 0xA8, 0x91, 0x0A,
0x3E, 0xBE, 0x2A, 0xC9, 0x52, 0x73, 0x49, 0x55, 0x6A, 0xFC, 0x20, 0x52, 0x64, 0x3B, 0xE5, 0xD5,
0x5F, 0x48, 0xB2, 0xA8, 0xAE, 0xF0, 0x42, 0x52, 0xCC, 0x0D, 0x5D, 0x4A, 0xB2, 0xB8, 0x2E, 0xA9,
0x4E, 0xB2, 0x5B, 0x79, 0xD7, 0xA5, 0xF4, 0xF3, 0xCB, 0xF3, 0x7F, 0x7E, 0x3F, 0x7F, 0xFA, 0xEA,
0xCD, 0xBF, 0x3F, 0x9D, 0x3F, 0xFB, 0xE3, 0xF5, 0x8B, 0xEF, 0x14, 0x6B, 0x23, 0x97, 0x95, 0x2C,
0xAA, 0xAB, 0xF7, 0x02, 0xF1, 0x98, 0xF8, 0xD4, 0x3B, 0x51, 0xC6, 0x7E, 0xD2, 0x03, 0x50, 0x3C,
0x4A, 0x58, 0x48, 0x7D, 0x25, 0x44, 0x11, 0x0B, 0x71, 0x8A, 0x8A, 0x94, 0x4F, 0xF8, 0x4F, 0x7B,
0x0F, 0x43, 0x5F, 0x81, 0x8C, 0x21, 0x92, 0x8C, 0x7D, 0xBA, 0x91, 0x05, 0xB5, 0x3F, 0x9E, 0x82,
0x36, 0x78, 0x65, 0xEF, 0xFB, 0x08, 0x46, 0x48, 0x19, 0x20, 0x1F, 0x79, 0x4C, 0xC9, 0x26, 0x57,
0xD2, 0x38, 0x36, 0xB2, 0x6A, 0xCE, 0x06, 0x56, 0x6D, 0x00, 0x83, 0x99, 0x8F, 0x36, 0xB2, 0x5C,
0xEE, 0xC7, 0x53, 0xAE, 0x06, 0xEF, 0x8B, 0x8F, 0x62, 0xB2, 0x91, 0xD5, 0x51, 0x3F, 0x58, 0xDB,
0x62, 0x5D, 0x3B, 0xB2, 0x68, 0x47, 0xD5, 0xBA, 0xF5, 0xDD, 0xBB, 0xD4, 0x1F, 0xA1, 0xB0, 0xD2,
0xC9, 0x46, 0x7C, 0x25, 0x24, 0xDD, 0xFE, 0xA4, 0x2E, 0x73, 0xB8, 0x98, 0x51, 0x4C, 0x58, 0xDE,
0xC6, 0x2E, 0xDB, 0xA4, 0xAC, 0xC3, 0x51, 0x91, 0x96, 0xD2, 0x90, 0x00, 0x9D, 0x2F, 0x1B, 0xFF,
0xFB, 0x94, 0x86, 0x23, 0x4C, 0x38, 0x60, 0xB0, 0x88, 0xD2, 0x9C, 0xD5, 0x74, 0x56, 0x20, 0xD2,
0x43, 0x82, 0xE3, 0x7B, 0x03, 0xA7, 0x58, 0xEF, 0xA2, 0xA9, 0x42, 0x9C, 0xA6, 0xED, 0xF5, 0xD4,
0x12, 0x22, 0x7E, 0x0B, 0xF8, 0x14, 0x0D, 0xE9, 0x80, 0xC1, 0x90, 0xF5, 0x4B, 0xC1, 0x94, 0x50,
0xD5, 0x0E, 0x69, 0xD6, 0xFD, 0xC4, 0x64, 0x92, 0x46, 0x7A, 0xAF, 0x9F, 0x37, 0x35, 0xAB, 0x16,
0x31, 0xF5, 0x6F, 0x8D, 0x6C, 0xE9, 0x1E, 0xC6, 0x8C, 0xDE, 0x4D, 0x9F, 0xFE, 0x62, 0x87, 0xBF,
0x3A, 0x2E, 0x39, 0x1E, 0xC8, 0x0E, 0x0E, 0x56, 0xEF, 0xD2, 0xC2, 0xB0, 0x40, 0xF0, 0xA0, 0x8F,
0x97, 0xDE, 0xEE, 0x10, 0xF8, 0xC4, 0x2F, 0xC9, 0xB5, 0x6A, 0x10, 0xE7, 0xC1, 0x01, 0x77, 0xD8,
0xC7, 0xCC, 0x9B, 0xA6, 0xA9, 0x09, 0x20, 0x89, 0xA1, 0x9F, 0xCF, 0x56, 0x31, 0x4A, 0xEE, 0xF0,
0x38, 0x53, 0xCC, 0x01, 0x82, 0xC9, 0x39, 0x98, 0xB4, 0xB0, 0x73, 0x11, 0x93, 0xBA, 0x1A, 0x53,
0xDF, 0xA7, 0xF3, 0xEC, 0x50, 0x68, 0x95, 0xCF, 0x1A, 0xEE, 0x62, 0x57, 0x7B, 0x64, 0x52, 0x8A,
0x54, 0x6A, 0x5C, 0xE3, 0x80, 0x2B, 0x23, 0x15, 0x47, 0x0F, 0xB4, 0x41, 0xFA, 0xB9, 0x5E, 0xFB,
0x52, 0xF1, 0x5A, 0x30, 0x44, 0x11, 0xBC, 0x3D, 0x0D, 0xB2, 0x74, 0x0D, 0xE3, 0x90, 0xA4, 0xF1,
0x31, 0x9A, 0x3A, 0xDD, 0x23, 0xA3, 0x01, 0xA3, 0xB3, 0x63, 0xCC, 0xA6, 0xB7, 0x71, 0x94, 0xBC,
0x24, 0x62, 0x12, 0x63, 0xB6, 0xD8, 0x8F, 0xC3, 0x53, 0xC8, 0xE2, 0x10, 0x49, 0x67, 0x2B, 0xBC,
0x48, 0x66, 0x7A, 0x1C, 0xA1, 0x01, 0x0B, 0x61, 0x52, 0xF7, 0x23, 0x9E, 0xE2, 0x62, 0x2F, 0x96,
0x5B, 0x73, 0x07, 0x7D, 0x1F, 0x7A, 0x28, 0x80, 0xE1, 0x49, 0x29, 0x6F, 0x42, 0xD4, 0xE9, 0xC8,
0x6A, 0x39, 0x46, 0xE5, 0x71, 0x45, 0x51, 0x55, 0xBD, 0xED, 0xEA, 0x36, 0xD0, 0x4C, 0xC3, 0x35,
0x00, 0xB0, 0xAF, 0x6B, 0x5A, 0xDB, 0xB4, 0x5D, 0xCB, 0xB1, 0x55, 0x5D, 0x35, 0x1D, 0xC3, 0x29,
0x7B, 0xE9, 0x48, 0xDD, 0x74, 0x3B, 0x95, 0xF9, 0xB2, 0xDE, 0xBC, 0xD0, 0xF3, 0xC5, 0xB2, 0x73,
0x0A, 0xE4, 0xFB, 0x78, 0x16, 0x51, 0x3C, 0xAA, 0xAD, 0x9A, 0xAA, 0x45, 0xBA, 0x7F, 0x94, 0xF0,
0x53, 0x29, 0x2C, 0x8E, 0xD0, 0x3D, 0x61, 0x55, 0xE6, 0xA7, 0xA5, 0x95, 0xF1, 0x75, 0xB4, 0xE5,
0x2A, 0xAF, 0xB1, 0x84, 0xC5, 0x2F, 0x99, 0xAB, 0x24, 0x28, 0xC9, 0x8C, 0xEB, 0x57, 0x5D, 0x01,
0x4A, 0x54, 0xB2, 0x86, 0xBF, 0x32, 0xD5, 0xC9, 0x82, 0x3E, 0xC0, 0x8A, 0x29, 0xD5, 0x4D, 0xA7,
0x26, 0x9C, 0x0F, 0x23, 0x25, 0xCB, 0x35, 0x5D, 0x9B, 0x7F, 0x4C, 0x23, 0x95, 0x92, 0x03, 0x5C,
0x1D, 0xE8, 0x8E, 0x69, 0x58, 0x86, 0xD1, 0x50, 0x4A, 0xEA, 0x4E, 0x4A, 0xDB, 0x25, 0x25, 0x5B,
0x77, 0x1C, 0x43, 0xB3, 0x55, 0xC7, 0x2E, 0xA4, 0x64, 0x3A, 0x9A, 0x6A, 0x58, 0x5A, 0xD3, 0x5D,
0x49, 0xDB, 0x49, 0x69, 0xCB, 0xA4, 0x64, 0x00, 0xD5, 0x05, 0xC0, 0x70, 0xF2, 0x07, 0x5C, 0xF2,
0xC4, 0xB3, 0x0C, 0x0B, 0x80, 0xA6, 0x52, 0xD2, 0x77, 0x52, 0xDA, 0x32, 0x29, 0x39, 0xB6, 0x06,
0x2C, 0x53, 0xB7, 0xAC, 0x5C, 0x4A, 0x1A, 0xD0, 0xB9, 0x8E, 0x34, 0x53, 0x6D, 0x28, 0x25, 0x63,
0x27, 0xA5, 0x2D, 0x93, 0x92, 0xED, 0x02, 0xCD, 0x76, 0xF4, 0xFC, 0xF1, 0x66, 0xAA, 0x5C, 0x4A,
0x06, 0x7F, 0x13, 0x6F, 0x28, 0x24, 0x73, 0x27, 0xA4, 0xED, 0x12, 0x92, 0xA3, 0xDB, 0x1A, 0x57,
0x8F, 0x69, 0x16, 0x4A, 0xD2, 0x1D, 0x1B, 0x38, 0xB6, 0x61, 0x37, 0x54, 0x92, 0xB5, 0x53, 0xD2,
0x96, 0x29, 0xC9, 0x50, 0x81, 0xA9, 0xB9, 0x86, 0x6E, 0x64, 0x4F, 0x37, 0x07, 0x68, 0x9A, 0x0B,
0xB8, 0xBC, 0xB4, 0x86, 0x52, 0xB2, 0x77, 0x52, 0xDA, 0x32, 0x29, 0xB9, 0x86, 0xA5, 0x03, 0x0B,
0x38, 0x6A, 0x2E, 0x25, 0xCD, 0xD6, 0x55, 0x5B, 0xD7, 0xD4, 0xA6, 0xBB, 0x92, 0xB3, 0x93, 0xD2,
0x96, 0x49, 0xC9, 0x71, 0xB8, 0x90, 0xF8, 0xF3, 0xAD, 0x68, 0x2A, 0x59, 0x2E, 0x30, 0xF8, 0x6F,
0xBA, 0xA6, 0x3D, 0x25, 0x77, 0xA7, 0xA4, 0xAB, 0xA1, 0xA4, 0x6E, 0x67, 0x75, 0x14, 0xD6, 0xED,
0xAC, 0xFE, 0x56, 0xD3, 0x4D, 0xFE, 0x9A, 0xD3, 0xBB, 0xF6, 0x3F, 0x50, 0x4B, 0x07, 0x08, 0x50,
0x7D, 0x0A, 0x8A, 0xCC, 0x05, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0x50, 0x4B, 0x03, 0x04, 0x14,
0x00, 0x08, 0x08, 0x08, 0x00, 0x22, 0x6D, 0x34, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x77, 0x70, 0x6D, 0x7A, 0x2F, 0x77, 0x61,
0x79, 0x6C, 0x69, 0x6E, 0x65, 0x73, 0x2E, 0x77, 0x70, 0x6D, 0x6C, 0xED, 0x9B, 0x4D, 0x6F, 0xDB,
0x36, 0x18, 0xC7, 0xEF, 0xFD, 0x14, 0x82, 0x4F, 0x1B, 0xD0, 0xD9, 0x14, 0xF5, 0x46, 0x15, 0xAE,
0x8B, 0xAC, 0x69, 0x91, 0xA0, 0xE9, 0x6A, 0xD4, 0xE9, 0x72, 0x1C, 0x18, 0x99, 0x76, 0xB8, 0xC8,
0xA4, 0x21, 0x51, 0x79, 0xD9, 0xA9, 0xC0, 0xD0, 0x61, 0x03, 0x7A, 0xDA, 0x30, 0xEC, 0x30, 0xEC,
0xD0, 0x01, 0x03, 0x76, 0xDA, 0x65, 0x3D, 0x76, 0xFB, 0x36, 0x29, 0xB2, 0x6F, 0x31, 0xCA, 0x2F,
0xB2, 0x28, 0x33, 0x2F, 0xA8, 0x0A, 0xA7, 0x35, 0x98, 0x93, 0xC5, 0xE7, 0xFF, 0x3C, 0x24, 0x9F,
0x87, 0x3F, 0x89, 0xA6, 0xE2, 0xF6, 0xBD, 0x93, 0x51, 0x6C, 0x1D, 0x91, 0x24, 0xA5, 0x9C, 0xDD,
0x6D, 0xD8, 0x4D, 0xD0, 0xB0, 0x08, 0x8B, 0x78, 0x9F, 0xB2, 0xE1, 0xDD, 0xC6, 0xB3, 0xDD, 0x87,
0x9F, 0xA1, 0xC6, 0xBD, 0xCE, 0xAD, 0xF6, 0xA1, 0x54, 0x49, 0x25, 0x4B, 0xEF, 0x36, 0x0E, 0x84,
0x18, 0xDF, 0x69, 0xB5, 0x8E, 0x8F, 0x8F, 0x9B, 0x7C, 0x4C, 0xD8, 0x90, 0xA6, 0x4D, 0x46, 0x44,
0x4B, 0x2A, 0x5A, 0xB0, 0x09, 0x1B, 0x53, 0xD9, 0x9D, 0xE3, 0xF1, 0x28, 0x56, 0xB4, 0xFD, 0xAF,
0x69, 0x33, 0xE2, 0xA3, 0x96, 0x34, 0x7C, 0xD3, 0x92, 0xFD, 0x34, 0xED, 0x46, 0xE7, 0x96, 0x65,
0xB5, 0x37, 0x79, 0x94, 0x8D, 0x08, 0x13, 0xF9, 0x85, 0xBC, 0xCC, 0xFD, 0xEE, 0x8C, 0x68, 0x9A,
0x8F, 0xE7, 0x3E, 0x67, 0x03, 0x3A, 0x9C, 0x1A, 0xE6, 0xA6, 0x41, 0x7C, 0xBA, 0xCB, 0xF7, 0xF0,
0x69, 0x4C, 0x19, 0x79, 0xCC, 0xFB, 0xA4, 0x93, 0xE2, 0x01, 0x89, 0x4F, 0xDB, 0x2D, 0xBD, 0x55,
0xF5, 0xA5, 0x8C, 0xA6, 0x07, 0x1B, 0x91, 0x90, 0xB1, 0x3B, 0x43, 0xBE, 0xC5, 0x47, 0x64, 0xEE,
0x57, 0xB6, 0x28, 0x3E, 0xE4, 0x84, 0x8A, 0x27, 0xEC, 0xE9, 0xFD, 0x1D, 0x9E, 0x8A, 0x0E, 0x39,
0x21, 0x51, 0x26, 0x48, 0xFE, 0x79, 0xAA, 0x9D, 0xB9, 0x2B, 0xA2, 0x8A, 0xFB, 0xC4, 0x63, 0x6A,
0x2A, 0x7A, 0xFE, 0x1C, 0x47, 0x87, 0x85, 0xEB, 0xB2, 0x40, 0x89, 0x20, 0xF0, 0x21, 0x79, 0x32,
0x18, 0xF4, 0xA4, 0x2C, 0xA1, 0xE2, 0x74, 0x8B, 0xD0, 0xE1, 0x81, 0xE8, 0x40, 0x30, 0xF3, 0xD7,
0x9B, 0x95, 0x08, 0xC3, 0x98, 0xEF, 0xE3, 0x78, 0x37, 0xC1, 0x2C, 0xA5, 0x79, 0x7C, 0x1C, 0xF7,
0xC6, 0x84, 0xF4, 0x3B, 0xDE, 0x2C, 0xC4, 0x45, 0x76, 0x25, 0x48, 0x3F, 0xE1, 0x8C, 0x6C, 0xB3,
0x01, 0x9F, 0x37, 0x2B, 0x86, 0x07, 0x2C, 0x1B, 0x7D, 0x89, 0xE3, 0x8C, 0x74, 0x82, 0x60, 0x16,
0xB5, 0xD2, 0xAE, 0xF3, 0xEA, 0x65, 0xFB, 0x0B, 0x01, 0x28, 0xFB, 0x29, 0x96, 0xF9, 0x38, 0x5A,
0xFA, 0x81, 0x4C, 0x03, 0x8E, 0x65, 0xD1, 0x39, 0xEE, 0xEB, 0x46, 0x38, 0x33, 0x2D, 0x02, 0xFA,
0xFE, 0x2C, 0xD6, 0x92, 0x45, 0xEF, 0xA9, 0x1D, 0xA7, 0xCE, 0xA6, 0x77, 0xEF, 0xF2, 0x69, 0x5E,
0xB7, 0x59, 0x9F, 0x9C, 0x54, 0xFD, 0x55, 0xA3, 0x3A, 0x55, 0xCD, 0x9C, 0xDE, 0x61, 0xB2, 0x9E,
0xE7, 0xB8, 0x37, 0x38, 0x5F, 0x78, 0x8D, 0xF9, 0xCE, 0x03, 0x44, 0x59, 0x2A, 0xF8, 0xA8, 0x3B,
0x55, 0x7E, 0x81, 0x47, 0xA4, 0xD3, 0xED, 0x6D, 0x3E, 0xFA, 0x6A, 0xA3, 0xDB, 0xDD, 0xD8, 0xD9,
0xDE, 0xE8, 0xCD, 0x22, 0x2D, 0xAB, 0x2A, 0x61, 0x06, 0x3C, 0xC2, 0xF1, 0x8E, 0xBC, 0x35, 0x89,
0x83, 0x62, 0xF8, 0xE5, 0xB6, 0x8A, 0x3C, 0x25, 0x2C, 0xE5, 0xC9, 0x56, 0x21, 0x9D, 0x5F, 0x6B,
0x65, 0x7B, 0x15, 0xD9, 0x5E, 0x55, 0x46, 0x47, 0x78, 0x48, 0x16, 0xC1, 0x66, 0x97, 0x3A, 0xD1,
0x9E, 0x2A, 0x5A, 0x8A, 0x34, 0xA2, 0xAC, 0x77, 0xC0, 0xB9, 0xD8, 0x66, 0x82, 0x24, 0x47, 0x38,
0x2E, 0xE4, 0x4B, 0x86, 0xCB, 0xD2, 0x38, 0xBD, 0xA7, 0xA8, 0x4B, 0x45, 0x15, 0x4E, 0x15, 0xBB,
0xA7, 0x63, 0xD2, 0xB1, 0x95, 0x14, 0x97, 0x0C, 0x97, 0xBA, 0x4E, 0x6A, 0xF0, 0xF6, 0xE5, 0x0F,
0xFF, 0xFD, 0xF8, 0x97, 0xC6, 0x5F, 0xAD, 0x90, 0xCE, 0xFF, 0x31, 0x65, 0x5D, 0x9C, 0xE0, 0xCA,
0x82, 0xBB, 0x58, 0x71, 0x79, 0x30, 0x7C, 0x72, 0x55, 0x30, 0x45, 0x71, 0x69, 0x30, 0x15, 0xD9,
0x65, 0xCB, 0x22, 0xF1, 0x9A, 0xA5, 0xA9, 0xCB, 0x7C, 0xDD, 0x02, 0xB9, 0xEF, 0x5E, 0xA0, 0xB3,
0xEF, 0x7F, 0x39, 0x7F, 0xF5, 0xE7, 0x5A, 0x16, 0x48, 0xB7, 0x6C, 0x6F, 0xA8, 0x40, 0xB0, 0x46,
0x81, 0xDE, 0x3C, 0x3F, 0x7B, 0xF1, 0xF7, 0x5A, 0x16, 0x48, 0x97, 0x95, 0x1B, 0x2A, 0x90, 0xF3,
0xEE, 0x05, 0x3A, 0x7F, 0xF9, 0xED, 0xD9, 0xAF, 0xAF, 0xDF, 0xFE, 0xF6, 0xEA, 0x3D, 0xD4, 0xC8,
0x06, 0x1F, 0x5E, 0x95, 0x74, 0xA9, 0xB9, 0xA1, 0x2A, 0xD5, 0x7E, 0x10, 0x59, 0xBA, 0x3B, 0xE5,
0xC7, 0x0F, 0x92, 0x6E, 0x56, 0x1F, 0x31, 0x48, 0x96, 0xB7, 0xA6, 0x28, 0xE9, 0xE6, 0x75, 0x43,
0x75, 0xD2, 0x0D, 0xE5, 0xBA, 0x28, 0xFD, 0xFC, 0xFA, 0xEC, 0x9F, 0xDF, 0xCF, 0x9E, 0xBF, 0x39,
0xFF, 0xF7, 0xA7, 0xB3, 0x17, 0x7F, 0xBC, 0x7D, 0xF5, 0x9D, 0xE5, 0xAF, 0x25, 0x56, 0xBA, 0x59,
0x7D, 0x7C, 0x1B, 0x88, 0x67, 0x2C, 0xE6, 0xD1, 0xA1, 0x35, 0x88, 0xF3, 0x33, 0x00, 0x2B, 0xE2,
0x4C, 0x24, 0x3C, 0xB6, 0x12, 0x92, 0x8A, 0x84, 0x4E, 0x54, 0xA9, 0xF5, 0x89, 0xFC, 0x6A, 0x1F,
0x51, 0x1C, 0x5B, 0x58, 0x08, 0xC2, 0xF2, 0xB6, 0x4F, 0xD7, 0xB2, 0xA0, 0xC1, 0x87, 0x53, 0xD0,
0x1A, 0x5B, 0xF6, 0x6E, 0x4C, 0x70, 0x4A, 0xAC, 0x1E, 0x89, 0x49, 0x24, 0xAC, 0x59, 0xE7, 0xD6,
0x64, 0x1E, 0x6B, 0x59, 0x35, 0xB4, 0x86, 0x55, 0xEB, 0xE1, 0xD1, 0x38, 0x26, 0x6B, 0x59, 0xAE,
0xF0, 0xC3, 0x29, 0x57, 0x8D, 0xFD, 0xE2, 0xD3, 0x8C, 0xAD, 0x65, 0x75, 0xEC, 0xF7, 0x76, 0x6C,
0x71, 0xD1, 0x71, 0x64, 0x71, 0x1C, 0xB5, 0x74, 0x5A, 0xDF, 0x7E, 0xC8, 0xE3, 0x3E, 0x49, 0x2A,
0x27, 0xD9, 0x44, 0x92, 0x80, 0x05, 0xD9, 0xEE, 0x17, 0x13, 0x2C, 0x35, 0xE9, 0x8E, 0xCD, 0xA7,
0xA7, 0xD9, 0x93, 0x83, 0xFC, 0x84, 0x48, 0x1D, 0x3D, 0x22, 0xBB, 0xBC, 0x27, 0x70, 0x22, 0xBA,
0x9C, 0x32, 0xA1, 0x1E, 0xA1, 0x97, 0xC4, 0x4A, 0xAC, 0xE3, 0xE9, 0xEB, 0x80, 0x52, 0xAF, 0x8B,
0x16, 0xF5, 0x88, 0x9B, 0xA6, 0x02, 0xB3, 0x88, 0x74, 0x50, 0xE0, 0x35, 0x6D, 0xD7, 0xF3, 0x61,
0x88, 0x10, 0x44, 0xF6, 0xFC, 0x89, 0x5C, 0xD8, 0x55, 0xAF, 0x2C, 0xC1, 0x79, 0xC2, 0x3A, 0x10,
0xF8, 0x4D, 0x0F, 0x86, 0x36, 0x0C, 0x01, 0x44, 0x4E, 0xE1, 0x34, 0x37, 0x2B, 0x4E, 0x38, 0x13,
0xFC, 0xE1, 0xE4, 0x31, 0xAD, 0x1E, 0xC5, 0x57, 0xDB, 0xE7, 0x4E, 0xDD, 0x18, 0x47, 0x64, 0x84,
0x93, 0xC3, 0x52, 0xE9, 0x26, 0x29, 0x50, 0x16, 0x42, 0xC4, 0x79, 0xD2, 0xA7, 0x4C, 0xE6, 0x33,
0x2D, 0xB7, 0x5B, 0x96, 0x6D, 0x3B, 0xCD, 0xD0, 0x09, 0x00, 0xF4, 0xDC, 0xD0, 0x05, 0x20, 0xB8,
0x0D, 0x61, 0xD3, 0x0B, 0x42, 0x1F, 0x05, 0xB6, 0x63, 0x7B, 0xC8, 0x45, 0xE5, 0x28, 0x2D, 0x6D,
0x98, 0x76, 0xAB, 0xD2, 0xDF, 0xEC, 0x20, 0x53, 0x39, 0x20, 0xA3, 0xBA, 0x43, 0x5D, 0xA5, 0x3C,
0xA5, 0xCD, 0xBA, 0xDA, 0x5E, 0x71, 0x92, 0x25, 0x1A, 0xE7, 0xFD, 0xA9, 0xE9, 0x51, 0x5B, 0x2F,
0x70, 0xD9, 0x22, 0x38, 0x7F, 0x7B, 0x35, 0x81, 0x65, 0x99, 0x93, 0x8A, 0x6A, 0xB2, 0x5C, 0x06,
0x3C, 0x8E, 0xF9, 0xF1, 0xEC, 0xB5, 0x51, 0xA5, 0xAB, 0xB2, 0xEE, 0xAA, 0x60, 0x1B, 0x6C, 0x18,
0x93, 0xF2, 0x2A, 0x5B, 0x36, 0x5E, 0x18, 0x42, 0x66, 0x77, 0x9A, 0x60, 0xD0, 0x04, 0x93, 0xBF,
0xDB, 0x4B, 0x1F, 0x2A, 0x71, 0x0B, 0x8F, 0x6B, 0x0D, 0xEB, 0x01, 0xC3, 0xFB, 0x57, 0x0C, 0x6E,
0x26, 0xA9, 0xDE, 0x1C, 0x2E, 0xCF, 0xAB, 0xDA, 0xE3, 0x6E, 0x96, 0xB0, 0x2B, 0x12, 0x9F, 0x4B,
0x26, 0xD9, 0x14, 0x7C, 0x32, 0xFC, 0x0D, 0xD6, 0xEF, 0x09, 0x3E, 0xDE, 0xA3, 0xE2, 0x60, 0x93,
0xA6, 0xF9, 0xA6, 0x95, 0xB2, 0x8C, 0x8A, 0xD3, 0xFB, 0x59, 0x72, 0x84, 0x45, 0x96, 0x54, 0x0B,
0x52, 0xF8, 0x5F, 0xDA, 0xC3, 0xA6, 0x7C, 0xEA, 0xCA, 0xC1, 0xCA, 0x88, 0x62, 0x69, 0xCE, 0x55,
0xFB, 0x45, 0x13, 0xD6, 0x4C, 0x66, 0xDA, 0x51, 0x96, 0x92, 0x9E, 0x48, 0x70, 0xBE, 0x6E, 0x77,
0xE4, 0x8A, 0x29, 0x1E, 0x3E, 0xD5, 0xF6, 0xE2, 0xF6, 0xB9, 0x84, 0xEF, 0xFB, 0x01, 0xDA, 0x0F,
0xBD, 0x30, 0x90, 0x7F, 0x9E, 0x3B, 0x01, 0x1A, 0x81, 0xD0, 0x01, 0x0E, 0xF2, 0x5C, 0xDF, 0x75,
0x6B, 0x02, 0x6D, 0x1B, 0xA0, 0x0D, 0xD0, 0x06, 0xE8, 0x55, 0x03, 0x1D, 0x38, 0x08, 0xB9, 0x30,
0xB0, 0x51, 0x50, 0x00, 0xED, 0x21, 0x68, 0xBB, 0x3E, 0xAC, 0xFB, 0x84, 0x86, 0x06, 0x68, 0x03,
0xB4, 0x01, 0x7A, 0xE5, 0x40, 0xBB, 0xC0, 0x0E, 0x01, 0x70, 0xD1, 0x7C, 0xCB, 0x9D, 0xEF, 0xC1,
0x7D, 0xD7, 0x07, 0xA0, 0x2E, 0xD0, 0x8E, 0x01, 0xDA, 0x00, 0x6D, 0x80, 0x5E, 0x39, 0xD0, 0x28,
0x90, 0xDF, 0xF3, 0x3D, 0xC7, 0xF7, 0xE7, 0x40, 0x43, 0xE0, 0x48, 0x9A, 0xA1, 0x67, 0xD7, 0x04,
0xDA, 0x35, 0x40, 0x1B, 0xA0, 0x0D, 0xD0, 0x2B, 0x07, 0x3A, 0x08, 0x01, 0x0C, 0x90, 0x33, 0xDF,
0x70, 0x7B, 0xB6, 0x04, 0xDA, 0xF5, 0xDC, 0xB0, 0x26, 0xCE, 0x9E, 0xC1, 0xD9, 0xE0, 0x6C, 0x70,
0x5E, 0x35, 0xCE, 0xC8, 0x09, 0xA0, 0x64, 0xD8, 0xF3, 0x0A, 0x9E, 0x1D, 0x14, 0x00, 0x14, 0xB8,
0x41, 0x4D, 0x9E, 0x7D, 0xC3, 0xB3, 0xE1, 0xD9, 0xF0, 0xBC, 0x72, 0x9E, 0x5D, 0x1B, 0x78, 0x30,
0x74, 0x1D, 0x77, 0xB6, 0xDF, 0x46, 0x00, 0xC2, 0x10, 0x48, 0xC8, 0x61, 0x4D, 0xA0, 0x03, 0x03,
0xB4, 0x01, 0xDA, 0x00, 0xBD, 0x72, 0xA0, 0x43, 0xD7, 0x77, 0x80, 0x0F, 0x90, 0x3D, 0x07, 0x1A,
0x06, 0x8E, 0x1D, 0x38, 0xD0, 0xAE, 0xFB, 0x84, 0x46, 0x06, 0x68, 0x03, 0xB4, 0x01, 0x7A, 0xE5,
0x40, 0x23, 0x24, 0x71, 0x96, 0x3B, 0xEE, 0xE2, 0x25, 0xB4, 0x1F, 0x02, 0xD7, 0x05, 0x76, 0xDD,
0x77, 0xD0, 0xA1, 0xE1, 0xD9, 0xF0, 0x6C, 0x78, 0xBE, 0x2E, 0xCF, 0xED, 0xD6, 0xE2, 0x7F, 0xEE,
0xDA, 0xAD, 0xC5, 0xAF, 0xEA, 0xDB, 0xF9, 0x2F, 0xF3, 0x3B, 0xB7, 0xFE, 0x07, 0x50, 0x4B, 0x07,
0x08, 0xDD, 0x90, 0xD9, 0xA9, 0x92, 0x05, 0x00, 0x00, 0xE9, 0x3F, 0x00, 0x00, 0x50, 0x4B, 0x01,
0x02, 0x14, 0x00, 0x14, 0x00, 0x08, 0x08, 0x08, 0x00, 0x22, 0x6D, 0x34, 0x55, 0x50, 0x7D, 0x0A,
0x8A, 0xCC, 0x05, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x70, 0x6D, 0x7A, 0x2F,
0x74, 0x65, 0x6D, 0x70, 0x6C, 0x61, 0x74, 0x65, 0x2E, 0x6B, 0x6D, 0x6C, 0x50, 0x4B, 0x01, 0x02,
0x14, 0x00, 0x14, 0x00, 0x08, 0x08, 0x08, 0x00, 0x22, 0x6D, 0x34, 0x55, 0xDD, 0x90, 0xD9, 0xA9,
0x92, 0x05, 0x00, 0x00, 0xE9, 0x3F, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x06, 0x00, 0x00, 0x77, 0x70, 0x6D, 0x7A, 0x2F, 0x77,
0x61, 0x79, 0x6C, 0x69, 0x6E, 0x65, 0x73, 0x2E, 0x77, 0x70, 0x6D, 0x6C, 0x50, 0x4B, 0x05, 0x06,
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xDD, 0x0B, 0x00, 0x00,
0x00, 0x00
0x5C, 0xCD, 0x72, 0xDB, 0x36, 0x10, 0xBE, 0xE7, 0x29, 0x3C, 0x3E, 0xA7, 0x12, 0x00, 0xFE, 0x80,
0xCC, 0x28, 0xCC, 0xA4, 0x76, 0xEC, 0x64, 0x26, 0x6D, 0x34, 0x91, 0x53, 0x4F, 0x8F, 0x30, 0x05,
0x49, 0xA8, 0x49, 0x42, 0x25, 0xC1, 0xC8, 0xCE, 0xB1, 0xA7, 0x3E, 0x4B, 0xDF, 0xA0, 0x4F, 0xD4,
0x3E, 0x46, 0xC1, 0x3F, 0x89, 0xA0, 0x40, 0xC5, 0x36, 0xE3, 0xD4, 0x96, 0xE9, 0x83, 0x47, 0xC2,
0xEE, 0x7E, 0xF8, 0xDB, 0xFD, 0x16, 0x00, 0x41, 0x8D, 0x5E, 0x5D, 0x85, 0xC1, 0xC1, 0x67, 0x1A,
0x27, 0x8C, 0x47, 0x2F, 0x0F, 0xE1, 0x00, 0x1C, 0x1E, 0xD0, 0xC8, 0xE7, 0x53, 0x16, 0xCD, 0x5F,
0x1E, 0x7E, 0x3A, 0x3B, 0xF9, 0xC1, 0x39, 0x7C, 0xE5, 0x3D, 0x1B, 0x5D, 0x4A, 0x2D, 0xA9, 0x19,
0x25, 0x2F, 0x0F, 0x17, 0x42, 0x2C, 0x5F, 0x0C, 0x87, 0xAB, 0xD5, 0x6A, 0xC0, 0x97, 0x34, 0x9A,
0xB3, 0x64, 0x10, 0x51, 0x31, 0x94, 0x1A, 0x43, 0x34, 0x40, 0x87, 0x85, 0xDA, 0x8B, 0xD5, 0x32,
0x0C, 0x14, 0xDD, 0xE9, 0x6F, 0x6C, 0xE0, 0xF3, 0x70, 0x28, 0x05, 0x5F, 0x86, 0xB2, 0x9E, 0x81,
0x71, 0xE8, 0x3D, 0x3B, 0x38, 0x18, 0x1D, 0x73, 0x3F, 0x0D, 0x69, 0x24, 0xB2, 0x2F, 0xF2, 0x6B,
0x66, 0xF7, 0xC2, 0x8F, 0x29, 0x11, 0xF4, 0x8C, 0x85, 0xD4, 0x83, 0x36, 0xB6, 0x80, 0x6D, 0x23,
0xD3, 0x76, 0x0C, 0x67, 0x34, 0x6C, 0x8A, 0x6B, 0x46, 0xE9, 0x72, 0xDA, 0x30, 0x32, 0x90, 0x83,
0x5D, 0x58, 0x1A, 0xD5, 0xC4, 0x35, 0xA3, 0x90, 0x25, 0x59, 0xCF, 0x8F, 0x78, 0x34, 0x63, 0xF3,
0x42, 0x50, 0x89, 0x66, 0xC1, 0xF5, 0x19, 0x3F, 0x27, 0xD7, 0x01, 0x8B, 0xE8, 0x4F, 0x7C, 0x4A,
0xBD, 0x84, 0xCC, 0x68, 0x70, 0x5D, 0xC2, 0x6D, 0x49, 0x55, 0x5B, 0x16, 0xB1, 0x64, 0xF1, 0xDA,
0x17, 0x12, 0xDB, 0x9B, 0xF3, 0xB7, 0x3C, 0xA4, 0x95, 0x5D, 0x5D, 0xA2, 0xD8, 0xD0, 0x2B, 0x26,
0x3E, 0x44, 0x1F, 0x8F, 0xDE, 0xF3, 0x44, 0x78, 0xF4, 0x8A, 0xFA, 0xA9, 0xA0, 0xD9, 0xE7, 0x42,
0xB7, 0x34, 0x57, 0x94, 0x1A, 0xE6, 0xB9, 0x45, 0x21, 0x5A, 0xD7, 0xFC, 0x23, 0xF1, 0x2F, 0xD7,
0xA6, 0xDB, 0x0A, 0x0A, 0x82, 0x20, 0x97, 0xF4, 0xC3, 0x6C, 0x36, 0x91, 0x6A, 0x31, 0x13, 0xD7,
0x6F, 0x29, 0x9B, 0x2F, 0x84, 0x87, 0x40, 0x69, 0xAF, 0x17, 0x2B, 0x08, 0xF3, 0x80, 0x5F, 0x90,
0xE0, 0x2C, 0x26, 0x51, 0xC2, 0x32, 0x7C, 0x12, 0x4C, 0x96, 0x94, 0x4E, 0x3D, 0x68, 0x95, 0x18,
0x6D, 0x0A, 0x0A, 0xCA, 0x34, 0xE6, 0x11, 0x7D, 0x17, 0xCD, 0x78, 0x55, 0xAC, 0x08, 0xDE, 0x44,
0x69, 0xF8, 0x0B, 0x09, 0x52, 0xEA, 0x61, 0x5C, 0xA2, 0x36, 0xCA, 0x75, 0x56, 0x93, 0xF4, 0x62,
0xA3, 0x00, 0xEA, 0x76, 0x8A, 0xA4, 0x6A, 0xC7, 0x50, 0xDF, 0x90, 0x02, 0x70, 0x29, 0x67, 0x9D,
0x93, 0xA9, 0xAE, 0x85, 0xA5, 0x68, 0x03, 0x68, 0xDB, 0x25, 0xD6, 0x96, 0x44, 0x6F, 0xA9, 0x6D,
0xA7, 0x4E, 0xA6, 0x37, 0x1F, 0xF3, 0x62, 0x5C, 0xDF, 0x45, 0x53, 0x7A, 0xD5, 0xB4, 0x57, 0x85,
0x6A, 0x57, 0xB7, 0xFA, 0x54, 0x96, 0x6B, 0xE2, 0x63, 0x74, 0xC2, 0x83, 0x29, 0x8D, 0x1B, 0xBE,
0x43, 0xC3, 0x65, 0x90, 0xC5, 0xD7, 0xF5, 0x92, 0x7A, 0x2B, 0x72, 0xBD, 0xE4, 0x2C, 0x12, 0x95,
0xE3, 0xD4, 0x65, 0x5A, 0xAB, 0x77, 0xD3, 0x75, 0x5B, 0x6B, 0x45, 0x8A, 0xEA, 0xAA, 0x08, 0xB5,
0x23, 0xCE, 0x63, 0xC9, 0x4D, 0x52, 0x61, 0x72, 0x9D, 0x8C, 0x49, 0x4C, 0xC2, 0xE6, 0x48, 0xF8,
0x6B, 0x8D, 0x3C, 0x2C, 0xCF, 0x4F, 0x27, 0x8E, 0x59, 0xF1, 0x86, 0x2A, 0x6A, 0x18, 0x2E, 0x72,
0x87, 0xCE, 0x25, 0x31, 0x95, 0x4D, 0x60, 0x9F, 0xE9, 0x19, 0x9F, 0x08, 0x12, 0x8B, 0x71, 0xAD,
0x33, 0x35, 0xAD, 0xE6, 0x14, 0x94, 0xC3, 0x2B, 0x99, 0x33, 0xEF, 0xE9, 0xE9, 0x78, 0x52, 0x0D,
0x6E, 0x43, 0xA2, 0x0E, 0xFD, 0x57, 0x7B, 0x56, 0xC0, 0x93, 0x54, 0xF0, 0x93, 0x20, 0xAB, 0xBC,
0x08, 0x99, 0x2A, 0xA4, 0x9A, 0xE5, 0x9A, 0x80, 0x2C, 0x43, 0x15, 0x02, 0xA0, 0x84, 0xA1, 0x2E,
0x82, 0x7D, 0x12, 0xB0, 0x02, 0xED, 0x4D, 0x44, 0x2E, 0x82, 0x8D, 0x0F, 0x6E, 0x09, 0xD4, 0x7A,
0x58, 0x28, 0x01, 0xC7, 0x4C, 0xF8, 0x8B, 0x7C, 0x68, 0x42, 0x12, 0xA5, 0x24, 0xA8, 0x6A, 0x6B,
0x08, 0x35, 0x2D, 0x3C, 0x2F, 0x3D, 0xE6, 0x2D, 0x25, 0x59, 0xE6, 0xD1, 0x4E, 0xEC, 0x4A, 0xD5,
0xC9, 0xA1, 0x66, 0x3C, 0x08, 0xF8, 0xAA, 0xA4, 0xE1, 0xCD, 0x78, 0x6E, 0xE9, 0xED, 0x86, 0x7A,
0x1D, 0xCD, 0x6B, 0x3D, 0xD5, 0x0A, 0x5B, 0x00, 0xA4, 0x67, 0xE4, 0xCE, 0xE1, 0x81, 0x01, 0xC8,
0xFF, 0x9E, 0x6F, 0x7D, 0x68, 0xA0, 0xAE, 0x2D, 0x76, 0x37, 0x49, 0xEA, 0xA8, 0x31, 0xDC, 0x26,
0x57, 0x7D, 0xE9, 0xEB, 0xA3, 0xA9, 0x1B, 0xF5, 0xB3, 0x34, 0x8E, 0xF2, 0x61, 0x12, 0x3C, 0x6F,
0xDB, 0xEB, 0x68, 0x3A, 0x11, 0x7C, 0x79, 0xCE, 0xC4, 0xE2, 0x98, 0x25, 0x3E, 0x8F, 0x04, 0x8B,
0x52, 0x49, 0xF9, 0x47, 0x69, 0xFC, 0x99, 0x88, 0x34, 0xA6, 0xDA, 0xDA, 0xD6, 0x28, 0x9A, 0x9A,
0x3E, 0x25, 0x74, 0x22, 0x62, 0x92, 0xB9, 0xCF, 0x7B, 0x39, 0x53, 0x1E, 0x54, 0x10, 0x9A, 0xD2,
0x0A, 0x60, 0x1C, 0x10, 0x9F, 0x86, 0x24, 0xBE, 0xAC, 0x0D, 0x56, 0x63, 0xF0, 0x64, 0xC9, 0x26,
0xAA, 0x93, 0x7A, 0xF9, 0xC1, 0x01, 0x84, 0xC6, 0xC0, 0x35, 0x0D, 0x88, 0x0C, 0x8C, 0x5D, 0x0B,
0x98, 0xCF, 0x11, 0x1A, 0x58, 0x18, 0x9B, 0xAE, 0xE1, 0x3A, 0xB6, 0x69, 0xD7, 0x31, 0x86, 0x5A,
0x90, 0xD1, 0x50, 0x3B, 0x55, 0x4C, 0x99, 0x18, 0x56, 0x9F, 0x86, 0x75, 0x32, 0x0E, 0x02, 0xB6,
0x4C, 0x38, 0x9B, 0x6E, 0x85, 0x5E, 0x53, 0xA2, 0x25, 0xA1, 0x9A, 0xFE, 0x42, 0xAB, 0x96, 0x26,
0xF4, 0x54, 0x09, 0xED, 0x6A, 0x91, 0xD3, 0x28, 0x6F, 0x33, 0x2B, 0xD3, 0x72, 0xD3, 0x4A, 0x61,
0x10, 0x4D, 0x5D, 0x35, 0x77, 0xD2, 0xD4, 0xD8, 0x1E, 0xBA, 0x6B, 0xA5, 0xCC, 0x47, 0x5A, 0xEC,
0x37, 0xA2, 0x6D, 0x63, 0xC5, 0x3B, 0xC0, 0xC6, 0x52, 0xE7, 0x35, 0x6B, 0xBE, 0xCC, 0x57, 0x38,
0xA7, 0x31, 0x4F, 0x97, 0x8A, 0xBB, 0x34, 0x85, 0xB5, 0xDC, 0xA3, 0x96, 0xEE, 0x32, 0xCA, 0xD3,
0x82, 0x1A, 0xA0, 0x7A, 0xE9, 0x2E, 0x90, 0x37, 0xD1, 0xB4, 0x15, 0x62, 0x2D, 0xDB, 0x05, 0x50,
0xAC, 0x4A, 0xE9, 0xEF, 0xA9, 0x5C, 0xB1, 0xD3, 0x6D, 0x0C, 0x95, 0xF9, 0x54, 0xFB, 0xB3, 0x98,
0xCD, 0xE7, 0x9B, 0x24, 0xDE, 0xAA, 0x90, 0xE7, 0x2B, 0xB9, 0xDC, 0xF6, 0x17, 0xF5, 0x24, 0xB8,
0xAD, 0xA2, 0x04, 0xD3, 0xEE, 0x7A, 0xEA, 0xB5, 0xB4, 0xD7, 0xBF, 0x35, 0x2D, 0xEA, 0x8C, 0xA8,
0xCA, 0x72, 0x35, 0x9B, 0x12, 0xC1, 0xE3, 0x93, 0x34, 0xF2, 0xBD, 0x6C, 0x9D, 0x3A, 0x5E, 0x70,
0xC1, 0x15, 0x73, 0x45, 0xE5, 0x46, 0x40, 0x0D, 0x67, 0xAC, 0x2B, 0xCF, 0x58, 0x20, 0xD7, 0x8D,
0xB3, 0x19, 0xBB, 0xF2, 0xFE, 0xFD, 0xF3, 0xAF, 0x7F, 0xFE, 0xF8, 0xBB, 0xF2, 0xE6, 0x9A, 0x40,
0x6B, 0x78, 0xE7, 0x65, 0x9A, 0x0A, 0xB3, 0x0E, 0x9A, 0x71, 0x61, 0xF2, 0x9E, 0x46, 0x89, 0x8A,
0xD5, 0xAE, 0xA1, 0xF6, 0xBD, 0x6D, 0x88, 0xB6, 0x3A, 0xAF, 0x68, 0xD6, 0x29, 0xB2, 0x2D, 0xD8,
0x24, 0x79, 0x36, 0xE9, 0xFB, 0x5B, 0x11, 0x3A, 0xB0, 0x4D, 0x64, 0x9A, 0xD0, 0x29, 0x08, 0x5D,
0xEE, 0xF3, 0x0C, 0xD3, 0x72, 0x80, 0x8D, 0x60, 0x47, 0x4A, 0x87, 0x3D, 0xA5, 0xEF, 0x0B, 0xA5,
0xC3, 0x2E, 0x94, 0xAE, 0x31, 0xBE, 0x2D, 0xA5, 0x6B, 0x20, 0x7A, 0x4A, 0xBF, 0x33, 0xA5, 0x27,
0xD9, 0xE8, 0x7F, 0xA4, 0xBE, 0x0C, 0xE8, 0xEF, 0x48, 0xEA, 0xE8, 0xA9, 0x92, 0xFA, 0xF7, 0x98,
0x50, 0xBE, 0xBC, 0xEF, 0xF9, 0xEC, 0x38, 0x2D, 0x8F, 0x31, 0x35, 0x22, 0x03, 0xD8, 0xAE, 0x09,
0x1C, 0x6C, 0x95, 0xA9, 0x11, 0x02, 0x68, 0xC8, 0x7F, 0x26, 0xB4, 0x3A, 0xA6, 0x46, 0xD4, 0xA7,
0xC6, 0x7D, 0x49, 0x8D, 0xA8, 0x4B, 0x6A, 0xD4, 0x18, 0xDF, 0x36, 0x35, 0x6A, 0x20, 0xFA, 0xD4,
0x78, 0x67, 0x26, 0x2D, 0x0E, 0xD7, 0x3E, 0x72, 0x21, 0x83, 0xF9, 0xFE, 0xB8, 0xB4, 0x5E, 0x4B,
0x3E, 0xD0, 0xE4, 0x22, 0xE1, 0x41, 0x2A, 0x68, 0x7E, 0x3A, 0xA6, 0x9C, 0xF3, 0xD5, 0x94, 0x76,
0x40, 0xE5, 0xA7, 0x81, 0x85, 0x6A, 0x79, 0x9E, 0x08, 0x15, 0x94, 0x6D, 0xF9, 0xCD, 0xC0, 0xD4,
0xA3, 0xBC, 0x16, 0xF1, 0xCE, 0x2E, 0x06, 0x81, 0x52, 0x2D, 0x68, 0x74, 0xAE, 0x21, 0xBE, 0x11,
0x94, 0xAE, 0x51, 0x4D, 0xE9, 0x0E, 0xA0, 0x5F, 0xC9, 0x6A, 0x47, 0x93, 0x9A, 0xD2, 0x9B, 0x00,
0xE9, 0x1A, 0xD4, 0x10, 0x7E, 0xD5, 0x0D, 0xB2, 0x27, 0x69, 0x2D, 0x63, 0xD4, 0x10, 0xDF, 0x08,
0xAA, 0x15, 0xA4, 0x4F, 0xEE, 0x65, 0x72, 0x87, 0x36, 0x46, 0x10, 0x39, 0x0E, 0xC2, 0x55, 0x72,
0x87, 0xAE, 0x6B, 0x20, 0x17, 0xBA, 0xB8, 0x63, 0x72, 0x37, 0xFA, 0xE4, 0xBE, 0x2F, 0xC9, 0xDD,
0xE8, 0x92, 0xDC, 0x35, 0xC6, 0xB7, 0x4D, 0xEE, 0x1A, 0x88, 0x3E, 0xB9, 0xDF, 0x39, 0xB9, 0x7F,
0xE1, 0x3C, 0xBC, 0xC7, 0x0D, 0x2F, 0xF7, 0x49, 0x20, 0xF7, 0x90, 0x73, 0xB1, 0xF0, 0xCC, 0xEA,
0x6E, 0x45, 0xBD, 0x50, 0x6B, 0xC5, 0x92, 0x4F, 0x09, 0x3D, 0xC9, 0xB4, 0x4E, 0x64, 0x6D, 0x3C,
0xDE, 0x3C, 0x08, 0x69, 0x0A, 0x7A, 0xE2, 0x2E, 0x89, 0x1B, 0x62, 0x49, 0xD5, 0x06, 0x2E, 0x1F,
0x40, 0xD9, 0xD8, 0xB0, 0x91, 0x2B, 0xC9, 0xDC, 0x72, 0x3B, 0xF2, 0xB6, 0xD9, 0xF3, 0xF6, 0xBE,
0xF0, 0xB6, 0xD9, 0x85, 0xB7, 0x35, 0xC6, 0xB7, 0xE5, 0x6D, 0x0D, 0x44, 0xCF, 0xDB, 0x8F, 0xEA,
0x11, 0x54, 0x75, 0x1F, 0xA4, 0x3F, 0xAD, 0xFC, 0xE6, 0xD3, 0xF9, 0xFF, 0x1C, 0x3F, 0xF7, 0x13,
0xDA, 0x1F, 0x3F, 0x3F, 0xE8, 0x51, 0xEC, 0x8F, 0x9E, 0xFA, 0xA3, 0xA7, 0xFE, 0xE8, 0x69, 0x0F,
0x03, 0xBB, 0xDF, 0x76, 0xEE, 0xC5, 0xB6, 0x13, 0xB9, 0x06, 0x30, 0xA0, 0x55, 0xDD, 0x7B, 0x34,
0x2C, 0x80, 0x10, 0x80, 0x96, 0xDD, 0xF5, 0xE6, 0x63, 0xB5, 0x30, 0xE9, 0xB7, 0x9D, 0x8F, 0x7E,
0xDB, 0x69, 0x6D, 0xFB, 0xE5, 0xCD, 0xB7, 0x9D, 0x1A, 0xE3, 0xDB, 0x6E, 0x3B, 0x35, 0x10, 0xFD,
0xB6, 0xF3, 0xCE, 0xBC, 0xED, 0xA7, 0x72, 0x61, 0x1B, 0x1E, 0xB3, 0xF8, 0x67, 0x12, 0xDE, 0xE3,
0x8A, 0xEC, 0x29, 0x72, 0xA9, 0x65, 0x01, 0x68, 0x60, 0x60, 0x96, 0xCF, 0x5E, 0xB0, 0x6B, 0x5B,
0x10, 0x62, 0xE0, 0x5A, 0x5D, 0x9F, 0xBD, 0xD8, 0x3D, 0x99, 0x3E, 0x48, 0x32, 0xBD, 0xBF, 0x3B,
0x3A, 0x08, 0xB8, 0x00, 0xC9, 0xB4, 0x0C, 0x0B, 0x57, 0x72, 0x2C, 0xC3, 0xC8, 0x8E, 0x88, 0x2D,
0xD0, 0xD5, 0x95, 0x70, 0xEF, 0x4A, 0x0F, 0xD2, 0x95, 0xEE, 0x90, 0x97, 0xED, 0x2E, 0x79, 0x19,
0x77, 0xCF, 0xCB, 0x1A, 0x88, 0x07, 0x95, 0x97, 0xC3, 0x34, 0x10, 0x6C, 0x19, 0xD0, 0x63, 0x96,
0x08, 0xD2, 0xAC, 0xAA, 0x25, 0x3B, 0x6B, 0xD1, 0xCA, 0xA9, 0x07, 0x3A, 0x80, 0xDD, 0xF9, 0x68,
0x3F, 0x8F, 0x95, 0xF7, 0xEE, 0x30, 0xF1, 0x7F, 0x58, 0x2C, 0xC8, 0x7D, 0x97, 0xE9, 0xB8, 0xC8,
0xC1, 0xE5, 0x0B, 0x0A, 0x8E, 0x09, 0x4D, 0xC3, 0x42, 0x06, 0x80, 0x4E, 0x47, 0x86, 0x77, 0x7A,
0x86, 0x7F, 0x90, 0x0C, 0x7F, 0x7F, 0xEF, 0xBA, 0x20, 0x60, 0x42, 0x60, 0xB8, 0x6E, 0xB5, 0xEC,
0x44, 0x8E, 0x69, 0xB8, 0x08, 0xBB, 0x5D, 0x3D, 0xC9, 0xED, 0x3D, 0xE9, 0x69, 0x79, 0x12, 0xC2,
0xB6, 0x09, 0x5D, 0x8C, 0xAA, 0xAB, 0xE1, 0xD8, 0x74, 0x11, 0x82, 0x8E, 0x2C, 0xE9, 0x7A, 0x1C,
0xB4, 0x4E, 0x9E, 0xBD, 0x2F, 0x3D, 0x15, 0x5F, 0x32, 0x90, 0x4C, 0x72, 0xC0, 0xB2, 0xCB, 0x2D,
0x0C, 0x06, 0x96, 0xE5, 0xBA, 0x8E, 0x6D, 0x5B, 0x46, 0x57, 0x5F, 0xEA, 0x5F, 0xC1, 0x7B, 0x62,
0xBE, 0x24, 0x39, 0x09, 0x9B, 0x16, 0x34, 0x9D, 0xEA, 0x95, 0x15, 0x1B, 0x5A, 0x8E, 0xED, 0x22,
0xC3, 0xE9, 0xFC, 0x36, 0x67, 0xFF, 0xCE, 0xCA, 0x53, 0xF3, 0x25, 0xEC, 0x58, 0x0E, 0xC6, 0xB0,
0x5A, 0x78, 0x63, 0xCB, 0x34, 0x6C, 0xDB, 0x31, 0xB0, 0xDD, 0x75, 0xB9, 0x04, 0xFB, 0x2B, 0xD2,
0x8F, 0xC7, 0x97, 0x94, 0xBD, 0xAA, 0xAE, 0x8E, 0x6F, 0xF4, 0x63, 0x49, 0x35, 0xEC, 0xD1, 0x70,
0xF3, 0xA3, 0x48, 0xA3, 0xE1, 0xE6, 0x27, 0xCD, 0x46, 0xD9, 0xCF, 0xA2, 0x79, 0xCF, 0xFE, 0x03,
0x50, 0x4B, 0x07, 0x08, 0xF2, 0xB2, 0xDF, 0xE7, 0xD1, 0x06, 0x00, 0x00, 0x66, 0x4D, 0x00, 0x00,
0x50, 0x4B, 0x03, 0x04, 0x14, 0x00, 0x08, 0x08, 0x08, 0x00, 0x8A, 0x81, 0x3E, 0x56, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x77, 0x70,
0x6D, 0x7A, 0x2F, 0x77, 0x61, 0x79, 0x6C, 0x69, 0x6E, 0x65, 0x73, 0x2E, 0x77, 0x70, 0x6D, 0x6C,
0xED, 0x5D, 0xCB, 0x72, 0xDB, 0x36, 0x14, 0xDD, 0xE7, 0x2B, 0x3C, 0x5E, 0xA7, 0x12, 0x01, 0x90,
0x04, 0x99, 0x51, 0x94, 0x49, 0xE3, 0xB8, 0xC9, 0x8C, 0xDB, 0x78, 0x6C, 0xA5, 0x69, 0x96, 0x34,
0x05, 0x49, 0x68, 0x48, 0x42, 0x25, 0xC1, 0xD8, 0xCE, 0xB2, 0xAB, 0x7E, 0x4B, 0xFF, 0xA0, 0x5F,
0xD4, 0x7E, 0x46, 0xC1, 0x97, 0x44, 0x90, 0xA0, 0xAC, 0x47, 0x64, 0xCB, 0x09, 0xB2, 0xC8, 0x58,
0xB8, 0xF7, 0x1E, 0x80, 0xB8, 0xE0, 0xB9, 0x47, 0x00, 0x4D, 0x0F, 0x5E, 0xDC, 0x84, 0xC1, 0xD1,
0x67, 0x12, 0x27, 0x94, 0x45, 0xCF, 0x8F, 0x41, 0xCF, 0x38, 0x3E, 0x22, 0x91, 0xCF, 0xC6, 0x34,
0x9A, 0x3E, 0x3F, 0x7E, 0x3F, 0x3A, 0xFD, 0xC1, 0x39, 0x7E, 0x31, 0x7C, 0x32, 0xF8, 0x24, 0xBC,
0x84, 0x67, 0x94, 0x3C, 0x3F, 0x9E, 0x71, 0x3E, 0x7F, 0xD6, 0xEF, 0x5F, 0x5F, 0x5F, 0xF7, 0xD8,
0x9C, 0x44, 0x53, 0x9A, 0xF4, 0x22, 0xC2, 0xFB, 0xC2, 0xA3, 0x0F, 0x7B, 0xF0, 0xB8, 0x70, 0x7B,
0x76, 0x3D, 0x0F, 0x03, 0xC9, 0x77, 0xFC, 0x3B, 0xED, 0xF9, 0x2C, 0xEC, 0x0B, 0xC3, 0x97, 0xBE,
0xE8, 0xA7, 0x87, 0x8E, 0x87, 0x4F, 0x8E, 0x8E, 0x06, 0x27, 0xCC, 0x4F, 0x43, 0x12, 0xF1, 0xEC,
0x83, 0xF8, 0x98, 0xC5, 0x3D, 0x0B, 0x69, 0x92, 0x8D, 0xE7, 0x15, 0x8B, 0x26, 0x74, 0x5A, 0x18,
0x2A, 0xD3, 0x24, 0xB8, 0x1D, 0xB1, 0x0F, 0xDE, 0x6D, 0x40, 0x23, 0xF2, 0x33, 0x1B, 0x93, 0x61,
0xE2, 0x4D, 0x48, 0x70, 0x3B, 0xE8, 0xAB, 0xAD, 0x72, 0x2C, 0x8D, 0x68, 0x32, 0x7B, 0xE9, 0x73,
0x81, 0x3D, 0x9C, 0xB2, 0x37, 0x2C, 0x24, 0x55, 0x5C, 0xDD, 0x22, 0xC5, 0x90, 0x1B, 0xCA, 0xDF,
0x45, 0x17, 0xAF, 0xCE, 0x58, 0xC2, 0x87, 0xE4, 0x86, 0xF8, 0x29, 0x27, 0xD9, 0xCF, 0x85, 0x6F,
0x19, 0x2E, 0x39, 0x35, 0xC2, 0xF3, 0x88, 0xC2, 0xB4, 0xE8, 0xF9, 0x47, 0xCF, 0xFF, 0xB4, 0x08,
0x6D, 0x3B, 0x48, 0x08, 0xDC, 0xFB, 0x44, 0xDE, 0x4D, 0x26, 0x97, 0xC2, 0x2D, 0xA6, 0xFC, 0xF6,
0x0D, 0xA1, 0xD3, 0x19, 0x1F, 0x42, 0xA3, 0x8C, 0x57, 0x9B, 0x25, 0x84, 0x69, 0xC0, 0xAE, 0xBC,
0x60, 0x14, 0x7B, 0x51, 0x42, 0x33, 0x7C, 0x2F, 0xB8, 0x9C, 0x13, 0x32, 0x1E, 0x02, 0xAB, 0xC4,
0xE8, 0x72, 0x90, 0x50, 0xC6, 0x31, 0x8B, 0xC8, 0xDB, 0x68, 0xC2, 0xAA, 0x66, 0xC9, 0xF0, 0x3A,
0x4A, 0xC3, 0x5F, 0xBD, 0x20, 0x25, 0x43, 0x8C, 0x4B, 0xD4, 0x46, 0xBB, 0x2A, 0xEA, 0x32, 0xBD,
0x5A, 0x3A, 0x18, 0xF5, 0x38, 0xC9, 0x52, 0x8D, 0xA3, 0xAF, 0x1E, 0x48, 0x01, 0x38, 0x17, 0x59,
0x67, 0xDE, 0x58, 0x35, 0xC2, 0xD2, 0xB4, 0x04, 0xB4, 0xED, 0x12, 0xAB, 0x65, 0x51, 0x47, 0x2A,
0xC7, 0xA9, 0xB2, 0xA9, 0xC3, 0xCF, 0x59, 0x31, 0xAF, 0x6F, 0xA3, 0x31, 0xB9, 0x69, 0xC6, 0xCB,
0x46, 0xF9, 0x52, 0x5B, 0xD7, 0x54, 0xB6, 0x2B, 0xEE, 0x8F, 0xC1, 0x29, 0x0B, 0xC6, 0x24, 0x6E,
0xAC, 0x1D, 0x12, 0xCE, 0x03, 0x8F, 0x93, 0xB7, 0xE3, 0x45, 0xAF, 0xB5, 0x26, 0xD5, 0x42, 0x2D,
0xD6, 0x4F, 0x7E, 0xEB, 0xC4, 0x44, 0xF8, 0xD1, 0xCF, 0x64, 0xC4, 0x2E, 0xB9, 0x17, 0xF3, 0x73,
0x46, 0x23, 0x2E, 0x2F, 0xDA, 0x9A, 0xB3, 0x84, 0x75, 0x5D, 0xDC, 0x80, 0xB5, 0x5E, 0x97, 0x2D,
0xF2, 0x9A, 0xA2, 0x09, 0xF7, 0x22, 0x9F, 0x0C, 0x81, 0x01, 0x70, 0xCF, 0x32, 0xB1, 0x65, 0xDA,
0xC8, 0xB1, 0x31, 0xAC, 0x52, 0x5D, 0xD9, 0xE5, 0xA8, 0x34, 0xF6, 0xF2, 0xFB, 0x04, 0x9A, 0x46,
0xCF, 0xC5, 0x8E, 0x6D, 0xDB, 0xC8, 0xB0, 0x2C, 0x73, 0x11, 0x55, 0xD9, 0xA5, 0x28, 0x2F, 0xE5,
0xEC, 0x34, 0xC8, 0x06, 0x5C, 0x2C, 0xEE, 0x6A, 0xF1, 0x37, 0xDB, 0xAB, 0xA0, 0xF3, 0xC0, 0xF3,
0x49, 0xE8, 0xC5, 0x9F, 0x6A, 0x49, 0xCD, 0xE7, 0x60, 0xF9, 0x59, 0xB4, 0xF8, 0x8C, 0xC5, 0x82,
0x2B, 0xC5, 0x84, 0x26, 0xF5, 0xF6, 0xA3, 0x23, 0x00, 0x50, 0xCF, 0x35, 0x11, 0x80, 0x08, 0x63,
0xD7, 0x32, 0xCC, 0xA7, 0x10, 0xF6, 0x2C, 0x8C, 0x4D, 0x17, 0xB9, 0x8E, 0x6D, 0xDA, 0x75, 0x8C,
0xBE, 0x12, 0x64, 0xD0, 0x6F, 0xF4, 0x56, 0x5C, 0x06, 0x95, 0xD6, 0x10, 0xAD, 0x2F, 0x1A, 0x65,
0x2A, 0xC5, 0xD4, 0x1A, 0xAA, 0xAC, 0x35, 0x83, 0x44, 0x86, 0xE6, 0x59, 0x7F, 0xF2, 0xE4, 0xC8,
0xAD, 0x1D, 0x21, 0x6F, 0x88, 0x97, 0x95, 0x8B, 0x73, 0x2F, 0xF6, 0x42, 0x69, 0x72, 0x54, 0x5E,
0xF9, 0x6A, 0x99, 0xB0, 0x20, 0x60, 0xD7, 0x25, 0x4F, 0x37, 0xBA, 0xAA, 0xFB, 0xDD, 0x05, 0xF6,
0x32, 0x9A, 0x06, 0xA4, 0xBE, 0xC8, 0xDA, 0xC6, 0x4E, 0x08, 0x31, 0xBB, 0xC5, 0x04, 0x1B, 0x3D,
0x23, 0xFF, 0xF7, 0xB4, 0xF5, 0x43, 0x03, 0x77, 0x11, 0xB1, 0xD6, 0xB0, 0x5E, 0x47, 0xDE, 0xD5,
0x1D, 0x83, 0x2B, 0x5D, 0xEE, 0x82, 0x13, 0x9D, 0xCA, 0xCC, 0xD1, 0x65, 0xAF, 0xAD, 0x9D, 0x35,
0x12, 0x24, 0xF7, 0x35, 0x4A, 0xE3, 0xE8, 0x8E, 0x0C, 0x66, 0x2E, 0x79, 0x5A, 0x38, 0xCB, 0xE7,
0xE1, 0x65, 0x34, 0xBE, 0xE4, 0x6C, 0xFE, 0x81, 0xF2, 0xD9, 0x09, 0x4D, 0x7C, 0x16, 0x71, 0x1A,
0xA5, 0xA2, 0x06, 0xBD, 0x4A, 0xE3, 0xCF, 0x1E, 0x4F, 0xE3, 0x66, 0x66, 0x17, 0xF1, 0x2B, 0x7B,
0x38, 0xF1, 0xC2, 0xB9, 0x18, 0xAC, 0x40, 0xE4, 0xAD, 0x0B, 0x6E, 0xDA, 0xBB, 0x2E, 0x58, 0x71,
0x31, 0x45, 0x47, 0x69, 0x42, 0x2E, 0x79, 0xEC, 0x65, 0x37, 0xC0, 0x99, 0x58, 0x7A, 0x43, 0x50,
0x06, 0x36, 0xDB, 0x1B, 0x61, 0x5E, 0x5E, 0x97, 0x7F, 0x8A, 0x59, 0x3A, 0x6F, 0x0F, 0xBE, 0x66,
0xAC, 0x31, 0x9E, 0xDC, 0xBA, 0x2A, 0x28, 0x67, 0x57, 0x39, 0xC1, 0x6A, 0xEB, 0x2A, 0x90, 0xD7,
0xD1, 0xB8, 0x13, 0x62, 0x61, 0x5B, 0x05, 0x50, 0x68, 0x29, 0xF2, 0x47, 0x2A, 0xD4, 0x1F, 0x69,
0x63, 0xA8, 0xF3, 0x56, 0x38, 0x8C, 0x62, 0x3A, 0x9D, 0x2E, 0x4B, 0x4F, 0xA7, 0xC3, 0xE8, 0x76,
0x9E, 0x55, 0x15, 0xCF, 0x9F, 0xD5, 0x6B, 0x49, 0xDB, 0x45, 0xE2, 0xC6, 0xD5, 0xFD, 0xD4, 0x7B,
0xE9, 0xEE, 0xBF, 0x95, 0x16, 0x39, 0x23, 0xB2, 0xB3, 0xD0, 0x60, 0xA9, 0xC7, 0x59, 0x7C, 0x9A,
0x46, 0xBE, 0x20, 0x2A, 0x3F, 0x4D, 0xA4, 0x50, 0xC9, 0xBC, 0x16, 0x48, 0xEB, 0xAE, 0x5A, 0x3A,
0xE7, 0xF0, 0xBF, 0x09, 0x06, 0x82, 0x15, 0xE1, 0x96, 0x2D, 0xDD, 0xDE, 0x1F, 0x5B, 0xDE, 0x1F,
0x57, 0x78, 0x5F, 0x90, 0xA9, 0x18, 0xCD, 0x07, 0x3A, 0xE6, 0x33, 0x11, 0x27, 0x85, 0xD5, 0x4D,
0x77, 0x01, 0x94, 0x25, 0x43, 0x89, 0xD0, 0x2C, 0x27, 0x75, 0x08, 0x9A, 0xE4, 0x99, 0x3E, 0xCD,
0xBC, 0x97, 0x35, 0xAB, 0xDE, 0xD8, 0x11, 0x26, 0x14, 0x8F, 0x50, 0xE4, 0x9C, 0x34, 0x23, 0xE5,
0x76, 0x65, 0xF0, 0xD6, 0x9A, 0xAB, 0x04, 0xE9, 0x4A, 0x76, 0x9B, 0x1C, 0xFB, 0x1D, 0x8B, 0x6F,
0xED, 0x45, 0x09, 0xB6, 0x5B, 0x94, 0x99, 0xE4, 0x3F, 0x9F, 0x31, 0xCE, 0xF6, 0xB8, 0x30, 0x69,
0x20, 0x24, 0xF8, 0x64, 0x42, 0x6F, 0x86, 0xFF, 0xFD, 0xF5, 0xF7, 0xBF, 0x7F, 0xFE, 0x53, 0x0D,
0xB5, 0x66, 0xD8, 0xC7, 0xEC, 0xD7, 0x78, 0xFA, 0xA7, 0xFC, 0x4B, 0xC9, 0x79, 0x11, 0x72, 0x46,
0xA2, 0x44, 0xC6, 0xEA, 0xF6, 0xF8, 0xBA, 0xE9, 0x6C, 0x53, 0xE1, 0x52, 0xA3, 0xB7, 0x24, 0xE2,
0xD7, 0x12, 0x8D, 0x86, 0x6D, 0x42, 0xD3, 0x04, 0x4E, 0x21, 0x1A, 0x85, 0xBC, 0x45, 0xA6, 0xE5,
0x18, 0x36, 0x04, 0x3B, 0xCA, 0xC6, 0x2A, 0x8B, 0x5A, 0x36, 0x6A, 0xD9, 0xA8, 0x65, 0xE3, 0x21,
0xC9, 0x46, 0xD0, 0xE6, 0x99, 0xF5, 0x65, 0xA3, 0x22, 0x78, 0x53, 0xD9, 0xA8, 0x80, 0xD0, 0xB2,
0x71, 0x6B, 0xD9, 0x98, 0x64, 0xB3, 0x7F, 0x41, 0x7C, 0xC1, 0xCF, 0xF7, 0x58, 0xA3, 0xE1, 0xF7,
0x5A, 0xA3, 0xF7, 0x2F, 0xB9, 0x12, 0x41, 0x58, 0xFB, 0xCE, 0xE7, 0x43, 0x0B, 0xD7, 0x07, 0x50,
0x3A, 0x10, 0x19, 0xB6, 0x6B, 0x1A, 0x0E, 0xB6, 0x4A, 0xA5, 0x03, 0x0C, 0x80, 0xC4, 0x7F, 0x26,
0xB0, 0x76, 0x54, 0x3A, 0x50, 0x2B, 0x1D, 0xAD, 0x74, 0xB4, 0xD2, 0x39, 0x40, 0xA5, 0x03, 0x77,
0x51, 0x3A, 0x8A, 0xE0, 0x4D, 0x95, 0x8E, 0x02, 0x42, 0x2B, 0x9D, 0xAD, 0x95, 0xCE, 0x94, 0x86,
0xA2, 0xBE, 0x5F, 0x30, 0x2E, 0xB8, 0x79, 0x7F, 0xA5, 0xB1, 0xDE, 0x4B, 0x3E, 0xD1, 0xDE, 0x55,
0xC2, 0x02, 0x41, 0xD5, 0x39, 0x4B, 0x54, 0xA7, 0x98, 0x4D, 0xA7, 0x15, 0x50, 0xE7, 0x94, 0xFB,
0xB3, 0xC2, 0xB5, 0xE4, 0x18, 0x20, 0xA1, 0xB4, 0xED, 0xEB, 0x81, 0xC9, 0x7C, 0xDB, 0x61, 0x5E,
0x79, 0x89, 0x41, 0x20, 0x75, 0x6B, 0x34, 0x2E, 0xAE, 0x61, 0x5E, 0x0B, 0x4A, 0x35, 0xA8, 0xA6,
0x75, 0x05, 0xD0, 0x47, 0xEF, 0x7A, 0xC5, 0x90, 0x9A, 0xD6, 0x75, 0x80, 0x54, 0x03, 0x6A, 0x18,
0xEF, 0x5C, 0x06, 0x23, 0x1A, 0x76, 0xCD, 0x51, 0xC3, 0xBC, 0x16, 0x54, 0x27, 0x88, 0xD6, 0x6A,
0xA5, 0x56, 0x03, 0x36, 0x86, 0x00, 0x3A, 0x0E, 0xC4, 0x95, 0x56, 0x03, 0xAE, 0x8B, 0xA0, 0x0B,
0x5C, 0xBC, 0xA3, 0x56, 0x43, 0x5A, 0xAB, 0x69, 0xAD, 0xA6, 0xB5, 0xDA, 0x01, 0x6A, 0x35, 0xD4,
0xE6, 0x99, 0xF5, 0xB5, 0x9A, 0x22, 0x78, 0x53, 0xAD, 0xA6, 0x80, 0xD0, 0x5A, 0x6D, 0x6B, 0xAD,
0xF6, 0x85, 0xB1, 0x70, 0xAF, 0x67, 0x99, 0x5E, 0x70, 0x46, 0xA2, 0x29, 0x9F, 0x0D, 0x4D, 0x67,
0x79, 0x4E, 0xB8, 0x68, 0x54, 0x46, 0xD1, 0xE4, 0x7D, 0x92, 0x9D, 0xE6, 0x79, 0xC1, 0xA9, 0xE8,
0x8D, 0xC5, 0xB5, 0xB3, 0xBE, 0x86, 0x41, 0xD7, 0xE1, 0xB2, 0x0E, 0x03, 0x2C, 0x2A, 0x2F, 0xC2,
0xE5, 0x13, 0x45, 0x36, 0x46, 0x36, 0x74, 0x45, 0x6D, 0xB6, 0xDC, 0x1D, 0xCB, 0xB0, 0xA9, 0xCB,
0xB0, 0x2E, 0xC3, 0xBA, 0x0C, 0x1F, 0x60, 0x19, 0x36, 0x77, 0x29, 0xC3, 0x8A, 0xE0, 0x4D, 0xCB,
0xB0, 0x02, 0x42, 0x97, 0x61, 0xFD, 0x4C, 0x91, 0x7E, 0xA6, 0xE8, 0xBE, 0x64, 0xC6, 0x06, 0x8B,
0xF2, 0x11, 0x3D, 0x53, 0xB4, 0x48, 0xBC, 0x3E, 0xAF, 0xEC, 0x4C, 0x27, 0xDC, 0x2E, 0x9D, 0x0F,
0x73, 0x00, 0xAD, 0x13, 0x7A, 0x77, 0x42, 0xD1, 0xB6, 0x09, 0xFD, 0xF6, 0x0F, 0xA0, 0x37, 0x98,
0x45, 0x73, 0xBB, 0x59, 0xD4, 0xA7, 0x15, 0xFA, 0xB4, 0x42, 0x9F, 0x56, 0x1C, 0xF2, 0x8D, 0x6D,
0x6D, 0x77, 0x63, 0xEB, 0xAD, 0xAD, 0x6F, 0x62, 0x6B, 0x0B, 0xBA, 0xC8, 0x40, 0xC0, 0xAA, 0x7E,
0x59, 0x0E, 0x59, 0x06, 0x84, 0x06, 0xB0, 0xEC, 0x5D, 0x7F, 0x5D, 0xAE, 0x5A, 0x55, 0x7A, 0x6B,
0x4B, 0x6F, 0x6D, 0xE9, 0xAD, 0xAD, 0x43, 0xDA, 0xDA, 0xB2, 0xDA, 0x34, 0xB3, 0xFE, 0xD6, 0x96,
0x22, 0x78, 0xD3, 0xAD, 0x2D, 0x05, 0x84, 0xDE, 0xDA, 0xDA, 0x7A, 0x6B, 0xCB, 0x4F, 0xC5, 0xF7,
0x94, 0xF0, 0x84, 0xC6, 0xBF, 0x78, 0xE1, 0x1E, 0x05, 0xF6, 0xF7, 0x58, 0x1A, 0x2D, 0xCB, 0x00,
0x08, 0x1B, 0x66, 0xF9, 0xF4, 0x05, 0x76, 0x6D, 0x0B, 0x00, 0x6C, 0xB8, 0xD6, 0xAE, 0x4F, 0x5F,
0xD8, 0xBA, 0x36, 0xEA, 0xDA, 0xA8, 0x6B, 0xE3, 0xBE, 0x6B, 0xE3, 0xFE, 0x9E, 0xA1, 0x87, 0x86,
0x6B, 0x40, 0x21, 0x9A, 0x41, 0xC1, 0x0C, 0x8E, 0x85, 0x50, 0x76, 0x48, 0x6C, 0x19, 0xBB, 0x32,
0x03, 0xD6, 0xCC, 0xA0, 0x99, 0x41, 0x33, 0xC3, 0x01, 0xAA, 0x66, 0xBB, 0xAD, 0x40, 0xD6, 0x57,
0xCD, 0xB8, 0x1D, 0xBC, 0xA9, 0x6A, 0x56, 0x40, 0x1C, 0x94, 0x6A, 0x0E, 0xD3, 0x80, 0xD3, 0x79,
0x40, 0x4E, 0xCA, 0xF7, 0x07, 0xAD, 0xA3, 0x9D, 0x95, 0x68, 0x45, 0x7E, 0x81, 0xA1, 0x02, 0x58,
0xAD, 0x16, 0xF5, 0xC1, 0xB2, 0x3E, 0x58, 0xD6, 0x07, 0xCB, 0xF7, 0x72, 0xB0, 0xFC, 0xCD, 0x1D,
0x27, 0x3E, 0xC0, 0xF7, 0x4B, 0xE8, 0x22, 0xD3, 0x71, 0xA1, 0x83, 0xCB, 0x77, 0x4E, 0x38, 0x26,
0x30, 0x91, 0x05, 0x91, 0x01, 0x9C, 0x1D, 0x55, 0x64, 0xB5, 0x5F, 0xAE, 0x55, 0xA4, 0x56, 0x91,
0x5A, 0x45, 0x3E, 0xBE, 0xEF, 0x97, 0x08, 0x1A, 0x26, 0x30, 0x90, 0xEB, 0x56, 0x1B, 0x4F, 0xD0,
0x31, 0x91, 0x0B, 0xB1, 0xBB, 0x2B, 0x31, 0xB8, 0x9A, 0x18, 0x34, 0x31, 0x68, 0x62, 0x78, 0xB4,
0xC4, 0x00, 0xB1, 0x6D, 0x02, 0x17, 0xC3, 0xEA, 0xE5, 0x0D, 0xD8, 0x74, 0x21, 0x04, 0x8E, 0x68,
0xD9, 0xF5, 0xB8, 0x76, 0xF1, 0x7D, 0x4B, 0x53, 0x83, 0xA6, 0x06, 0x4D, 0x0D, 0x8F, 0x90, 0x1A,
0x10, 0x14, 0xDF, 0x28, 0x0C, 0xCB, 0x2E, 0xF7, 0xA4, 0xB1, 0x61, 0x59, 0xAE, 0xEB, 0xD8, 0xB6,
0x85, 0x76, 0xA5, 0x06, 0xFD, 0x0A, 0x3B, 0x4D, 0x0D, 0x9A, 0x1A, 0x1E, 0x2F, 0x35, 0x08, 0xC5,
0x80, 0x4D, 0x0B, 0x98, 0x4E, 0xF5, 0xCA, 0x27, 0x1B, 0x58, 0x8E, 0xED, 0x42, 0xE4, 0xEC, 0xFC,
0x72, 0x4B, 0xFD, 0xCE, 0x27, 0x4D, 0x0D, 0x9A, 0x1A, 0x1E, 0x31, 0x35, 0x60, 0xC7, 0x72, 0x30,
0x06, 0xD5, 0x1E, 0x24, 0xB6, 0x4C, 0x64, 0xDB, 0x0E, 0xC2, 0xF6, 0xAE, 0x5B, 0x0D, 0x40, 0xBF,
0x62, 0x44, 0x53, 0x83, 0xA6, 0x86, 0xFB, 0xA7, 0x86, 0x41, 0x7F, 0xF9, 0x67, 0x69, 0x06, 0xFD,
0xE5, 0x9F, 0x7A, 0x1A, 0x64, 0x7F, 0x2E, 0x6A, 0xF8, 0xE4, 0x7F, 0x50, 0x4B, 0x07, 0x08, 0x9F,
0x7E, 0x60, 0xC2, 0x2B, 0x07, 0x00, 0x00, 0x7E, 0x6A, 0x00, 0x00, 0x50, 0x4B, 0x01, 0x02, 0x14,
0x00, 0x14, 0x00, 0x08, 0x08, 0x08, 0x00, 0x8A, 0x81, 0x3E, 0x56, 0xF2, 0xB2, 0xDF, 0xE7, 0xD1,
0x06, 0x00, 0x00, 0x66, 0x4D, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x70, 0x6D, 0x7A, 0x2F, 0x74, 0x65,
0x6D, 0x70, 0x6C, 0x61, 0x74, 0x65, 0x2E, 0x6B, 0x6D, 0x6C, 0x50, 0x4B, 0x01, 0x02, 0x14, 0x00,
0x14, 0x00, 0x08, 0x08, 0x08, 0x00, 0x8A, 0x81, 0x3E, 0x56, 0x9F, 0x7E, 0x60, 0xC2, 0x2B, 0x07,
0x00, 0x00, 0x7E, 0x6A, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x77, 0x70, 0x6D, 0x7A, 0x2F, 0x77, 0x61, 0x79,
0x6C, 0x69, 0x6E, 0x65, 0x73, 0x2E, 0x77, 0x70, 0x6D, 0x6C, 0x50, 0x4B, 0x05, 0x06, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7B, 0x0E, 0x00, 0x00, 0x00, 0x00
};
#endif /* __waypoint_v3_test_file_kmz_h_included */

View File

@ -23,8 +23,6 @@
*/
/* Includes ------------------------------------------------------------------*/
#ifdef SYSTEM_ARCH_LINUX
#include "test_widget_speaker.h"
#include "dji_logger.h"
#include <stdlib.h>
@ -92,6 +90,7 @@ static T_DjiReturnCode ReceiveTtsData(E_DjiWidgetTransmitDataEvent event,
uint32_t offset, uint8_t *buf, uint16_t size);
static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
uint32_t offset, uint8_t *buf, uint16_t size);
#ifdef SYSTEM_ARCH_LINUX
static void *DjiTest_WidgetSpeakerTask(void *arg);
static uint32_t DjiTest_GetVoicePlayProcessId(void);
static uint32_t DjiTest_KillVoicePlayProcess(uint32_t pid);
@ -99,6 +98,7 @@ static T_DjiReturnCode DjiTest_DecodeAudioData(void);
static T_DjiReturnCode DjiTest_PlayAudioData(void);
static T_DjiReturnCode DjiTest_PlayTtsData(void);
static T_DjiReturnCode DjiTest_CheckFileMd5Sum(const char *path, uint8_t *buf, uint16_t size);
#endif
/* Exported functions definition ---------------------------------------------*/
T_DjiReturnCode DjiTest_WidgetSpeakerStartService(void)
@ -149,17 +149,20 @@ T_DjiReturnCode DjiTest_WidgetSpeakerStartService(void)
return returnCode;
}
#ifdef SYSTEM_ARCH_LINUX
if (osalHandler->TaskCreate("user_widget_speaker_task", DjiTest_WidgetSpeakerTask, WIDGET_SPEAKER_TASK_STACK_SIZE,
NULL,
&s_widgetSpeakerTestThread) != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Dji widget speaker test task create error.");
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
#endif
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/* Private functions definition-----------------------------------------------*/
#ifdef SYSTEM_ARCH_LINUX
static uint32_t DjiTest_GetVoicePlayProcessId(void)
{
FILE *fp;
@ -217,21 +220,21 @@ static T_DjiReturnCode DjiTest_DecodeAudioData(void)
/*! Attention: you can use "ffmpeg -i xxx.mp3 -ar 16000 -ac 1 out.wav" and use opus-tools to generate opus file for test */
fin = fopen(WIDGET_SPEAKER_AUDIO_OPUS_FILE_NAME, "r");
if (fin == NULL) {
fprintf(stderr, "failed to open input file: %s\n", strerror(errno));
return EXIT_FAILURE;
}
/* Create a new decoder state. */
decoder = opus_decoder_create(WIDGET_SPEAKER_AUDIO_OPUS_SAMPLE_RATE, WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, &err);
if (err < 0) {
fprintf(stderr, "failed to create decoder: %s\n", opus_strerror(err));
USER_LOG_ERROR("failed to open input file: %s\n", strerror(errno));
return EXIT_FAILURE;
}
fout = fopen(WIDGET_SPEAKER_AUDIO_PCM_FILE_NAME, "w");
if (fout == NULL) {
fprintf(stderr, "failed to open output file: %s\n", strerror(errno));
return EXIT_FAILURE;
USER_LOG_ERROR("failed to open output file: %s\n", strerror(errno));
goto open_pcm_audio_failed;
}
/* Create a new decoder state. */
decoder = opus_decoder_create(WIDGET_SPEAKER_AUDIO_OPUS_SAMPLE_RATE, WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, &err);
if (err < 0) {
USER_LOG_ERROR("failed to create decoder: %s\n", opus_strerror(err));
goto create_decoder_failed;
}
while (1) {
@ -251,8 +254,8 @@ static T_DjiReturnCode DjiTest_DecodeAudioData(void)
the frame size returned. */
frame_size = opus_decode(decoder, cbits, nbBytes, out, WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE, 0);
if (frame_size < 0) {
fprintf(stderr, "decoder failed: %s\n", opus_strerror(frame_size));
return EXIT_FAILURE;
USER_LOG_ERROR("decoder failed: %s\n", opus_strerror(frame_size));
goto decode_data_failed;
}
USER_LOG_DEBUG("decode data to file: %d\r\n", frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS);
@ -265,16 +268,18 @@ static T_DjiReturnCode DjiTest_DecodeAudioData(void)
fwrite(pcm_bytes, sizeof(short), frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, fout);
}
/*Destroy the encoder state*/
opus_decoder_destroy(decoder);
fclose(fin);
fclose(fout);
USER_LOG_INFO("Decode Finished...");
s_isDecodeFinished = true;
decode_data_failed:
opus_decoder_destroy(decoder);
create_decoder_failed:
fclose(fout);
open_pcm_audio_failed:
fclose(fin);
#endif
return EXIT_SUCCESS;
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
static T_DjiReturnCode DjiTest_PlayAudioData(void)
@ -311,17 +316,19 @@ static T_DjiReturnCode DjiTest_PlayTtsData(void)
} else {
txtFile = fopen(WIDGET_SPEAKER_TTS_FILE_NAME, "r");
if (txtFile == NULL) {
fprintf(stderr, "failed to open input file: %s\n", strerror(errno));
USER_LOG_ERROR("failed to open input file: %s\n", strerror(errno));
return EXIT_FAILURE;
}
readLen = fread(data, 1, WIDGET_SPEAKER_TTS_FILE_MAX_SIZE, txtFile);
readLen = fread(data, 1, WIDGET_SPEAKER_TTS_FILE_MAX_SIZE - 1, txtFile);
if (readLen <= 0) {
USER_LOG_ERROR("Read tts file failed, error code: %d", readLen);
fclose(txtFile);
return DJI_ERROR_SYSTEM_MODULE_CODE_NOT_FOUND;
}
data[readLen] = '\0';
fclose(txtFile);
USER_LOG_INFO("Read tts file success, len: %d", readLen);
@ -358,7 +365,7 @@ static T_DjiReturnCode DjiTest_CheckFileMd5Sum(const char *path, uint8_t *buf, u
uint16_t readLen;
T_DjiReturnCode returnCode;
uint8_t readBuf[1024];
uint8_t md5Sum[16];
uint8_t md5Sum[16] = {0};
FILE *file = NULL;;
UtilMd5_Init(&md5Ctx);
@ -400,6 +407,7 @@ static T_DjiReturnCode DjiTest_CheckFileMd5Sum(const char *path, uint8_t *buf, u
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
#endif
static void SetSpeakerState(E_DjiWidgetSpeakerState speakerState)
{
@ -492,10 +500,12 @@ static T_DjiReturnCode StartPlay(void)
uint32_t pid;
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
#ifdef SYSTEM_ARCH_LINUX
pid = DjiTest_GetVoicePlayProcessId();
if (pid != 0) {
DjiTest_KillVoicePlayProcess(pid);
}
#endif
osalHandler->TaskSleepMs(5);
USER_LOG_INFO("Start widget speaker play");
@ -519,10 +529,12 @@ static T_DjiReturnCode StopPlay(void)
USER_LOG_INFO("Stop widget speaker play");
s_speakerState.state = DJI_WIDGET_SPEAKER_STATE_IDEL;
#ifdef SYSTEM_ARCH_LINUX
pid = DjiTest_GetVoicePlayProcessId();
if (pid != 0) {
DjiTest_KillVoicePlayProcess(pid);
}
#endif
returnCode = osalHandler->MutexUnlock(s_speakerMutex);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
@ -588,15 +600,18 @@ static T_DjiReturnCode ReceiveTtsData(E_DjiWidgetTransmitDataEvent event,
if (event == DJI_WIDGET_TRANSMIT_DATA_EVENT_START) {
USER_LOG_INFO("Create tts file.");
#ifdef SYSTEM_ARCH_LINUX
s_ttsFile = fopen(WIDGET_SPEAKER_TTS_FILE_NAME, "wb");
if (s_ttsFile == NULL) {
USER_LOG_ERROR("Open tts file error.");
}
#endif
if (s_speakerState.state != DJI_WIDGET_SPEAKER_STATE_PLAYING) {
SetSpeakerState(DJI_WIDGET_SPEAKER_STATE_TRANSMITTING);
}
} else if (event == DJI_WIDGET_TRANSMIT_DATA_EVENT_TRANSMIT) {
USER_LOG_INFO("Transmit tts file, offset: %d, size: %d", offset, size);
#ifdef SYSTEM_ARCH_LINUX
if (s_ttsFile != NULL) {
fseek(s_ttsFile, offset, SEEK_SET);
writeLen = fwrite(buf, 1, size, s_ttsFile);
@ -604,11 +619,13 @@ static T_DjiReturnCode ReceiveTtsData(E_DjiWidgetTransmitDataEvent event,
USER_LOG_ERROR("Write tts file error %d", writeLen);
}
}
#endif
if (s_speakerState.state != DJI_WIDGET_SPEAKER_STATE_PLAYING) {
SetSpeakerState(DJI_WIDGET_SPEAKER_STATE_TRANSMITTING);
}
} else if (event == DJI_WIDGET_TRANSMIT_DATA_EVENT_FINISH) {
USER_LOG_INFO("Close tts file.");
#ifdef SYSTEM_ARCH_LINUX
if (s_ttsFile != NULL) {
fclose(s_ttsFile);
}
@ -617,6 +634,7 @@ static T_DjiReturnCode ReceiveTtsData(E_DjiWidgetTransmitDataEvent event,
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("File md5 sum check failed");
}
#endif
if (s_speakerState.state != DJI_WIDGET_SPEAKER_STATE_PLAYING) {
SetSpeakerState(DJI_WIDGET_SPEAKER_STATE_IDEL);
}
@ -634,6 +652,7 @@ static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
if (event == DJI_WIDGET_TRANSMIT_DATA_EVENT_START) {
s_isDecodeFinished = false;
#ifdef SYSTEM_ARCH_LINUX
USER_LOG_INFO("Create voice file.");
s_audioFile = fopen(WIDGET_SPEAKER_AUDIO_OPUS_FILE_NAME, "wb");
if (s_audioFile == NULL) {
@ -642,6 +661,7 @@ static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
if (s_speakerState.state != DJI_WIDGET_SPEAKER_STATE_PLAYING) {
SetSpeakerState(DJI_WIDGET_SPEAKER_STATE_TRANSMITTING);
}
#endif
memcpy(&transDataContent, buf, size);
s_decodeBitrate = transDataContent.transDataStartContent.fileDecodeBitrate;
@ -649,6 +669,7 @@ static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
transDataContent.transDataStartContent.fileDecodeBitrate);
} else if (event == DJI_WIDGET_TRANSMIT_DATA_EVENT_TRANSMIT) {
USER_LOG_INFO("Transmit voice file, offset: %d, size: %d", offset, size);
#ifdef SYSTEM_ARCH_LINUX
if (s_audioFile != NULL) {
fseek(s_audioFile, offset, SEEK_SET);
writeLen = fwrite(buf, 1, size, s_audioFile);
@ -656,6 +677,7 @@ static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
USER_LOG_ERROR("Write tts file error %d", writeLen);
}
}
#endif
if (s_speakerState.state != DJI_WIDGET_SPEAKER_STATE_PLAYING) {
SetSpeakerState(DJI_WIDGET_SPEAKER_STATE_TRANSMITTING);
}
@ -665,21 +687,25 @@ static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
fclose(s_audioFile);
}
#ifdef SYSTEM_ARCH_LINUX
returnCode = DjiTest_CheckFileMd5Sum(WIDGET_SPEAKER_AUDIO_OPUS_FILE_NAME, buf, size);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("File md5 sum check failed");
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
}
#endif
if (s_speakerState.state != DJI_WIDGET_SPEAKER_STATE_PLAYING) {
SetSpeakerState(DJI_WIDGET_SPEAKER_STATE_IDEL);
}
#ifdef SYSTEM_ARCH_LINUX
DjiTest_DecodeAudioData();
#endif
}
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
#ifdef SYSTEM_ARCH_LINUX
#ifndef __CC_ARM
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-noreturn"
@ -752,7 +778,6 @@ static void *DjiTest_WidgetSpeakerTask(void *arg)
#ifndef __CC_ARM
#pragma GCC diagnostic pop
#endif
#endif
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/

View File

@ -34,7 +34,6 @@
extern "C" {
#endif
#ifdef SYSTEM_ARCH_LINUX
/* Exported constants --------------------------------------------------------*/
T_DjiReturnCode DjiTest_WidgetSpeakerStartService(void);
@ -43,8 +42,6 @@ T_DjiReturnCode DjiTest_WidgetSpeakerStartService(void);
/* Exported functions --------------------------------------------------------*/
#endif
#ifdef __cplusplus
}
#endif

View File

@ -45,6 +45,8 @@
#include <payload_collaboration/test_payload_collaboration.h>
#include <waypoint_v3/test_waypoint_v3.h>
#include "dji_sdk_config.h"
#include "hms/hms_text_c/en/hms_text_config_json.h"
#include "dji_hms.h"
/* Private constants ---------------------------------------------------------*/
#define WIDGET_DIR_PATH_LEN_MAX (256)
@ -83,10 +85,27 @@ typedef enum {
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_UNKNOWN = 0xFF,
} E_DjiExtensionPortSampleIndex;
typedef enum {
E_DJI_HMS_ERROR_CODE_INDEX1 = 0,
E_DJI_HMS_ERROR_CODE_INDEX2,
E_DJI_HMS_ERROR_CODE_INDEX3,
E_DJI_HMS_ERROR_CODE_INDEX4,
E_DJI_HMS_ERROR_CODE_INDEX5,
}E_DjiExtensionPortHmsErrorCodeIndex;
typedef enum {
E_DJI_HMS_ERROR_LEVEL_INDEX1 = 0,
E_DJI_HMS_ERROR_LEVEL_INDEX2,
E_DJI_HMS_ERROR_LEVEL_INDEX3,
E_DJI_HMS_ERROR_LEVEL_INDEX4,
E_DJI_HMS_ERROR_LEVEL_INDEX5,
}E_DjiExtensionPortHmsErrorLevelIndex;
typedef struct {
bool valid;
char content[WIDGET_LOG_STRING_MAX_SIZE];
@ -105,6 +124,10 @@ static T_DjiReturnCode DjiTestWidget_TriggerChangeAlias(void);
static T_DjiTaskHandle s_widgetTestThread;
static T_DjiTaskHandle s_widgetInteractionTestThread;
static E_DjiExtensionPortSampleIndex s_extensionPortSampleIndex = E_DJI_SAMPLE_INDEX_FC_SUBSCRIPTION;
static E_DjiExtensionPortHmsErrorCodeIndex s_extensionPortErrcodeIndex = E_DJI_HMS_ERROR_CODE_INDEX1;
static E_DjiExtensionPortHmsErrorLevelIndex s_extensionPortErrLevelIndex = E_DJI_HMS_ERROR_LEVEL_INDEX1;
static bool s_isInjectErrcode = false;
static bool s_isEliminateErrcode = false;
static bool s_isallowRunFlightControlSample = false;
static bool s_isSampleStart = false;
static E_DjiMountPosition s_mountPosition = DJI_MOUNT_POSITION_PAYLOAD_PORT_NO1;
@ -124,6 +147,10 @@ static const T_DjiWidgetHandlerListItem s_widgetHandlerList[] = {
{8, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
{9, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
{10, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
{11, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
{12, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
{13, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
{14, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
};
static const char *s_widgetTypeNameArray[] = {
@ -334,6 +361,8 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
{
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
T_DjiReturnCode returnCode;
uint32_t errorCode;
E_DjiHmsErrorLevel errorLevel;
returnCode = DjiAircraftInfo_GetBaseInfo(&s_aircraftInfoBaseInfo);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
@ -344,6 +373,78 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
while (1) {
osalHandler->TaskSleepMs(100);
if (s_isInjectErrcode == true && s_isEliminateErrcode == false) {
switch (s_extensionPortErrcodeIndex) {
case E_DJI_HMS_ERROR_CODE_INDEX1:
errorCode = 0x1E020000;
break;
case E_DJI_HMS_ERROR_CODE_INDEX2:
errorCode = 0x1E020001;
break;
case E_DJI_HMS_ERROR_CODE_INDEX3:
errorCode = 0x1E020002;
break;
case E_DJI_HMS_ERROR_CODE_INDEX4:
errorCode = 0x1E020003;
break;
case E_DJI_HMS_ERROR_CODE_INDEX5:
errorCode = 0x1E020004;
break;
default:
break;
}
switch (s_extensionPortErrLevelIndex) {
case E_DJI_HMS_ERROR_LEVEL_INDEX1:
errorLevel = DJI_HMS_ERROR_LEVEL_NONE;
break;
case E_DJI_HMS_ERROR_LEVEL_INDEX2:
errorLevel = DJI_HMS_ERROR_LEVEL_HINT;
break;
case E_DJI_HMS_ERROR_LEVEL_INDEX3:
errorLevel = DJI_HMS_ERROR_LEVEL_WARN;
break;
case E_DJI_HMS_ERROR_LEVEL_INDEX4:
errorLevel = DJI_HMS_ERROR_LEVEL_CRITICAL;
break;
case E_DJI_HMS_ERROR_LEVEL_INDEX5:
errorLevel = DJI_HMS_ERROR_LEVEL_FATAL;
break;
default:
break;
}
DjiHms_InjectHmsErrorCode(errorCode, errorLevel);
osalHandler->TaskSleepMs(500);
s_isInjectErrcode = false;
s_isEliminateErrcode = false;
continue;
}
if (s_isEliminateErrcode == true && s_isInjectErrcode == false) {
switch (s_extensionPortErrcodeIndex) {
case E_DJI_HMS_ERROR_CODE_INDEX1:
errorCode = 0x1E020000;
break;
case E_DJI_HMS_ERROR_CODE_INDEX2:
errorCode = 0x1E020001;
break;
case E_DJI_HMS_ERROR_CODE_INDEX3:
errorCode = 0x1E020002;
break;
case E_DJI_HMS_ERROR_CODE_INDEX4:
errorCode = 0x1E020003;
break;
case E_DJI_HMS_ERROR_CODE_INDEX5:
errorCode = 0x1E020004;
break;
default:
break;
}
DjiHms_EliminateHmsErrorCode(errorCode);
osalHandler->TaskSleepMs(500);
s_isInjectErrcode = false;
s_isEliminateErrcode = false;
continue;
}
if (s_isSampleStart != true) {
continue;
}
@ -495,12 +596,15 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
DjiTest_CameraManagerRunSample(s_mountPosition,
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_DOWNLOAD_AND_DELETE_MEDIA_FILE);
break;
case E_DJI_SAMPLE_INDEX_CAMMGR_THERMOMETRY:
DjiTest_CameraManagerRunSample(s_mountPosition,
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_THERMOMETRY);
break;
default:
break;
}
} else {
USER_LOG_WARN("Can't support on payload port.");
break;
}
USER_LOG_INFO("--------------------------------------------------------------------------------------------->");
@ -541,6 +645,28 @@ static T_DjiReturnCode DjiTestWidget_SetWidgetValue(E_DjiWidgetType widgetType,
}
}
if (widgetType == DJI_WIDGET_TYPE_LIST && index == 11) {
s_extensionPortErrcodeIndex = value;
}
if (widgetType == DJI_WIDGET_TYPE_LIST && index == 12) {
s_extensionPortErrLevelIndex = value;
}
if (widgetType == DJI_WIDGET_TYPE_BUTTON && index == 13) {
if (value == 1) {
s_isInjectErrcode = true;
s_isEliminateErrcode = false;
}
}
if (widgetType == DJI_WIDGET_TYPE_BUTTON && index == 14) {
if (value == 1) {
s_isInjectErrcode = false;
s_isEliminateErrcode = true;
}
}
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

View File

@ -218,6 +218,9 @@
},
{
"item_name": "28_test_cammgr-media_download"
},
{
"item_name": "29_test_cammgr-thermometry"
}
]
},
@ -225,7 +228,61 @@
"widget_index": 10,
"widget_type": "button",
"widget_name": "Run"
},
{
"widget_index": 11,
"widget_type": "list",
"widget_name": "Please Select Errcode",
"list_item": [
{
"item_name": "0x1E020000"
},
{
"item_name": "0x1E020001"
},
{
"item_name": "0x1E020002"
},
{
"item_name": "0x1E020003"
},
{
"item_name": "0x1E020004"
}
]
},
{
"widget_index": 12,
"widget_type": "list",
"widget_name": "Please Select ErrLevel",
"list_item": [
{
"item_name": "Error level 0"
},
{
"item_name": "Error level 1"
},
{
"item_name": "Error level 2"
},
{
"item_name": "Error level 3"
},
{
"item_name": "Error level 4"
}
]
},
{
"widget_index": 13,
"widget_type": "button",
"widget_name": "Inject"
},
{
"widget_index": 14,
"widget_type": "button",
"widget_name": "Eliminate"
}
]
}
}
}

View File

@ -218,6 +218,9 @@
},
{
"item_name": "28_test_cammgr-media_download"
},
{
"item_name": "29_test_cammgr-thermometry"
}
]
},
@ -225,7 +228,61 @@
"widget_index": 10,
"widget_type": "button",
"widget_name": "Run"
},
{
"widget_index": 11,
"widget_type": "list",
"widget_name": "Please Select Errcode",
"list_item": [
{
"item_name": "0x1E020000"
},
{
"item_name": "0x1E020001"
},
{
"item_name": "0x1E020002"
},
{
"item_name": "0x1E020003"
},
{
"item_name": "0x1E020004"
}
]
},
{
"widget_index": 12,
"widget_type": "list",
"widget_name": "Please Select ErrLevel",
"list_item": [
{
"item_name": "Error level0"
},
{
"item_name": "Error level1"
},
{
"item_name": "Error level2"
},
{
"item_name": "Error level3"
},
{
"item_name": "Error level4"
}
]
},
{
"widget_index": 13,
"widget_type": "button",
"widget_name": "Inject"
},
{
"widget_index": 14,
"widget_type": "button",
"widget_name": "Eliminate"
}
]
}
}
}

View File

@ -6,9 +6,9 @@
/* Contents of file widget_config.json */
#define widget_config_json_fileName "widget_config.json"
#define widget_config_json_fileSize 6000
#define widget_config_json_fileSize 7255
static const uint8_t widget_config_json_fileBinaryArray[6000] = {
static const uint8_t widget_config_json_fileBinaryArray[7255] = {
0x7B, 0x0A, 0x20, 0x20, 0x22, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x22, 0x3A, 0x20, 0x7B,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x61, 0x6A, 0x6F, 0x72, 0x22, 0x3A, 0x20, 0x31, 0x2C,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6D, 0x69, 0x6E, 0x6F, 0x72, 0x22, 0x3A, 0x20, 0x30, 0x0A,
@ -375,15 +375,94 @@ static const uint8_t widget_config_json_fileBinaryArray[6000] = {
0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x32, 0x38, 0x5F, 0x74,
0x65, 0x73, 0x74, 0x5F, 0x63, 0x61, 0x6D, 0x6D, 0x67, 0x72, 0x2D, 0x6D, 0x65, 0x64, 0x69, 0x61,
0x5F, 0x64, 0x6F, 0x77, 0x6E, 0x6C, 0x6F, 0x61, 0x64, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65,
0x74, 0x5F, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x22, 0x3A, 0x20, 0x31, 0x30, 0x2C, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x74, 0x79,
0x70, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x22, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x6E,
0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x52, 0x75, 0x6E, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x5D, 0x0A, 0x20, 0x20, 0x7D, 0x0A, 0x7D, 0x0A
0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x32, 0x39,
0x5F, 0x74, 0x65, 0x73, 0x74, 0x5F, 0x63, 0x61, 0x6D, 0x6D, 0x67, 0x72, 0x2D, 0x74, 0x68, 0x65,
0x72, 0x6D, 0x6F, 0x6D, 0x65, 0x74, 0x72, 0x79, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
0x5F, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x22, 0x3A, 0x20, 0x31, 0x30, 0x2C, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x74, 0x79, 0x70,
0x65, 0x22, 0x3A, 0x20, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x22, 0x2C, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x6E, 0x61,
0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x52, 0x75, 0x6E, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x69, 0x6E, 0x64, 0x65,
0x78, 0x22, 0x3A, 0x20, 0x31, 0x31, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x20, 0x22,
0x6C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x50,
0x6C, 0x65, 0x61, 0x73, 0x65, 0x20, 0x53, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x20, 0x45, 0x72, 0x72,
0x63, 0x6F, 0x64, 0x65, 0x22, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x6C, 0x69, 0x73, 0x74, 0x5F, 0x69, 0x74, 0x65, 0x6D, 0x22, 0x3A, 0x20, 0x5B, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65,
0x22, 0x3A, 0x20, 0x22, 0x30, 0x78, 0x31, 0x45, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x22, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22,
0x3A, 0x20, 0x22, 0x30, 0x78, 0x31, 0x45, 0x30, 0x32, 0x30, 0x30, 0x30, 0x31, 0x22, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A,
0x20, 0x22, 0x30, 0x78, 0x31, 0x45, 0x30, 0x32, 0x30, 0x30, 0x30, 0x32, 0x22, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20,
0x22, 0x30, 0x78, 0x31, 0x45, 0x30, 0x32, 0x30, 0x30, 0x30, 0x33, 0x22, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22,
0x30, 0x78, 0x31, 0x45, 0x30, 0x32, 0x30, 0x30, 0x30, 0x34, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x5D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67,
0x65, 0x74, 0x5F, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x22, 0x3A, 0x20, 0x31, 0x32, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x74,
0x79, 0x70, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x6C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x6E, 0x61,
0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x50, 0x6C, 0x65, 0x61, 0x73, 0x65, 0x20, 0x53, 0x65, 0x6C,
0x65, 0x63, 0x74, 0x20, 0x45, 0x72, 0x72, 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x22, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6C, 0x69, 0x73, 0x74, 0x5F, 0x69, 0x74, 0x65,
0x6D, 0x22, 0x3A, 0x20, 0x5B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69,
0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x45, 0x72, 0x72, 0x6F,
0x72, 0x20, 0x6C, 0x65, 0x76, 0x65, 0x6C, 0x30, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x45, 0x72, 0x72,
0x6F, 0x72, 0x20, 0x6C, 0x65, 0x76, 0x65, 0x6C, 0x31, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x45, 0x72,
0x72, 0x6F, 0x72, 0x20, 0x6C, 0x65, 0x76, 0x65, 0x6C, 0x32, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x45,
0x72, 0x72, 0x6F, 0x72, 0x20, 0x6C, 0x65, 0x76, 0x65, 0x6C, 0x33, 0x22, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x22, 0x69, 0x74, 0x65, 0x6D, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22,
0x45, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x6C, 0x65, 0x76, 0x65, 0x6C, 0x34, 0x22, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x5D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69,
0x64, 0x67, 0x65, 0x74, 0x5F, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x22, 0x3A, 0x20, 0x31, 0x33, 0x2C,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74,
0x5F, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x22,
0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65,
0x74, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x49, 0x6E, 0x6A, 0x65, 0x63, 0x74,
0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x2C, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67,
0x65, 0x74, 0x5F, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x22, 0x3A, 0x20, 0x31, 0x34, 0x2C, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F, 0x74,
0x79, 0x70, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x22, 0x2C, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x5F,
0x6E, 0x61, 0x6D, 0x65, 0x22, 0x3A, 0x20, 0x22, 0x45, 0x6C, 0x69, 0x6D, 0x69, 0x6E, 0x61, 0x74,
0x65, 0x22, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x5D,
0x0A, 0x20, 0x20, 0x7D, 0x0A, 0x7D, 0x0A
};
#endif /* __widget_config_json_h_included */