M350b版本
This commit is contained in:
@ -109,18 +109,10 @@ void DjiUser_RunCameraManagerSample(void)
|
||||
<< "| Available position: |"
|
||||
<<
|
||||
endl;
|
||||
cout
|
||||
<< "| [1] Select gimbal mount position at NO.1 payload port |"
|
||||
<<
|
||||
endl;
|
||||
cout
|
||||
<< "| [2] Select gimbal mount position at NO.2 payload port |"
|
||||
<<
|
||||
endl;
|
||||
cout
|
||||
<< "| [3] Select gimbal mount position at NO.3 payload port |"
|
||||
<<
|
||||
endl;
|
||||
std::cout
|
||||
<< "| [1 ~ 4] Select camera mount position at NO.1~NO.4 |"
|
||||
<<
|
||||
std::endl;
|
||||
cout
|
||||
<< "| [q] Quit |"
|
||||
<<
|
||||
@ -134,7 +126,7 @@ void DjiUser_RunCameraManagerSample(void)
|
||||
|
||||
posNum = atoi(mountPositionStr.c_str());
|
||||
|
||||
if (posNum > 3 || posNum < 1) {
|
||||
if (posNum > 4 || posNum < 1) {
|
||||
USER_LOG_ERROR("Input mount position is invalid");
|
||||
continue;
|
||||
} else {
|
||||
|
||||
@ -23,16 +23,25 @@
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
|
||||
#include <termios.h>
|
||||
|
||||
#include <utils/util_misc.h>
|
||||
|
||||
#include <utils/util_file.h>
|
||||
#include <utils/cJSON.h>
|
||||
#include <dji_aircraft_info.h>
|
||||
#include "test_flight_controller_command_flying.h"
|
||||
#include "dji_flight_controller.h"
|
||||
#include "dji_logger.h"
|
||||
#include "dji_fc_subscription.h"
|
||||
#include "cmath"
|
||||
#include <utils/cJSON.h>
|
||||
|
||||
#include <dji_aircraft_info.h>
|
||||
|
||||
#include "test_flight_controller_command_flying.h"
|
||||
|
||||
#include "dji_flight_controller.h"
|
||||
#include "cmath"
|
||||
#include "dji_logger.h"
|
||||
#include "cmath"
|
||||
#include "dji_fc_subscription.h"
|
||||
|
||||
|
||||
#ifdef OPEN_CV_INSTALLED
|
||||
|
||||
@ -84,6 +93,7 @@ static T_DjiFcSubscriptionControlDevice DjiUser_FlightControlGetValueOfControlDe
|
||||
static T_DjiFcSubscriptionSingleBatteryInfo DjiUser_FlightControlGetValueOfBattery1(void);
|
||||
static T_DjiFcSubscriptionSingleBatteryInfo DjiUser_FlightControlGetValueOfBattery2(void);
|
||||
static T_DjiReturnCode DjiUser_FlightControlUpdateConfig(void);
|
||||
static T_DjiReturnCode DjiUser_ShowCommandFlyingMenu(void);
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
@ -107,7 +117,9 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
return;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
osalHandler->TaskSleepMs(3000);
|
||||
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
|
||||
while (1) {
|
||||
osalHandler->TaskSleepMs(1);
|
||||
@ -119,7 +131,6 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
s_flyingCommand.z = 0;
|
||||
s_flyingCommand.yaw = 0;
|
||||
s_inputFlag = 0;
|
||||
USER_LOG_INFO(" - Front\r\n");
|
||||
break;
|
||||
case 'S':
|
||||
case 's':
|
||||
@ -128,7 +139,6 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
s_flyingCommand.z = 0;
|
||||
s_flyingCommand.yaw = 0;
|
||||
s_inputFlag = 0;
|
||||
USER_LOG_INFO(" - Near\r\n");
|
||||
break;
|
||||
case 'A':
|
||||
case 'a':
|
||||
@ -137,7 +147,6 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
s_flyingCommand.z = 0;
|
||||
s_flyingCommand.yaw = 0;
|
||||
s_inputFlag = 0;
|
||||
USER_LOG_INFO(" - Left\r\n");
|
||||
break;
|
||||
case 'D':
|
||||
case 'd':
|
||||
@ -146,7 +155,6 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
s_flyingCommand.z = 0;
|
||||
s_flyingCommand.yaw = 0;
|
||||
s_inputFlag = 0;
|
||||
USER_LOG_INFO(" - Right\r\n");
|
||||
break;
|
||||
case 'Q':
|
||||
case 'q':
|
||||
@ -155,7 +163,6 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
s_flyingCommand.z = s_flyingSpeed;
|
||||
s_flyingCommand.yaw = 0;
|
||||
s_inputFlag = 0;
|
||||
USER_LOG_INFO(" - Up\r\n");
|
||||
break;
|
||||
case 'E':
|
||||
case 'e':
|
||||
@ -164,7 +171,6 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
s_flyingCommand.z = -s_flyingSpeed;
|
||||
s_flyingCommand.yaw = 0;
|
||||
s_inputFlag = 0;
|
||||
USER_LOG_INFO(" - Down\r\n");
|
||||
break;
|
||||
case 'Z':
|
||||
case 'z':
|
||||
@ -173,7 +179,6 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
s_flyingCommand.z = 0;
|
||||
s_flyingCommand.yaw = -30;
|
||||
s_inputFlag = 0;
|
||||
USER_LOG_INFO(" - Yaw--\r\n");
|
||||
break;
|
||||
case 'C':
|
||||
case 'c':
|
||||
@ -182,96 +187,112 @@ void DjiUser_RunFlightControllerCommandFlyingSample(void)
|
||||
s_flyingCommand.z = 0;
|
||||
s_flyingCommand.yaw = 30;
|
||||
s_inputFlag = 0;
|
||||
USER_LOG_INFO(" - Yaw++\r\n");
|
||||
break;
|
||||
case 'R':
|
||||
case 'r':
|
||||
DjiFlightController_ObtainJoystickCtrlAuthority();
|
||||
DjiFlightController_StartTakeoff();
|
||||
USER_LOG_INFO(" - Take off\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'F':
|
||||
case 'f':
|
||||
DjiFlightController_StartForceLanding();
|
||||
USER_LOG_INFO(" - Force landing\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'H':
|
||||
case 'h':
|
||||
DjiFlightController_StartGoHome();
|
||||
USER_LOG_INFO(" - Start go home\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'Y':
|
||||
case 'y':
|
||||
DjiFlightController_CancelGoHome();
|
||||
USER_LOG_INFO(" - Cancel go home\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'G':
|
||||
case 'g':
|
||||
DjiFlightController_StartLanding();
|
||||
USER_LOG_INFO(" - Start landing\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'T':
|
||||
case 't':
|
||||
DjiFlightController_CancelLanding();
|
||||
USER_LOG_INFO(" - Cancel landing\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'V':
|
||||
case 'v':
|
||||
DjiFlightController_StartConfirmLanding();
|
||||
USER_LOG_INFO(" - Confirm landing\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'X':
|
||||
case 'x':
|
||||
s_homeLocation.longitude = (dji_f64_t) s_gpsPosition.x / 10000000;
|
||||
s_homeLocation.latitude = (dji_f64_t) s_gpsPosition.y / 10000000;
|
||||
DjiFlightController_SetHomeLocationUsingCurrentAircraftLocation();
|
||||
USER_LOG_INFO(" - Set home location\r\n");
|
||||
USER_LOG_INFO(" - Set home location (%.4f, %.4f)\r\n", s_homeLocation.longitude, s_homeLocation.latitude);
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'P':
|
||||
case 'p':
|
||||
DjiFlightController_EmergencyStopMotor(DJI_FLIGHT_CONTROLLER_ENABLE_EMERGENCY_STOP_MOTOR,
|
||||
(char *) "Test is ok");
|
||||
USER_LOG_INFO(" - Emergency stop motor\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'B':
|
||||
case 'b':
|
||||
DjiFlightController_TurnOnMotors();
|
||||
USER_LOG_INFO(" - Turn on motors\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'N':
|
||||
case 'n':
|
||||
DjiFlightController_TurnOffMotors();
|
||||
USER_LOG_INFO(" - Turn off motors\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'J':
|
||||
case 'j':
|
||||
DjiUser_FlightControlUpdateConfig();
|
||||
USER_LOG_INFO(" - Update config\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'I':
|
||||
case 'i':
|
||||
DjiFlightController_ArrestFlying();
|
||||
USER_LOG_INFO(" - Enable arrest flying\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'O':
|
||||
case 'o':
|
||||
DjiFlightController_CancelArrestFlying();
|
||||
USER_LOG_INFO(" - Disable arrest flying\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'K':
|
||||
case 'k':
|
||||
DjiFlightController_ExecuteEmergencyBrakeAction();
|
||||
USER_LOG_INFO(" - Brake\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'L':
|
||||
case 'l':
|
||||
DjiFlightController_CancelEmergencyBrakeAction();
|
||||
USER_LOG_INFO(" - Disable Brake\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
case 'M':
|
||||
case 'm':
|
||||
DjiFlightController_ObtainJoystickCtrlAuthority();
|
||||
USER_LOG_INFO(" - Obtain joystick ctrl authority\r\n");
|
||||
DjiUser_ShowCommandFlyingMenu();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -603,6 +624,9 @@ DjiUser_FlightCtrlJoystickCtrlAuthSwitchEventCb(T_DjiFlightControllerJoystickCtr
|
||||
case DJI_FLIGHT_CONTROLLER_NERA_FLIGHT_BOUNDARY_RESET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
USER_LOG_INFO("[Event] Current joystick ctrl authority is reset to rc due to near boundary\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_DOCK_REQUEST_CHANGE_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is change due to the dock request\r\n");
|
||||
break;
|
||||
default:
|
||||
USER_LOG_INFO("[Event] Unknown joystick ctrl authority event\r\n");
|
||||
}
|
||||
@ -1086,5 +1110,22 @@ static T_DjiReturnCode DjiUser_FlightControlUpdateConfig(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
#endif
|
||||
}
|
||||
static T_DjiReturnCode DjiUser_ShowCommandFlyingMenu(void)
|
||||
{
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
|
||||
osalHandler->TaskSleepMs(2);
|
||||
USER_LOG_INFO("Usage: [W] Front [A]-Left, [S]-Rear, [D]-Right");
|
||||
USER_LOG_INFO("Usage: [Q]-Up [E]-Down, [Z]-Yaw--, [C]-Yaw++");
|
||||
USER_LOG_INFO("Usage: [R]-Take off [F]-Force landing, [H]-Start go home, [Y]-Cancel go home");
|
||||
USER_LOG_INFO("Usage: [G]-Start landing [T]-Cancel landing, [V]-Confirm landing, [X]-Set home location");
|
||||
USER_LOG_INFO("Usage: [P]-Emergency stop motor, [B]-Turn on motors, [N]-Turn off motors, [J]-Update config");
|
||||
USER_LOG_INFO("Usage: [I]-Enable arrest flying, [O]-Disable arrest flying, [K]-Emergency brake, [L]-Diasble Brake");
|
||||
USER_LOG_INFO("Usage: [M]-Obtain joystick ctrl authority");
|
||||
osalHandler->TaskSleepMs(2);
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -63,6 +63,11 @@ start:
|
||||
<< "| [8] Waypoint 3.0 sample - run airline mission by kmz file (not support on M300 RTK) |\n"
|
||||
<< "| [9] Interest point sample - run interest point mission by settings (only support on M3E/M3T) |\n"
|
||||
<< "| [a] EU-C6 FTS trigger sample - receive fts callback to trigger parachute function (only support on M3D/M3DT) |\n"
|
||||
<< "| [b] Slow rotate blade sample, only support on M400 |\n"
|
||||
<< "| [c] Select FTS pwm trigger position, support on M4/M4T/M4D/M4TD |\n"
|
||||
<< "| [d] Select FTS pwm trigger position, support on M400 |\n"
|
||||
<< "| [e] Flight controller sample - set get perception parameters, support on M400 |\n"
|
||||
<< "| [f] Flight controller sample - set cmd start mission, support on M400 |\n"
|
||||
<< std::endl;
|
||||
|
||||
std::cin >> inputSelectSample;
|
||||
@ -100,6 +105,23 @@ start:
|
||||
case 'a':
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_FTS_TRIGGER);
|
||||
break;
|
||||
case 'b':
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SLOW_ROTATE_BLADE);
|
||||
break;
|
||||
case 'c':
|
||||
DjiTest_FtsPwmTriggerSample(DJI_MOUNT_POSITION_EXTENSION_PORT, "DJI_MOUNT_POSITION_EXTENSION_PORT");
|
||||
// or DJI_MOUNT_POSITION_EXTENSION_LITE_PORT
|
||||
DjiTest_FtsPwmTriggerSample(DJI_MOUNT_POSITION_EXTENSION_LITE_PORT, "DJI_MOUNT_POSITION_EXTENSION_LITE_PORT");
|
||||
break;
|
||||
case 'd': // for m400
|
||||
DjiTest_FtsPwmTriggerSample(DJI_MOUNT_POSITION_EXTENSION_PORT_V2_NO4, "DJI_MOUNT_POSITION_EXTENSION_PORT_V2_NO4");
|
||||
break;
|
||||
case 'e' : // for m400
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SET_GET_PERCEPTION_PARAM);
|
||||
goto start;
|
||||
case 'f' : // for m400
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SET_CMD_START_MISSION);
|
||||
goto start;
|
||||
case 'q':
|
||||
break;
|
||||
default:
|
||||
|
||||
@ -89,15 +89,7 @@ start:
|
||||
<<
|
||||
std::endl;
|
||||
std::cout
|
||||
<< "| [1] Select gimbal mount position at NO.1 payload port |"
|
||||
<<
|
||||
std::endl;
|
||||
std::cout
|
||||
<< "| [2] Select gimbal mount position at NO.2 payload port |"
|
||||
<<
|
||||
std::endl;
|
||||
std::cout
|
||||
<< "| [3] Select gimbal mount position at NO.3 payload port |"
|
||||
<< "| [1 ~ 4] Select gimbal mount position at NO.1~NO.4 |"
|
||||
<<
|
||||
std::endl;
|
||||
std::cout
|
||||
@ -110,7 +102,7 @@ start:
|
||||
return;
|
||||
}
|
||||
|
||||
if (mountPosition > '3' || mountPosition < '1') {
|
||||
if (mountPosition > '4' || mountPosition < '1') {
|
||||
USER_LOG_ERROR("Input mount position is invalid");
|
||||
goto start;
|
||||
}
|
||||
@ -247,6 +239,7 @@ start:
|
||||
T_DjiGimbalManagerRotation rotation;
|
||||
T_DjiAircraftInfoBaseInfo baseInfo;
|
||||
E_DjiAircraftSeries aircraftSeries;
|
||||
E_DjiFcSubscriptionTopic topicOfPayloadGimablAngle;
|
||||
|
||||
returnCode = DjiGimbalManager_Init();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -288,12 +281,24 @@ start:
|
||||
}
|
||||
else if (aircraftSeries == DJI_AIRCRAFT_SERIES_M30 || aircraftSeries == DJI_AIRCRAFT_SERIES_M3 ||
|
||||
aircraftSeries == DJI_AIRCRAFT_SERIES_M3D) {
|
||||
topicOfPayloadGimablAngle = DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES;
|
||||
returnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, DJI_DATA_SUBSCRIPTION_TOPIC_50_HZ, NULL);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("DjiFcSubscription_SubscribeTopic %d return %d", DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, returnCode);
|
||||
goto end;
|
||||
}
|
||||
USER_LOG_INFO("Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES succefully.");
|
||||
} else if (aircraftSeries == DJI_AIRCRAFT_SERIES_M400) {
|
||||
topicOfPayloadGimablAngle = gimbalMountPosition == 1 ? DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES_ON_POS_NO1 :
|
||||
gimbalMountPosition == 2 ? DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES_ON_POS_NO2 :
|
||||
gimbalMountPosition == 3 ? DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES_ON_POS_NO3 :
|
||||
gimbalMountPosition == 4 ? DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES_ON_POS_NO4 : DJI_FC_SUBSCRIPTION_TOPIC_TOTAL_NUMBER;
|
||||
returnCode = DjiFcSubscription_SubscribeTopic(topicOfPayloadGimablAngle, DJI_DATA_SUBSCRIPTION_TOPIC_50_HZ, NULL);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("DjiFcSubscription_SubscribeTopic %d return %d", DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, returnCode);
|
||||
goto end;
|
||||
}
|
||||
USER_LOG_INFO("Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES_ON_POS_NO%d succefully.", gimbalMountPosition);
|
||||
}
|
||||
|
||||
|
||||
@ -403,8 +408,8 @@ start:
|
||||
threeGimbalData.anglesData[gimbalMountPosition - 1].yaw);
|
||||
}
|
||||
else if (aircraftSeries == DJI_AIRCRAFT_SERIES_M30 || aircraftSeries == DJI_AIRCRAFT_SERIES_M3 ||
|
||||
aircraftSeries == DJI_AIRCRAFT_SERIES_M3D) {
|
||||
returnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES,
|
||||
aircraftSeries == DJI_AIRCRAFT_SERIES_M3D || aircraftSeries == DJI_AIRCRAFT_SERIES_M400) {
|
||||
returnCode = DjiFcSubscription_GetLatestValueOfTopic(topicOfPayloadGimablAngle,
|
||||
(uint8_t *) &gimbalAngles,
|
||||
sizeof(T_DjiFcSubscriptionGimbalAngles),
|
||||
×tamp);
|
||||
|
||||
@ -28,8 +28,11 @@
|
||||
#include <iostream>
|
||||
#include "dji_logger.h"
|
||||
#include "hms/test_hms.h"
|
||||
#include "dji_hms_customization.h"
|
||||
#include "dji_aircraft_info.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define DJI_HMS_ERROR_NETWORK_IS_POOR (0x1E020004)
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
|
||||
@ -77,6 +80,86 @@ start:
|
||||
}
|
||||
}
|
||||
|
||||
void DjiUser_RunHmsEnhanceSample(void)
|
||||
{
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
T_DjiHmsAlarmEnhancedSetting setting;
|
||||
|
||||
USER_LOG_INFO("shake motor times 3, interval 500ms...");
|
||||
setting.type = DJI_HMS_ALARM_ENHANCED_TYPE_SHAKE_MOTOR;
|
||||
setting.times = 3;
|
||||
setting.interval = 500;
|
||||
DjiHmsCustomization_AlarmEnhancedCtrl(DJI_HMS_ALARM_ENHANCED_ACTION_START, setting);
|
||||
osalHandler->TaskSleepMs(4000);
|
||||
|
||||
USER_LOG_INFO("play sound times 3, interval 500ms...");
|
||||
setting.type = DJI_HMS_ALARM_ENHANCED_PLAY_SOUND;
|
||||
DjiHmsCustomization_AlarmEnhancedCtrl(DJI_HMS_ALARM_ENHANCED_ACTION_START, setting);
|
||||
osalHandler->TaskSleepMs(4000);
|
||||
|
||||
USER_LOG_INFO("shake motor and play sound times 3, interval 500ms...");
|
||||
setting.times = 3;
|
||||
setting.type = DJI_HMS_ALARM_ENHANCED_PLAY_SOUND_AND_SHAKE_MOTOR;
|
||||
DjiHmsCustomization_AlarmEnhancedCtrl(DJI_HMS_ALARM_ENHANCED_ACTION_START, setting);
|
||||
osalHandler->TaskSleepMs(4000);
|
||||
|
||||
USER_LOG_INFO("shake motor and play sound times 20, interval 500ms, interrupt 3s exit...");
|
||||
setting.times = 20;
|
||||
setting.type = DJI_HMS_ALARM_ENHANCED_PLAY_SOUND_AND_SHAKE_MOTOR;
|
||||
DjiHmsCustomization_AlarmEnhancedCtrl(DJI_HMS_ALARM_ENHANCED_ACTION_START, setting);
|
||||
osalHandler->TaskSleepMs(4000);
|
||||
DjiHmsCustomization_AlarmEnhancedCtrl(DJI_HMS_ALARM_ENHANCED_ACTION_EXIT_ALL, setting);
|
||||
USER_LOG_INFO("AlarmEnhaned exit.");
|
||||
}
|
||||
|
||||
void DjiUser_RunHmsNetworkSample(void)
|
||||
{
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
char inputSelectSample;
|
||||
T_DjiReturnCode returnCode = 0;
|
||||
E_DjiEnhancedTransmissionState state = DJI_ENHANCEED_TRANSMISSION_STATE_DISABLED;
|
||||
|
||||
start:
|
||||
osalHandler->TaskSleepMs(100);
|
||||
|
||||
std::cout
|
||||
<< "\n"
|
||||
<< "| Available commands: |\n"
|
||||
<< "| [1] Get Enhanced Transmission state |\n"
|
||||
<< "| [2] send Network hms msg |\n"
|
||||
<< "| [3] clear Network hms msg |\n"
|
||||
<< "| [q] Quit |\n"
|
||||
<< std::endl;
|
||||
|
||||
std::cin >> inputSelectSample;
|
||||
switch (inputSelectSample) {
|
||||
case '1':
|
||||
DjiAircraftInfo_GetEnhancedTransmission(&state);
|
||||
goto start;
|
||||
case '2':
|
||||
returnCode = DjiHmsCustomization_InjectHmsErrorCode(DJI_HMS_ERROR_NETWORK_IS_POOR, DJI_HMS_ERROR_LEVEL_WARN);
|
||||
if (returnCode == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_INFO("InjectHmsErrorCode success");
|
||||
} else {
|
||||
USER_LOG_ERROR("InjectHmsErrorCode fail");
|
||||
}
|
||||
goto start;
|
||||
case '3':
|
||||
returnCode = DjiHmsCustomization_EliminateHmsErrorCode(DJI_HMS_ERROR_NETWORK_IS_POOR);
|
||||
if (returnCode == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_INFO("EliminateHmsErrorCode success");
|
||||
} else {
|
||||
USER_LOG_ERROR("EliminateHmsErrorCode fail");
|
||||
}
|
||||
goto start;
|
||||
case 'q':
|
||||
break;
|
||||
default:
|
||||
USER_LOG_ERROR("Input command is invalid");
|
||||
goto start;
|
||||
}
|
||||
}
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -40,6 +40,8 @@ extern "C" {
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
void DjiUser_RunHmsManagerSample(void);
|
||||
void DjiUser_RunHmsEnhanceSample(void);
|
||||
void DjiUser_RunHmsNetworkSample(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
0
PSDK/samples/sample_c++/module_sample/liveview/test_liveview_entry.cpp
Normal file → Executable file
0
PSDK/samples/sample_c++/module_sample/liveview/test_liveview_entry.cpp
Normal file → Executable file
@ -212,27 +212,27 @@ void DjiUser_RunStereoVisionViewSample(void)
|
||||
switch (inputChar) {
|
||||
case 'd':
|
||||
USER_LOG_INFO("Subscribe down stereo camera pair images.");
|
||||
perceptionSample->SubscribeDownImage(DjiTest_PerceptionImageCallback);
|
||||
returnCode = perceptionSample->SubscribeDownImage(DjiTest_PerceptionImageCallback);
|
||||
break;
|
||||
case 'f':
|
||||
USER_LOG_INFO("Subscribe front stereo camera pair images.");
|
||||
perceptionSample->SubscribeFrontImage(DjiTest_PerceptionImageCallback);
|
||||
returnCode = perceptionSample->SubscribeFrontImage(DjiTest_PerceptionImageCallback);
|
||||
break;
|
||||
case 'r':
|
||||
USER_LOG_INFO("Subscribe rear stereo camera pair images.");
|
||||
perceptionSample->SubscribeRearImage(DjiTest_PerceptionImageCallback);
|
||||
returnCode = perceptionSample->SubscribeRearImage(DjiTest_PerceptionImageCallback);
|
||||
break;
|
||||
case 'u':
|
||||
USER_LOG_INFO("Subscribe up stereo camera pair images.");
|
||||
perceptionSample->SubscribeUpImage(DjiTest_PerceptionImageCallback);
|
||||
returnCode = perceptionSample->SubscribeUpImage(DjiTest_PerceptionImageCallback);
|
||||
break;
|
||||
case 'l':
|
||||
USER_LOG_INFO("Subscribe left stereo camera pair images.");
|
||||
perceptionSample->SubscribeLeftImage(DjiTest_PerceptionImageCallback);
|
||||
returnCode = perceptionSample->SubscribeLeftImage(DjiTest_PerceptionImageCallback);
|
||||
break;
|
||||
case 't':
|
||||
USER_LOG_INFO("Subscribe right stereo camera pair images.");
|
||||
perceptionSample->SubscribeRightImage(DjiTest_PerceptionImageCallback);
|
||||
returnCode = perceptionSample->SubscribeRightImage(DjiTest_PerceptionImageCallback);
|
||||
break;
|
||||
case 'g':
|
||||
USER_LOG_INFO("Do stereo camera parameters subscription");
|
||||
@ -243,6 +243,11 @@ void DjiUser_RunStereoVisionViewSample(void)
|
||||
break;
|
||||
}
|
||||
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_INFO("Failed to subscribe perception image.");
|
||||
goto DestroyTask;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
cin >> isQuit;
|
||||
if (isQuit == 'q' || isQuit == 'Q') {
|
||||
|
||||
@ -320,7 +320,7 @@ T_DjiReturnCode Osal_GetTimeUs(uint64_t *us)
|
||||
if (s_localTimeUsOffset == 0) {
|
||||
s_localTimeUsOffset = *us;
|
||||
} else {
|
||||
*us = *us - s_localTimeMsOffset;
|
||||
*us = *us - s_localTimeUsOffset;
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
|
||||
@ -48,15 +48,10 @@ T_DjiReturnCode Osal_FileOpen(const char *fileName, const char *fileMode, T_DjiF
|
||||
|
||||
*fileObj = fopen(fileName, fileMode);
|
||||
if (*fileObj == NULL) {
|
||||
goto out;
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
|
||||
out:
|
||||
free(*fileObj);
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
T_DjiReturnCode Osal_FileClose(T_DjiFileHandle fileObj)
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define SOCKET_RECV_BUF_MAX_SIZE (1000 * 1000 * 10)
|
||||
#define MAX_UDP_PAYLOAD_SIZE 65507
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
@ -141,6 +142,7 @@ T_DjiReturnCode Osal_UdpSendData(T_DjiSocketHandle socketHandle, const char *ipA
|
||||
struct sockaddr_in addr;
|
||||
T_SocketHandleStruct *socketHandleStruct = (T_SocketHandleStruct *) socketHandle;
|
||||
int32_t ret;
|
||||
ssize_t total_sent = 0;
|
||||
|
||||
if (socketHandle <= 0 || ipAddr == NULL || port == 0 || buf == NULL || len == 0 || realLen == NULL) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
@ -151,13 +153,21 @@ T_DjiReturnCode Osal_UdpSendData(T_DjiSocketHandle socketHandle, const char *ipA
|
||||
addr.sin_port = htons(port);
|
||||
addr.sin_addr.s_addr = inet_addr(ipAddr);
|
||||
|
||||
ret = sendto(socketHandleStruct->socketFd, buf, len, 0, (struct sockaddr *) &addr, sizeof(struct sockaddr_in));
|
||||
if (ret >= 0) {
|
||||
*realLen = ret;
|
||||
} else {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
while (len > 0) {
|
||||
size_t chunk_size = (len > MAX_UDP_PAYLOAD_SIZE) ? MAX_UDP_PAYLOAD_SIZE : len;
|
||||
ssize_t sent = sendto(socketHandleStruct->socketFd, buf, chunk_size, 0, (struct sockaddr *) &addr, sizeof(struct sockaddr_in));
|
||||
|
||||
if (sent < 0) {
|
||||
perror("sendto failed");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
buf += sent;
|
||||
len -= sent;
|
||||
total_sent += sent;
|
||||
}
|
||||
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -176,8 +186,6 @@ T_DjiReturnCode Osal_UdpRecvData(T_DjiSocketHandle socketHandle, char *ipAddr, u
|
||||
ret = recvfrom(socketHandleStruct->socketFd, buf, len, 0, (struct sockaddr *) &addr, &addrLen);
|
||||
if (ret >= 0) {
|
||||
*realLen = ret;
|
||||
strcpy(ipAddr, inet_ntoa(addr.sin_addr));
|
||||
*port = ntohs(addr.sin_port);
|
||||
} else {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
@ -46,7 +46,7 @@ if (DEVICE_SYSTEM_ID MATCHES x86_64)
|
||||
add_definitions(-DPLATFORM_ARCH_x86_64=1)
|
||||
elseif (DEVICE_SYSTEM_ID MATCHES aarch64)
|
||||
set(TOOLCHAIN_NAME aarch64-linux-gnu-gcc)
|
||||
add_definitions(-DPLATFORM_ARCH_aarch64=1)
|
||||
add_definitions(-DPLATFORM_ARCH_AARCH64=1)
|
||||
else ()
|
||||
message(FATAL_ERROR "FATAL: Please confirm your platform.")
|
||||
endif ()
|
||||
@ -133,11 +133,10 @@ endif ()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} m)
|
||||
|
||||
add_custom_command(TARGET ${PROJECT_NAME}
|
||||
PRE_LINK COMMAND cmake ..
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
|
||||
if (OpenCV_FOUND)
|
||||
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
|
||||
endif ()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} dl)
|
||||
|
||||
|
||||
@ -25,6 +25,8 @@
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <liveview/test_liveview_entry.hpp>
|
||||
#include <perception/test_perception_entry.hpp>
|
||||
#include <perception/test_lidar_entry.hpp>
|
||||
#include <perception/test_radar_entry.hpp>
|
||||
#include <flight_control/test_flight_control.h>
|
||||
#include <gimbal/test_gimbal_entry.hpp>
|
||||
#include "application.hpp"
|
||||
@ -71,6 +73,8 @@ start:
|
||||
<< "| [d] Stereo vision view sample - display the stereo image |\n"
|
||||
<< "| [e] Run camera manager sample - you can test camera's functions interactively |\n"
|
||||
<< "| [f] Start rtk positioning sample - you can receive rtk rtcm data when rtk signal is ok |\n"
|
||||
<< "| [g] Request Lidar data sample - Request Lidar data and store the point cloud data as pcd files |\n"
|
||||
<< "| [h] Request Radar data sample - Request radar data |\n"
|
||||
<< std::endl;
|
||||
|
||||
std::cin >> inputChar;
|
||||
@ -105,6 +109,12 @@ start:
|
||||
|
||||
USER_LOG_INFO("Start rtk positioning sample successfully");
|
||||
break;
|
||||
case 'g':
|
||||
DjiUser_RunLidarDataSubscriptionSample();
|
||||
break;
|
||||
case 'h':
|
||||
DjiUser_RunRadarDataSubscriptionSample();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@ -22,8 +22,11 @@ include_directories(../nvidia_jetson/application)
|
||||
file(GLOB_RECURSE MODULE_SAMPLE_SRC
|
||||
../../../module_sample/liveview/*.c*
|
||||
../../../module_sample/camera_manager/*.c*
|
||||
../../../module_sample/hms_manager/*.c*
|
||||
../../../module_sample/perception/*.c*
|
||||
../../../module_sample/gimbal/*.c*
|
||||
../../../module_sample/flight_controller/*.c*
|
||||
../../../module_sample/hms_manager/*.c*
|
||||
../../../../sample_c/module_sample/*.c
|
||||
)
|
||||
file(GLOB_RECURSE MODULE_COMMON_SRC ../common/*.c*)
|
||||
@ -31,7 +34,7 @@ file(GLOB_RECURSE MODULE_HAL_SRC hal/*.c*)
|
||||
file(GLOB_RECURSE MODULE_APP_SRC application/*.c*)
|
||||
|
||||
set(TOOLCHAIN_NAME aarch64-linux-gnu-gcc)
|
||||
add_definitions(-DPLATFORM_ARCH_aarch64=1)
|
||||
add_definitions(-DPLATFORM_ARCH_AARCH64=1)
|
||||
add_definitions(-DSYSTEM_ARCH_LINUX=1)
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../common/3rdparty)
|
||||
@ -45,84 +48,80 @@ add_executable(${PROJECT_NAME}
|
||||
${MODULE_COMMON_SRC}
|
||||
${MODULE_HAL_SRC})
|
||||
|
||||
# Try to see if user has OpenCV installed
|
||||
# if yes, default callback will display the image
|
||||
find_package(OpenCV QUIET)
|
||||
if (OpenCV_FOUND)
|
||||
message("\n${PROJECT_NAME}...")
|
||||
message(STATUS "Found OpenCV installed in the system, will use it to display image in AdvancedSensing APIs")
|
||||
message(STATUS " - Includes: ${OpenCV_INCLUDE_DIRS}")
|
||||
message(STATUS " - Libraries: ${OpenCV_LIBRARIES}")
|
||||
add_definitions(-DOPEN_CV_INSTALLED)
|
||||
else ()
|
||||
message(STATUS "Did not find OpenCV in the system, image data is inside RecvContainer as raw data")
|
||||
endif ()
|
||||
|
||||
find_package(FFMPEG REQUIRED)
|
||||
if (FFMPEG_FOUND)
|
||||
message(STATUS "Found FFMPEG installed in the system")
|
||||
message(STATUS " - Includes: ${FFMPEG_INCLUDE_DIR}")
|
||||
message(STATUS " - Libraries: ${FFMPEG_LIBRARIES}")
|
||||
|
||||
EXECUTE_PROCESS(COMMAND ffmpeg -version
|
||||
OUTPUT_VARIABLE ffmpeg_version_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
string(REGEX MATCH "version.*Copyright" ffmpeg_version_line ${ffmpeg_version_output})
|
||||
string(REGEX MATCH " .* " ffmpeg_version ${ffmpeg_version_line})
|
||||
string(REGEX MATCH "^ 5.*$" ffmpeg_major_version ${ffmpeg_version})
|
||||
|
||||
if (HEAD${ffmpeg_major_version} STREQUAL "HEAD")
|
||||
message(STATUS " - Version: ${ffmpeg_version}")
|
||||
else ()
|
||||
message(FATAL_ERROR " - Not support FFMPEG version: ${ffmpeg_major_version}, please install 4.x.x instead.")
|
||||
endif ()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} ${FFMPEG_LIBRARIES})
|
||||
include_directories(${FFMPEG_INCLUDE_DIR})
|
||||
add_definitions(-DFFMPEG_INSTALLED)
|
||||
else ()
|
||||
message(STATUS "Cannot Find FFMPEG")
|
||||
endif (FFMPEG_FOUND)
|
||||
|
||||
include_directories(${CMAKE_CURRENT_LIST_DIR}/../../../../../psdk_lib/include)
|
||||
|
||||
if (BUILD_CROSS_COMPILE MATCHES TRUE)
|
||||
# Try to see if user has OpenCV installed
|
||||
# if yes, default callback will display the image
|
||||
find_package(OpenCV QUIET)
|
||||
if (OpenCV_FOUND)
|
||||
message("\n${PROJECT_NAME}...")
|
||||
message(STATUS "Found OpenCV installed in the system, will use it to display image in AdvancedSensing APIs")
|
||||
message(STATUS " - Includes: ${OpenCV_INCLUDE_DIRS}")
|
||||
message(STATUS " - Libraries: ${OpenCV_LIBRARIES}")
|
||||
add_definitions(-DOPEN_CV_INSTALLED)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
|
||||
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
|
||||
else ()
|
||||
message(STATUS "Did not find OpenCV in the system, image data is inside RecvContainer as raw data")
|
||||
endif ()
|
||||
|
||||
find_package(OPUS REQUIRED)
|
||||
if (OPUS_FOUND)
|
||||
message(STATUS "Found OPUS installed in the system")
|
||||
message(STATUS " - Includes: ${OPUS_INCLUDE_DIR}")
|
||||
message(STATUS " - Libraries: ${OPUS_LIBRARY}")
|
||||
find_package(FFMPEG REQUIRED)
|
||||
if (FFMPEG_FOUND)
|
||||
message(STATUS "Found FFMPEG installed in the system")
|
||||
message(STATUS " - Includes: ${FFMPEG_INCLUDE_DIR}")
|
||||
message(STATUS " - Libraries: ${FFMPEG_LIBRARIES}")
|
||||
|
||||
add_definitions(-DOPUS_INSTALLED)
|
||||
target_link_libraries(${PROJECT_NAME} /usr/local/lib/libopus.a)
|
||||
else ()
|
||||
message(STATUS "Cannot Find OPUS")
|
||||
endif (OPUS_FOUND)
|
||||
EXECUTE_PROCESS(COMMAND ffmpeg -version
|
||||
OUTPUT_VARIABLE ffmpeg_version_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
string(REGEX MATCH "version.*Copyright" ffmpeg_version_line ${ffmpeg_version_output})
|
||||
string(REGEX MATCH " .* " ffmpeg_version ${ffmpeg_version_line})
|
||||
string(REGEX MATCH "^ 5.*$" ffmpeg_major_version ${ffmpeg_version})
|
||||
|
||||
find_package(LIBUSB REQUIRED)
|
||||
if (LIBUSB_FOUND)
|
||||
message(STATUS "Found LIBUSB installed in the system")
|
||||
message(STATUS " - Includes: ${LIBUSB_INCLUDE_DIR}")
|
||||
message(STATUS " - Libraries: ${LIBUSB_LIBRARY}")
|
||||
if (HEAD${ffmpeg_major_version} STREQUAL "HEAD")
|
||||
message(STATUS " - Version: ${ffmpeg_version}")
|
||||
else ()
|
||||
message(FATAL_ERROR " - Not support FFMPEG version: ${ffmpeg_major_version}, please install 4.x.x instead.")
|
||||
endif ()
|
||||
|
||||
add_definitions(-DLIBUSB_INSTALLED)
|
||||
target_link_libraries(${PROJECT_NAME} usb-1.0)
|
||||
else ()
|
||||
message(STATUS "Cannot Find LIBUSB")
|
||||
endif (LIBUSB_FOUND)
|
||||
target_link_libraries(${PROJECT_NAME} ${FFMPEG_LIBRARIES})
|
||||
include_directories(${FFMPEG_INCLUDE_DIR})
|
||||
add_definitions(-DFFMPEG_INSTALLED)
|
||||
else ()
|
||||
message(STATUS "Cannot Find FFMPEG")
|
||||
endif (FFMPEG_FOUND)
|
||||
|
||||
find_package(OPUS REQUIRED)
|
||||
if (OPUS_FOUND)
|
||||
message(STATUS "Found OPUS installed in the system")
|
||||
message(STATUS " - Includes: ${OPUS_INCLUDE_DIR}")
|
||||
message(STATUS " - Libraries: ${OPUS_LIBRARY}")
|
||||
|
||||
add_definitions(-DOPUS_INSTALLED)
|
||||
target_link_libraries(${PROJECT_NAME} /usr/local/lib/libopus.a)
|
||||
else ()
|
||||
message(STATUS "Cannot Find OPUS")
|
||||
endif (OPUS_FOUND)
|
||||
|
||||
find_package(LIBUSB REQUIRED)
|
||||
if (LIBUSB_FOUND)
|
||||
message(STATUS "Found LIBUSB installed in the system")
|
||||
message(STATUS " - Includes: ${LIBUSB_INCLUDE_DIR}")
|
||||
message(STATUS " - Libraries: ${LIBUSB_LIBRARY}")
|
||||
|
||||
add_definitions(-DLIBUSB_INSTALLED)
|
||||
target_link_libraries(${PROJECT_NAME} usb-1.0)
|
||||
else ()
|
||||
message(STATUS "Cannot Find LIBUSB")
|
||||
endif (LIBUSB_FOUND)
|
||||
endif ()
|
||||
|
||||
if (NOT EXECUTABLE_OUTPUT_PATH)
|
||||
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
|
||||
endif ()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} m)
|
||||
target_link_libraries(${PROJECT_NAME} dl)
|
||||
|
||||
add_custom_command(TARGET ${PROJECT_NAME}
|
||||
PRE_LINK COMMAND cmake ..
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
|
||||
if (OpenCV_FOUND)
|
||||
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
|
||||
endif ()
|
||||
|
||||
@ -35,9 +35,9 @@
|
||||
#include "../common/osal/osal.h"
|
||||
#include "../common/osal/osal_fs.h"
|
||||
#include "../common/osal/osal_socket.h"
|
||||
#include "../manifold2/hal/hal_usb_bulk.h"
|
||||
#include "../manifold2/hal/hal_uart.h"
|
||||
#include "../manifold2/hal/hal_network.h"
|
||||
#include "../hal/hal_usb_bulk.h"
|
||||
#include "../hal/hal_uart.h"
|
||||
#include "../hal/hal_network.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define DJI_LOG_PATH "Logs/DJI"
|
||||
@ -132,6 +132,7 @@ void Application::DjiUser_SetupEnvironment()
|
||||
uartHandler.UartWriteData = HalUart_WriteData;
|
||||
uartHandler.UartReadData = HalUart_ReadData;
|
||||
uartHandler.UartGetStatus = HalUart_GetStatus;
|
||||
uartHandler.UartGetDeviceInfo = HalUart_GetDeviceInfo;
|
||||
|
||||
usbBulkHandler.UsbBulkInit = HalUsbBulk_Init;
|
||||
usbBulkHandler.UsbBulkDeInit = HalUsbBulk_DeInit;
|
||||
@ -158,31 +159,50 @@ void Application::DjiUser_SetupEnvironment()
|
||||
throw std::runtime_error("Register osal handler error.");
|
||||
}
|
||||
|
||||
#if (CONFIG_HARDWARE_CONNECTION == DJI_USE_UART_AND_USB_BULK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalUartHandler(&uartHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
throw std::runtime_error("Register hal uart handler error.");
|
||||
}
|
||||
|
||||
#if (CONFIG_HARDWARE_CONNECTION == DJI_USE_UART_AND_USB_BULK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalUsbBulkHandler(&usbBulkHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
throw std::runtime_error("Register hal usb bulk handler error.");
|
||||
}
|
||||
#elif (CONFIG_HARDWARE_CONNECTION == DJI_USE_UART_AND_NETWORK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalUartHandler(&uartHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
throw std::runtime_error("Register hal network handler error");
|
||||
}
|
||||
|
||||
returnCode = DjiPlatform_RegHalNetworkHandler(&networkHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
throw std::runtime_error("Register hal network handler error");
|
||||
}
|
||||
#elif (CONFIG_HARDWARE_CONNECTION == DJI_USE_ONLY_UART)
|
||||
/*!< Attention: Only use uart hardware connection.
|
||||
*/
|
||||
#endif
|
||||
returnCode = DjiPlatform_RegHalUartHandler(&uartHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
throw std::runtime_error("Register hal network handler error");
|
||||
}
|
||||
|
||||
#elif (CONFIG_HARDWARE_CONNECTION == DJI_USE_ONLY_USB_BULK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalUsbBulkHandler(&usbBulkHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
throw std::runtime_error("Register hal network handler error");
|
||||
}
|
||||
|
||||
#elif (CONFIG_HARDWARE_CONNECTION == DJI_USE_ONLY_NETWORK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalNetworkHandler(&networkHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
throw std::runtime_error("Register hal network handler error");
|
||||
}
|
||||
|
||||
//Attention: if you want to use camera stream view function, please uncomment it.
|
||||
returnCode = DjiPlatform_RegSocketHandler(&socketHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
throw std::runtime_error("register osal socket handler error");
|
||||
}
|
||||
#endif
|
||||
|
||||
returnCode = DjiPlatform_RegFileSystemHandler(&fileSystemHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -234,8 +254,10 @@ void Application::DjiUser_ApplicationStart()
|
||||
throw std::runtime_error("Get aircraft base info error.");
|
||||
}
|
||||
|
||||
if (aircraftInfoBaseInfo.mountPosition != DJI_MOUNT_POSITION_EXTENSION_PORT) {
|
||||
throw std::runtime_error("Please run this sample on extension port.");
|
||||
if (aircraftInfoBaseInfo.mountPosition != DJI_MOUNT_POSITION_EXTENSION_PORT &&
|
||||
aircraftInfoBaseInfo.djiAdapterType != DJI_SDK_ADAPTER_TYPE_EPORT_V2_RIBBON_CABLE &&
|
||||
aircraftInfoBaseInfo.djiAdapterType != DJI_SDK_ADAPTER_TYPE_SKYPORT_V3) {
|
||||
throw std::runtime_error("Please run this sample on extension port or skyport v3.");
|
||||
}
|
||||
|
||||
returnCode = DjiCore_SetAlias("PSDK_APPALIAS");
|
||||
@ -311,7 +333,7 @@ T_DjiReturnCode Application::DjiUser_FillInUserInfo(T_DjiUserInfo *userInfo)
|
||||
!strcmp(USER_DEVELOPER_ACCOUNT, "your_developer_account") ||
|
||||
!strcmp(USER_BAUD_RATE, "your_baud_rate")) {
|
||||
USER_LOG_ERROR(
|
||||
"Please fill in correct user information to 'samples/sample_c++/platform/linux/manifold2/application/dji_sdk_app_info.h' file.");
|
||||
"Please fill in correct user information to 'samples/sample_c++/platform/linux/nvidia_jetson/application/dji_sdk_app_info.h' file.");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
|
||||
@ -37,10 +37,12 @@ extern "C" {
|
||||
#define DJI_USE_ONLY_UART (0)
|
||||
#define DJI_USE_UART_AND_USB_BULK_DEVICE (1)
|
||||
#define DJI_USE_UART_AND_NETWORK_DEVICE (2)
|
||||
#define DJI_USE_ONLY_USB_BULK_DEVICE (3)
|
||||
#define DJI_USE_ONLY_NETWORK_DEVICE (4)
|
||||
|
||||
/*!< Attention: Select your hardware connection mode here.
|
||||
* */
|
||||
#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_NETWORK_DEVICE
|
||||
#define CONFIG_HARDWARE_CONNECTION DJI_USE_ONLY_USB_BULK_DEVICE
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -25,12 +25,10 @@
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <liveview/test_liveview_entry.hpp>
|
||||
#include <perception/test_perception_entry.hpp>
|
||||
#include <perception/test_lidar_entry.hpp>
|
||||
#include <perception/test_radar_entry.hpp>
|
||||
#include <flight_control/test_flight_control.h>
|
||||
#include <gimbal/test_gimbal_entry.hpp>
|
||||
#include <hms/test_hms.h>
|
||||
#include <waypoint_v2/test_waypoint_v2.h>
|
||||
#include <waypoint_v3/test_waypoint_v3.h>
|
||||
#include <gimbal_manager/test_gimbal_manager.h>
|
||||
#include "application.hpp"
|
||||
#include "fc_subscription/test_fc_subscription.h"
|
||||
#include <gimbal_emu/test_payload_gimbal_emu.h>
|
||||
@ -41,8 +39,11 @@
|
||||
#include "widget/test_widget_speaker.h"
|
||||
#include <power_management/test_power_management.h>
|
||||
#include "data_transmission/test_data_transmission.h"
|
||||
#include <camera_manager/test_camera_manager.h>
|
||||
#include <flight_controller/test_flight_controller_entry.h>
|
||||
#include <positioning/test_positioning.h>
|
||||
#include <hms_manager/hms_manager_entry.h>
|
||||
#include "camera_manager/test_camera_manager_entry.h"
|
||||
#include <hms_manager/hms_manager_entry.h>
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
|
||||
@ -51,8 +52,6 @@
|
||||
/* Private values -------------------------------------------------------------*/
|
||||
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
static T_DjiReturnCode DjiTest_HighPowerApplyPinInit();
|
||||
static T_DjiReturnCode DjiTest_WriteHighPowerApplyPin(E_DjiPowerManagementPinState pinState);
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
int main(int argc, char **argv)
|
||||
@ -68,25 +67,15 @@ start:
|
||||
<< "\n"
|
||||
<< "| Available commands: |\n"
|
||||
<< "| [0] Fc subscribe sample - subscribe quaternion and gps data |\n"
|
||||
<< "| [1] Flight controller sample - take off landing |\n"
|
||||
<< "| [2] Flight controller sample - take off position ctrl landing |\n"
|
||||
<< "| [3] Flight controller sample - take off go home force landing |\n"
|
||||
<< "| [4] Flight controller sample - take off velocity ctrl landing |\n"
|
||||
<< "| [5] Flight controller sample - arrest flying |\n"
|
||||
<< "| [6] Flight controller sample - set get parameters |\n"
|
||||
<< "| [7] Hms info sample - get health manger system info |\n"
|
||||
<< "| [8] Waypoint 2.0 sample - run airline mission by settings (only support on M300 RTK) |\n"
|
||||
<< "| [9] Waypoint 3.0 sample - run airline mission by kmz file (not support on M300 RTK) |\n"
|
||||
<< "| [a] Gimbal manager sample |\n"
|
||||
<< "| [1] Flight controller sample - you can control flying by PSDK |\n"
|
||||
<< "| [2] Hms info manager sample - get health manger system info by language |\n"
|
||||
<< "| [a] Gimbal manager sample - you can control gimbal by PSDK |\n"
|
||||
<< "| [c] Camera stream view sample - display the camera video stream |\n"
|
||||
<< "| [d] Stereo vision view sample - display the stereo image |\n"
|
||||
<< "| [e] Start camera all features sample - you can operate the camera on DJI Pilot |\n"
|
||||
<< "| [f] Start gimbal all features sample - you can operate the gimbal on DJI Pilot |\n"
|
||||
<< "| [g] Start widget all features sample - you can operate the widget on DJI Pilot |\n"
|
||||
<< "| [h] Start widget speaker sample - you can operate the speaker on DJI Pilot2 |\n"
|
||||
<< "| [i] Start power management sample - you will see notification when aircraft power off |\n"
|
||||
<< "| [j] Start data transmission sample - you can send or recv custom data on MSDK demo |\n"
|
||||
<< "| [k] Run camera manager sample - you can test camera's functions interactively |\n"
|
||||
<< "| [e] Run camera manager sample - you can test camera's functions interactively |\n"
|
||||
<< "| [f] Start rtk positioning sample - you can receive rtk rtcm data when rtk signal is ok |\n"
|
||||
<< "| [g] Request Lidar data sample - Request Lidar data and store the point cloud data as pcd files |\n"
|
||||
<< "| [h] Request Radar data sample - Request radar data |\n"
|
||||
<< std::endl;
|
||||
|
||||
std::cin >> inputChar;
|
||||
@ -95,7 +84,7 @@ start:
|
||||
DjiTest_FcSubscriptionRunSample();
|
||||
break;
|
||||
case '1':
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_TAKE_OFF_LANDING);
|
||||
DjiUser_RunFlightControllerSample();
|
||||
break;
|
||||
case '2':
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_TAKE_OFF_POSITION_CTRL_LANDING);
|
||||
@ -113,13 +102,13 @@ start:
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SET_GET_PARAM);
|
||||
break;
|
||||
case '7':
|
||||
DjiTest_HmsRunSample();
|
||||
DjiUser_RunHmsManagerSample();
|
||||
break;
|
||||
case '8':
|
||||
DjiTest_WaypointV2RunSample();
|
||||
// DjiTest_WaypointV2RunSample();
|
||||
break;
|
||||
case '9':
|
||||
DjiTest_WaypointV3RunSample();
|
||||
// DjiTest_WaypointV3RunSample();
|
||||
break;
|
||||
case 'a':
|
||||
DjiUser_RunGimbalManagerSample();
|
||||
@ -131,77 +120,22 @@ start:
|
||||
DjiUser_RunStereoVisionViewSample();
|
||||
break;
|
||||
case 'e':
|
||||
returnCode = DjiTest_CameraEmuBaseStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("camera emu common init error");
|
||||
break;
|
||||
}
|
||||
|
||||
if (DjiPlatform_GetSocketHandler() != nullptr) {
|
||||
returnCode = DjiTest_CameraEmuMediaStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("camera emu media init error");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Start camera all feautes sample successfully");
|
||||
DjiUser_RunCameraManagerSample();
|
||||
break;
|
||||
case 'f':
|
||||
if (DjiTest_GimbalStartService() != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("psdk gimbal init error");
|
||||
returnCode = DjiTest_PositioningStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("rtk positioning sample init error");
|
||||
break;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Start gimbal all feautes sample successfully");
|
||||
USER_LOG_INFO("Start rtk positioning sample successfully");
|
||||
break;
|
||||
case 'g':
|
||||
returnCode = DjiTest_WidgetStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("widget sample init error");
|
||||
break;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Start widget all feautes sample successfully");
|
||||
DjiUser_RunLidarDataSubscriptionSample();
|
||||
break;
|
||||
case 'h':
|
||||
returnCode = DjiTest_WidgetSpeakerStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("widget speaker test init error");
|
||||
break;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Start widget speaker sample successfully");
|
||||
break;
|
||||
case 'i':
|
||||
applyHighPowerHandler.pinInit = DjiTest_HighPowerApplyPinInit;
|
||||
applyHighPowerHandler.pinWrite = DjiTest_WriteHighPowerApplyPin;
|
||||
|
||||
returnCode = DjiTest_RegApplyHighPowerHandler(&applyHighPowerHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("regsiter apply high power handler error");
|
||||
break;
|
||||
}
|
||||
|
||||
returnCode = DjiTest_PowerManagementStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("power management init error");
|
||||
break;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Start power management sample successfully");
|
||||
break;
|
||||
case 'j':
|
||||
returnCode = DjiTest_DataTransmissionStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("data transmission sample init error");
|
||||
break;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Start data transmission sample successfully");
|
||||
break;
|
||||
case 'k':
|
||||
DjiUser_RunCameraManagerSample();
|
||||
DjiUser_RunRadarDataSubscriptionSample();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -213,15 +147,5 @@ start:
|
||||
}
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
static T_DjiReturnCode DjiTest_HighPowerApplyPinInit()
|
||||
{
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static T_DjiReturnCode DjiTest_WriteHighPowerApplyPin(E_DjiPowerManagementPinState pinState)
|
||||
{
|
||||
//attention: please pull up the HWPR pin state by hardware.
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -44,16 +44,27 @@ T_DjiReturnCode HalNetWork_Init(const char *ipAddr, const char *netMask, T_DjiNe
|
||||
{
|
||||
int32_t ret;
|
||||
char cmdStr[LINUX_CMD_STR_MAX_SIZE];
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
int32_t routeIp[4] = {0};
|
||||
int32_t genMask[4] = {0};
|
||||
|
||||
if (ipAddr == NULL || netMask == NULL) {
|
||||
USER_LOG_ERROR("hal network config param error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
sscanf(ipAddr, "%d.%d.%d.%d", &routeIp[0], &routeIp[1], &routeIp[2], &routeIp[3]);
|
||||
sscanf(netMask, "%d.%d.%d.%d", &genMask[0], &genMask[1], &genMask[2], &genMask[3]);
|
||||
routeIp[0] &= genMask[0];
|
||||
routeIp[1] &= genMask[1];
|
||||
routeIp[2] &= genMask[2];
|
||||
routeIp[3] &= genMask[3];
|
||||
|
||||
//Attention: need root permission to config ip addr and netmask.
|
||||
memset(cmdStr, 0, sizeof(cmdStr));
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s up", LINUX_NETWORK_DEV);
|
||||
USER_LOG_DEBUG("%s", cmdStr);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Can't open the network."
|
||||
@ -63,14 +74,34 @@ T_DjiReturnCode HalNetWork_Init(const char *ipAddr, const char *netMask, T_DjiNe
|
||||
}
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s %s netmask %s", LINUX_NETWORK_DEV, ipAddr, netMask);
|
||||
USER_LOG_DEBUG("%s", cmdStr);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Can't config the ip address of network."
|
||||
"Probably the program not execute with root permission."
|
||||
"Please use the root permission to execute the program.");
|
||||
USER_LOG_ERROR("cmd failed: %s", cmdStr);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(50);
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ip route flush dev %s", LINUX_NETWORK_DEV);
|
||||
USER_LOG_DEBUG("%s", cmdStr);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("cmd failed: %s", cmdStr);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "route add -net %d.%d.%d.%d netmask %s dev %s",
|
||||
routeIp[0], routeIp[1], routeIp[2], routeIp[3], netMask, LINUX_NETWORK_DEV);
|
||||
USER_LOG_DEBUG("%s", cmdStr);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("cmd failed: %s", cmdStr);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(50);
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -255,6 +255,18 @@ T_DjiReturnCode HalUart_GetStatus(E_DjiHalUartNum uartNum, T_DjiUartStatus *stat
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
T_DjiReturnCode HalUart_GetDeviceInfo(T_DjiHalUartDeviceInfo *deviceInfo)
|
||||
{
|
||||
if (deviceInfo == NULL) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
deviceInfo->vid = USB_UART_CONNECTED_TO_UAV_VID;
|
||||
deviceInfo->pid = USB_UART_CONNECTED_TO_UAV_PID;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -48,6 +48,15 @@ extern "C" {
|
||||
#define LINUX_UART_DEV1 "/dev/ttyUSB0"
|
||||
#define LINUX_UART_DEV2 "/dev/ttyACM0"
|
||||
|
||||
/**
|
||||
* Use for Eport 2.0, specify the VID and PID of the USB serial port closest to the aircraft.
|
||||
* FT232 0x0403:0x6001
|
||||
* CP2102 0x10C4:0xEA60
|
||||
* VCOM 0x2CA3:0xF002
|
||||
*/
|
||||
#define USB_UART_CONNECTED_TO_UAV_VID (0x0403)
|
||||
#define USB_UART_CONNECTED_TO_UAV_PID (0x6001)
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
@ -56,6 +65,7 @@ T_DjiReturnCode HalUart_DeInit(T_DjiUartHandle uartHandle);
|
||||
T_DjiReturnCode HalUart_WriteData(T_DjiUartHandle uartHandle, const uint8_t *buf, uint32_t len, uint32_t *realLen);
|
||||
T_DjiReturnCode HalUart_ReadData(T_DjiUartHandle uartHandle, uint8_t *buf, uint32_t len, uint32_t *realLen);
|
||||
T_DjiReturnCode HalUart_GetStatus(E_DjiHalUartNum uartNum, T_DjiUartStatus *status);
|
||||
T_DjiReturnCode HalUart_GetDeviceInfo(T_DjiHalUartDeviceInfo *deviceInfo);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "hal_usb_bulk.h"
|
||||
#include "dji_logger.h"
|
||||
#include <errno.h>
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define LINUX_USB_BULK_TRANSFER_TIMEOUT_MS (50)
|
||||
@ -67,12 +68,13 @@ T_DjiReturnCode HalUsbBulk_Init(T_DjiHalUsbBulkInfo usbBulkInfo, T_DjiUsbBulkHan
|
||||
|
||||
handle = libusb_open_device_with_vid_pid(NULL, usbBulkInfo.vid, usbBulkInfo.pid);
|
||||
if (handle == NULL) {
|
||||
USER_LOG_ERROR("libusb open device error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
ret = libusb_claim_interface(handle, usbBulkInfo.channelInfo.interfaceNum);
|
||||
if (ret != LIBUSB_SUCCESS) {
|
||||
printf("libusb claim interface error");
|
||||
USER_LOG_ERROR("libusb claim interface error");
|
||||
libusb_close(handle);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
@ -86,22 +88,32 @@ T_DjiReturnCode HalUsbBulk_Init(T_DjiHalUsbBulkInfo usbBulkInfo, T_DjiUsbBulkHan
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->interfaceNum = usbBulkInfo.channelInfo.interfaceNum;
|
||||
|
||||
if (usbBulkInfo.channelInfo.interfaceNum == LINUX_USB_BULK1_INTERFACE_NUM) {
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK1_EP_OUT_FD, O_RDWR);
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK1_EP_IN_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK1_EP_IN_FD, O_RDWR);
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK1_EP_OUT_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
} else if (usbBulkInfo.channelInfo.interfaceNum == LINUX_USB_BULK2_INTERFACE_NUM) {
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK2_EP_OUT_FD, O_RDWR);
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK2_EP_IN_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK2_EP_IN_FD, O_RDWR);
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK2_EP_OUT_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
} else if (usbBulkInfo.channelInfo.interfaceNum == LINUX_USB_BULK3_INTERFACE_NUM) {
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK3_EP_IN_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK3_EP_OUT_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
@ -163,7 +175,13 @@ T_DjiReturnCode HalUsbBulk_WriteData(T_DjiUsbBulkHandle usbBulkHandle, const uin
|
||||
*realLen = actualLen;
|
||||
#endif
|
||||
} else {
|
||||
*realLen = write(((T_HalUsbBulkObj *) usbBulkHandle)->ep1, buf, len);
|
||||
ret = write(((T_HalUsbBulkObj *) usbBulkHandle)->ep1, buf, len);
|
||||
if (ret < 0) {
|
||||
USER_LOG_ERROR("write ret %d %d %s\n", ret, errno, strerror(errno));
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
} else {
|
||||
*realLen = ret;
|
||||
}
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -194,7 +212,13 @@ T_DjiReturnCode HalUsbBulk_ReadData(T_DjiUsbBulkHandle usbBulkHandle, uint8_t *b
|
||||
*realLen = actualLen;
|
||||
#endif
|
||||
} else {
|
||||
*realLen = read(((T_HalUsbBulkObj *) usbBulkHandle)->ep2, buf, len);
|
||||
ret = read(((T_HalUsbBulkObj *) usbBulkHandle)->ep2, buf, len);
|
||||
if (ret < 0) {
|
||||
USER_LOG_ERROR("read ret %d %d %s\n", ret, errno, strerror(errno));
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
} else {
|
||||
*realLen = ret;
|
||||
}
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -216,6 +240,10 @@ T_DjiReturnCode HalUsbBulk_GetDeviceInfo(T_DjiHalUsbBulkDeviceInfo *deviceInfo)
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_1].endPointIn = LINUX_USB_BULK2_END_POINT_IN;
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_1].endPointOut = LINUX_USB_BULK2_END_POINT_OUT;
|
||||
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_2].interfaceNum = LINUX_USB_BULK3_INTERFACE_NUM;
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_2].endPointIn = LINUX_USB_BULK3_END_POINT_IN;
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_2].endPointOut = LINUX_USB_BULK3_END_POINT_OUT;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -52,26 +52,33 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
#define LINUX_USB_BULK1_EP_OUT_FD "/dev/usb-ffs/bulk1/ep1"
|
||||
#define LINUX_USB_BULK1_EP_IN_FD "/dev/usb-ffs/bulk1/ep2"
|
||||
#define LINUX_USB_BULK1_EP_IN_FD "/dev/usb-ffs/bulk1/ep1"
|
||||
#define LINUX_USB_BULK1_EP_OUT_FD "/dev/usb-ffs/bulk1/ep2"
|
||||
|
||||
#define LINUX_USB_BULK1_INTERFACE_NUM (7)
|
||||
#define LINUX_USB_BULK1_END_POINT_IN (0x88)
|
||||
#define LINUX_USB_BULK1_END_POINT_OUT (5)
|
||||
#define LINUX_USB_BULK1_INTERFACE_NUM (0)
|
||||
#define LINUX_USB_BULK1_END_POINT_IN (0x81)
|
||||
#define LINUX_USB_BULK1_END_POINT_OUT (0x01)
|
||||
|
||||
#define LINUX_USB_BULK2_EP_OUT_FD "/dev/usb-ffs/bulk2/ep1"
|
||||
#define LINUX_USB_BULK2_EP_IN_FD "/dev/usb-ffs/bulk2/ep2"
|
||||
#define LINUX_USB_BULK2_EP_IN_FD "/dev/usb-ffs/bulk2/ep1"
|
||||
#define LINUX_USB_BULK2_EP_OUT_FD "/dev/usb-ffs/bulk2/ep2"
|
||||
|
||||
#define LINUX_USB_BULK2_INTERFACE_NUM (8)
|
||||
#define LINUX_USB_BULK2_END_POINT_IN (0x89)
|
||||
#define LINUX_USB_BULK2_END_POINT_OUT (6)
|
||||
#define LINUX_USB_BULK2_INTERFACE_NUM (1)
|
||||
#define LINUX_USB_BULK2_END_POINT_IN (0x82)
|
||||
#define LINUX_USB_BULK2_END_POINT_OUT (0x02)
|
||||
|
||||
#define LINUX_USB_BULK3_EP_IN_FD "/dev/usb-ffs/bulk3/ep1"
|
||||
#define LINUX_USB_BULK3_EP_OUT_FD "/dev/usb-ffs/bulk3/ep2"
|
||||
|
||||
#define LINUX_USB_BULK3_INTERFACE_NUM (2)
|
||||
#define LINUX_USB_BULK3_END_POINT_IN (0x83)
|
||||
#define LINUX_USB_BULK3_END_POINT_OUT (0x03)
|
||||
|
||||
#ifdef PLATFORM_ARCH_x86_64
|
||||
#define LINUX_USB_VID (0x0B95)
|
||||
#define LINUX_USB_PID (0x1790)
|
||||
#else
|
||||
#define LINUX_USB_VID (0x0955)
|
||||
#define LINUX_USB_PID (0x7020)
|
||||
#define LINUX_USB_VID (0x2CA3)
|
||||
#define LINUX_USB_PID (0xF001)
|
||||
#endif
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
@ -33,6 +33,8 @@
|
||||
#include "dji_gimbal.h"
|
||||
#include "dji_xport.h"
|
||||
#include "gimbal_emu/test_payload_gimbal_emu.h"
|
||||
#include <widget_interaction_test/test_widget_interaction.h>
|
||||
#include "test_raspberry_pi_camera.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define PAYLOAD_CAMERA_EMU_TASK_FREQ (100)
|
||||
@ -40,8 +42,8 @@
|
||||
#define SDCARD_TOTAL_SPACE_IN_MB (32 * 1024)
|
||||
#define SDCARD_PER_PHOTO_SPACE_IN_MB (4)
|
||||
#define SDCARD_PER_SECONDS_RECORD_SPACE_IN_MB (2)
|
||||
#define ZOOM_OPTICAL_FOCAL_MAX_LENGTH (300)
|
||||
#define ZOOM_OPTICAL_FOCAL_MIN_LENGTH (10)
|
||||
#define ZOOM_OPTICAL_FOCAL_MAX_LENGTH (200*240)
|
||||
#define ZOOM_OPTICAL_FOCAL_MIN_LENGTH (1.2*240)
|
||||
#define ZOOM_OPTICAL_FOCAL_LENGTH_STEP (10)
|
||||
#define ZOOM_OPTICAL_FOCAL_LENGTH_CTRL_STEP (5)
|
||||
#define ZOOM_DIGITAL_BASE_FACTOR (1.0)
|
||||
@ -118,6 +120,7 @@ static T_TestCameraGimbalRotationArgument s_tapZoomNewestGimbalRotationArgument
|
||||
static uint32_t s_tapZoomNewestTargetHybridFocalLength = 0; // unit: 0.1mm
|
||||
static T_DjiMutexHandle s_tapZoomMutex = NULL;
|
||||
static E_DjiCameraVideoStreamType s_cameraVideoStreamType;
|
||||
static uint32_t s_currentVideoRecordTimeInSeconds = 0;
|
||||
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
static T_DjiReturnCode GetSystemState(T_DjiCameraSystemState *systemState);
|
||||
@ -205,6 +208,7 @@ static T_DjiReturnCode SetMode(E_DjiCameraMode mode)
|
||||
|
||||
s_cameraState.cameraMode = mode;
|
||||
USER_LOG_INFO("set camera mode:%d", mode);
|
||||
DjiTest_WidgetLogAppend("set cam mode %d", mode);
|
||||
|
||||
returnCode = osalHandler->MutexUnlock(s_commonMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -235,6 +239,11 @@ static T_DjiReturnCode StartRecordVideo(void)
|
||||
|
||||
s_cameraState.isRecording = true;
|
||||
USER_LOG_INFO("start record video");
|
||||
DjiTest_WidgetLogAppend("start record video");
|
||||
|
||||
#if USE_RASPBERRY_PI_CAMERA
|
||||
DjiTest_RaspberryPiRecordingAction(true);
|
||||
#endif
|
||||
|
||||
out:
|
||||
djiStat = osalHandler->MutexUnlock(s_commonMutex);
|
||||
@ -267,6 +276,11 @@ static T_DjiReturnCode StopRecordVideo(void)
|
||||
s_cameraState.isRecording = false;
|
||||
s_cameraState.currentVideoRecordingTimeInSeconds = 0;
|
||||
USER_LOG_INFO("stop record video");
|
||||
DjiTest_WidgetLogAppend("stop record video");
|
||||
|
||||
#if USE_RASPBERRY_PI_CAMERA
|
||||
DjiTest_RaspberryPiRecordingAction(false);
|
||||
#endif
|
||||
|
||||
out:
|
||||
djiStat = osalHandler->MutexUnlock(s_commonMutex);
|
||||
@ -290,6 +304,7 @@ static T_DjiReturnCode StartShootPhoto(void)
|
||||
}
|
||||
|
||||
USER_LOG_INFO("start shoot photo");
|
||||
DjiTest_WidgetLogAppend("start shoot photo");
|
||||
s_cameraState.isStoring = true;
|
||||
|
||||
if (s_cameraShootPhotoMode == DJI_CAMERA_SHOOT_PHOTO_MODE_SINGLE) {
|
||||
@ -300,6 +315,7 @@ static T_DjiReturnCode StartShootPhoto(void)
|
||||
s_cameraState.shootingState = DJI_CAMERA_SHOOTING_INTERVAL_PHOTO;
|
||||
s_cameraState.isShootingIntervalStart = true;
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInSeconds = s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds;
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInMs = s_cameraPhotoTimeIntervalSettings.timeIntervalMilliseconds;
|
||||
}
|
||||
|
||||
returnCode = osalHandler->MutexUnlock(s_commonMutex);
|
||||
@ -308,6 +324,16 @@ static T_DjiReturnCode StartShootPhoto(void)
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
#if USE_RASPBERRY_PI_CAMERA
|
||||
if(s_cameraShootPhotoMode == DJI_CAMERA_SHOOT_PHOTO_MODE_SINGLE) {
|
||||
DjiTest_RaspberryPiCameraTakePhoto();
|
||||
} else if(s_cameraShootPhotoMode == DJI_CAMERA_SHOOT_PHOTO_MODE_BURST) {
|
||||
for(uint8_t i = 0; i < s_cameraBurstCount; i++) {
|
||||
DjiTest_RaspberryPiCameraTakePhoto();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -323,6 +349,7 @@ static T_DjiReturnCode StopShootPhoto(void)
|
||||
}
|
||||
|
||||
USER_LOG_INFO("stop shoot photo");
|
||||
DjiTest_WidgetLogAppend("stop shoot photo");
|
||||
s_cameraState.shootingState = DJI_CAMERA_SHOOTING_PHOTO_IDLE;
|
||||
s_cameraState.isStoring = false;
|
||||
s_cameraState.isShootingIntervalStart = false;
|
||||
@ -349,6 +376,7 @@ static T_DjiReturnCode SetShootPhotoMode(E_DjiCameraShootPhotoMode mode)
|
||||
|
||||
s_cameraShootPhotoMode = mode;
|
||||
USER_LOG_INFO("set shoot photo mode:%d", mode);
|
||||
DjiTest_WidgetLogAppend("set shoot photo mode:%d", mode);
|
||||
|
||||
returnCode = osalHandler->MutexUnlock(s_commonMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -394,6 +422,7 @@ static T_DjiReturnCode SetPhotoBurstCount(E_DjiCameraBurstCount burstCount)
|
||||
|
||||
s_cameraBurstCount = burstCount;
|
||||
USER_LOG_INFO("set photo burst count:%d", burstCount);
|
||||
DjiTest_WidgetLogAppend("set photo burst count:%d", burstCount);
|
||||
|
||||
returnCode = osalHandler->MutexUnlock(s_commonMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -439,8 +468,12 @@ static T_DjiReturnCode SetPhotoTimeIntervalSettings(T_DjiCameraPhotoTimeInterval
|
||||
|
||||
s_cameraPhotoTimeIntervalSettings.captureCount = settings.captureCount;
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds = settings.timeIntervalSeconds;
|
||||
USER_LOG_INFO("set photo interval settings count:%d seconds:%d", settings.captureCount,
|
||||
settings.timeIntervalSeconds);
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalMilliseconds = settings.timeIntervalMilliseconds;
|
||||
USER_LOG_INFO("set photo interval settings count:%d seconds:%d.%d", settings.captureCount,
|
||||
settings.timeIntervalSeconds, settings.timeIntervalMilliseconds / 100);
|
||||
DjiTest_WidgetLogAppend("set photo interval: %d - %d.%d", settings.captureCount,
|
||||
settings.timeIntervalSeconds, settings.timeIntervalMilliseconds / 100);
|
||||
|
||||
s_cameraState.currentPhotoShootingIntervalCount = settings.captureCount;
|
||||
|
||||
returnCode = osalHandler->MutexUnlock(s_commonMutex);
|
||||
@ -508,6 +541,7 @@ static T_DjiReturnCode FormatSDCard(void)
|
||||
}
|
||||
|
||||
USER_LOG_INFO("format sdcard");
|
||||
DjiTest_WidgetLogAppend("format sdcard");
|
||||
|
||||
memset(&s_cameraSDCardState, 0, sizeof(T_DjiCameraSDCardState));
|
||||
s_cameraSDCardState.isInserted = true;
|
||||
@ -530,6 +564,7 @@ static T_DjiReturnCode FormatSDCard(void)
|
||||
static T_DjiReturnCode SetMeteringMode(E_DjiCameraMeteringMode mode)
|
||||
{
|
||||
USER_LOG_INFO("set metering mode:%d", mode);
|
||||
DjiTest_WidgetLogAppend("set metering mode:%d", mode);
|
||||
s_cameraMeteringMode = mode;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -545,6 +580,7 @@ static T_DjiReturnCode GetMeteringMode(E_DjiCameraMeteringMode *mode)
|
||||
static T_DjiReturnCode SetSpotMeteringTarget(T_DjiCameraSpotMeteringTarget target)
|
||||
{
|
||||
USER_LOG_INFO("set spot metering area col:%d row:%d", target.col, target.row);
|
||||
DjiTest_WidgetLogAppend("set spot metering area col:%d row:%d", target.col, target.row);
|
||||
memcpy(&s_cameraSpotMeteringTarget, &target, sizeof(T_DjiCameraSpotMeteringTarget));
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -560,6 +596,7 @@ static T_DjiReturnCode GetSpotMeteringTarget(T_DjiCameraSpotMeteringTarget *targ
|
||||
static T_DjiReturnCode SetFocusMode(E_DjiCameraFocusMode mode)
|
||||
{
|
||||
USER_LOG_INFO("set focus mode:%d", mode);
|
||||
DjiTest_WidgetLogAppend("set focus mode:%d", mode);
|
||||
s_cameraFocusMode = mode;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -575,6 +612,7 @@ static T_DjiReturnCode GetFocusMode(E_DjiCameraFocusMode *mode)
|
||||
static T_DjiReturnCode SetFocusTarget(T_DjiCameraPointInScreen target)
|
||||
{
|
||||
USER_LOG_INFO("set focus target x:%.2f y:%.2f", target.focusX, target.focusY);
|
||||
DjiTest_WidgetLogAppend("set focus target x:%.2f y:%.2f", target.focusX, target.focusY);
|
||||
memcpy(&s_cameraFocusTarget, &target, sizeof(T_DjiCameraPointInScreen));
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -590,6 +628,7 @@ static T_DjiReturnCode GetFocusTarget(T_DjiCameraPointInScreen *target)
|
||||
static T_DjiReturnCode SetFocusAssistantSettings(T_DjiCameraFocusAssistantSettings settings)
|
||||
{
|
||||
USER_LOG_INFO("set focus assistant setting MF:%d AF:%d", settings.isEnabledMF, settings.isEnabledAF);
|
||||
DjiTest_WidgetLogAppend("set focus assistant setting MF:%d AF:%d", settings.isEnabledMF, settings.isEnabledAF);
|
||||
memcpy(&s_cameraFocusAssistantSettings, &settings, sizeof(T_DjiCameraFocusAssistantSettings));
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -605,6 +644,7 @@ static T_DjiReturnCode GetFocusAssistantSettings(T_DjiCameraFocusAssistantSettin
|
||||
static T_DjiReturnCode SetFocusRingValue(uint32_t value)
|
||||
{
|
||||
USER_LOG_INFO("set focus ring value:%d", value);
|
||||
DjiTest_WidgetLogAppend("set focus ring value:%d", value);
|
||||
s_cameraFocusRingValue = value;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -636,6 +676,7 @@ static T_DjiReturnCode SetDigitalZoomFactor(dji_f32_t factor)
|
||||
}
|
||||
|
||||
USER_LOG_INFO("set digital zoom factor:%.2f", factor);
|
||||
DjiTest_WidgetLogAppend("set digital zoom factor:%.2f", factor);
|
||||
s_cameraDigitalZoomFactor = factor;
|
||||
|
||||
returnCode = osalHandler->MutexUnlock(s_zoomMutex);
|
||||
@ -659,9 +700,10 @@ static T_DjiReturnCode SetOpticalZoomFocalLength(uint32_t focalLength)
|
||||
}
|
||||
|
||||
USER_LOG_INFO("set optical zoom focal length:%d", focalLength);
|
||||
DjiTest_WidgetLogAppend("set optical zoom focal length:%d", focalLength);
|
||||
s_isOpticalZoomReachLimit = false;
|
||||
s_cameraDigitalZoomFactor = ZOOM_DIGITAL_BASE_FACTOR;
|
||||
s_cameraOpticalZoomFocalLength = ZOOM_OPTICAL_FOCAL_MIN_LENGTH;
|
||||
s_cameraOpticalZoomFocalLength = focalLength;
|
||||
|
||||
returnCode = osalHandler->MutexUnlock(s_zoomMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -714,7 +756,8 @@ static T_DjiReturnCode StartContinuousOpticalZoom(E_DjiCameraZoomDirection direc
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("start continuous optical zoom direction:%d speed:%d", direction, speed);
|
||||
DjiTest_WidgetLogAppend("continuous optical zoom dir:%d speed:%d", direction, speed);
|
||||
USER_LOG_INFO("continuous optical zoom direction:%d speed:%d", direction, speed);
|
||||
s_isStartContinuousOpticalZoom = true;
|
||||
s_cameraZoomDirection = direction;
|
||||
s_cameraZoomSpeed = speed;
|
||||
@ -740,6 +783,7 @@ static T_DjiReturnCode StopContinuousOpticalZoom(void)
|
||||
}
|
||||
|
||||
USER_LOG_INFO("stop continuous optical zoom");
|
||||
DjiTest_WidgetLogAppend("stop continuous optical zoom");
|
||||
s_isStartContinuousOpticalZoom = false;
|
||||
s_cameraZoomDirection = DJI_CAMERA_ZOOM_DIRECTION_OUT;
|
||||
s_cameraZoomSpeed = DJI_CAMERA_ZOOM_SPEED_NORMAL;
|
||||
@ -777,6 +821,7 @@ static T_DjiReturnCode GetTapZoomState(T_DjiCameraTapZoomState *state)
|
||||
|
||||
static T_DjiReturnCode SetTapZoomEnabled(bool enabledFlag)
|
||||
{
|
||||
DjiTest_WidgetLogAppend("set tap zoom enabled flag: %d.", enabledFlag);
|
||||
USER_LOG_INFO("set tap zoom enabled flag: %d.", enabledFlag);
|
||||
s_isTapZoomEnabled = enabledFlag;
|
||||
|
||||
@ -793,6 +838,7 @@ static T_DjiReturnCode GetTapZoomEnabled(bool *enabledFlag)
|
||||
static T_DjiReturnCode SetTapZoomMultiplier(uint8_t multiplier)
|
||||
{
|
||||
USER_LOG_INFO("set tap zoom multiplier: %d.", multiplier);
|
||||
DjiTest_WidgetLogAppend("set tap zoom multiplier: %d.", multiplier);
|
||||
s_tapZoomMultiplier = multiplier;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -815,6 +861,7 @@ static T_DjiReturnCode TapZoomAtTarget(T_DjiCameraPointInScreen target)
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
|
||||
USER_LOG_INFO("tap zoom at target: x %f, y %f.", target.focusX, target.focusY);
|
||||
DjiTest_WidgetLogAppend("tap zoom at target: x %f, y %f.", target.focusX, target.focusY);
|
||||
|
||||
if (s_isTapZoomEnabled != true) {
|
||||
USER_LOG_WARN("tap zoom is not enabled.");
|
||||
@ -908,6 +955,8 @@ static T_DjiReturnCode DjiTest_CameraRotationGimbal(T_TestCameraGimbalRotationAr
|
||||
}
|
||||
|
||||
if (aircraftBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 ||
|
||||
aircraftBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V3 ||
|
||||
aircraftBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_EPORT_V2_RIBBON_CABLE ||
|
||||
aircraftBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_NONE) {
|
||||
returnCode = DjiTest_GimbalRotate(gimbalRotationArgument.rotationMode, gimbalRotationArgument.rotationProperty,
|
||||
gimbalRotationArgument.rotationValue);
|
||||
@ -946,6 +995,7 @@ static void *UserCamera_Task(void *arg)
|
||||
uint32_t currentTime = 0;
|
||||
bool isStartIntervalPhotoAction = false;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
uint32_t intervalFreq = 10;
|
||||
|
||||
USER_UTIL_UNUSED(arg);
|
||||
|
||||
@ -1138,8 +1188,7 @@ out:
|
||||
}
|
||||
}
|
||||
|
||||
// 1Hz
|
||||
if (USER_UTIL_IS_WORK_TURN(step, 1, PAYLOAD_CAMERA_EMU_TASK_FREQ)) {
|
||||
if (USER_UTIL_IS_WORK_TURN(step, intervalFreq, PAYLOAD_CAMERA_EMU_TASK_FREQ)) {
|
||||
returnCode = osalHandler->MutexLock(s_commonMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("lock mutex error: 0x%08llX.", returnCode);
|
||||
@ -1147,13 +1196,21 @@ out:
|
||||
}
|
||||
|
||||
if (s_cameraState.isRecording) {
|
||||
s_cameraState.currentVideoRecordingTimeInSeconds++;
|
||||
s_cameraSDCardState.remainSpaceInMB =
|
||||
s_cameraSDCardState.remainSpaceInMB - SDCARD_PER_SECONDS_RECORD_SPACE_IN_MB;
|
||||
if (s_cameraSDCardState.remainSpaceInMB > SDCARD_TOTAL_SPACE_IN_MB) {
|
||||
s_cameraSDCardState.remainSpaceInMB = 0;
|
||||
s_cameraSDCardState.isFull = true;
|
||||
uint16_t preTimeInSeconds = s_cameraState.currentVideoRecordingTimeInSeconds;
|
||||
|
||||
s_currentVideoRecordTimeInSeconds++;
|
||||
|
||||
s_cameraState.currentVideoRecordingTimeInSeconds = s_currentVideoRecordTimeInSeconds / intervalFreq;
|
||||
if (s_cameraState.currentVideoRecordingTimeInSeconds > preTimeInSeconds) {
|
||||
s_cameraSDCardState.remainSpaceInMB =
|
||||
s_cameraSDCardState.remainSpaceInMB - SDCARD_PER_SECONDS_RECORD_SPACE_IN_MB;
|
||||
if (s_cameraSDCardState.remainSpaceInMB > SDCARD_TOTAL_SPACE_IN_MB) {
|
||||
s_cameraSDCardState.remainSpaceInMB = 0;
|
||||
s_cameraSDCardState.isFull = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
s_currentVideoRecordTimeInSeconds = 0;
|
||||
}
|
||||
|
||||
if (s_cameraState.isShootingIntervalStart == false) {
|
||||
@ -1162,10 +1219,16 @@ out:
|
||||
|
||||
if (s_cameraShootPhotoMode == DJI_CAMERA_SHOOT_PHOTO_MODE_INTERVAL
|
||||
&& s_cameraState.isShootingIntervalStart == true && s_cameraPhotoTimeIntervalSettings.captureCount > 0
|
||||
&& s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds > 0) {
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInSeconds--;
|
||||
&& (s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds > 0 || s_cameraPhotoTimeIntervalSettings.timeIntervalMilliseconds > 0)) {
|
||||
uint16_t currentPhotoShootingIntervalTimeInMs = s_cameraState.currentPhotoShootingIntervalTimeInSeconds * 1000 +
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInMs;
|
||||
|
||||
if ((s_cameraState.currentPhotoShootingIntervalTimeInSeconds == 0 &&
|
||||
currentPhotoShootingIntervalTimeInMs -= 1000 / intervalFreq;
|
||||
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInSeconds = currentPhotoShootingIntervalTimeInMs / 1000;
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInMs = currentPhotoShootingIntervalTimeInMs % 1000;
|
||||
|
||||
if ((currentPhotoShootingIntervalTimeInMs == 0 &&
|
||||
s_cameraState.currentPhotoShootingIntervalCount > 0) ||
|
||||
(s_cameraState.isShootingIntervalStart == true && isStartIntervalPhotoAction == false)) {
|
||||
|
||||
@ -1173,13 +1236,23 @@ out:
|
||||
|
||||
s_cameraState.shootingState = DJI_CAMERA_SHOOTING_INTERVAL_PHOTO;
|
||||
s_cameraState.isStoring = true;
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInSeconds
|
||||
= s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds;
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInSeconds = s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds;
|
||||
s_cameraState.currentPhotoShootingIntervalTimeInMs = s_cameraPhotoTimeIntervalSettings.timeIntervalMilliseconds;
|
||||
if (s_cameraState.currentPhotoShootingIntervalCount < INTERVAL_PHOTOGRAPH_ALWAYS_COUNT) {
|
||||
USER_LOG_INFO("interval taking photograph count:%d interval_time:%ds",
|
||||
#if USE_RASPBERRY_PI_CAMERA
|
||||
DjiTest_RaspberryPiCameraTakePhoto();
|
||||
#endif
|
||||
DjiTest_WidgetLogAppend("interval taking photo count:%d interval:%d.%ds",
|
||||
(s_cameraPhotoTimeIntervalSettings.captureCount -
|
||||
s_cameraState.currentPhotoShootingIntervalCount + 1),
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds);
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds,
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalMilliseconds / 100);
|
||||
|
||||
USER_LOG_INFO("interval taking photograph count:%d interval_time:%d.%ds",
|
||||
(s_cameraPhotoTimeIntervalSettings.captureCount -
|
||||
s_cameraState.currentPhotoShootingIntervalCount + 1),
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds,
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalMilliseconds / 100);
|
||||
s_cameraState.currentPhotoShootingIntervalCount--;
|
||||
if (s_cameraState.currentPhotoShootingIntervalCount == 0) {
|
||||
s_cameraState.shootingState = DJI_CAMERA_SHOOTING_PHOTO_IDLE;
|
||||
@ -1187,8 +1260,15 @@ out:
|
||||
s_cameraState.isShootingIntervalStart = false;
|
||||
}
|
||||
} else {
|
||||
USER_LOG_INFO("interval taking photograph always, interval_time:%ds",
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds);
|
||||
#if USE_RASPBERRY_PI_CAMERA
|
||||
DjiTest_RaspberryPiCameraTakePhoto();
|
||||
#endif
|
||||
DjiTest_WidgetLogAppend("interval taking photo always, interval:%d.%ds",
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds,
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalMilliseconds / 100);
|
||||
USER_LOG_INFO("interval taking photograph always, interval_time:%d.%ds",
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalSeconds,
|
||||
s_cameraPhotoTimeIntervalSettings.timeIntervalMilliseconds / 100);
|
||||
s_cameraState.currentPhotoShootingIntervalCount--;
|
||||
}
|
||||
}
|
||||
@ -1462,4 +1542,4 @@ bool DjiTest_CameraIsInited(void)
|
||||
return s_isCamInited;
|
||||
}
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
@ -23,6 +23,7 @@
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include "dji_logger.h"
|
||||
@ -35,6 +36,7 @@
|
||||
#include "camera_emu/dji_media_file_manage/dji_media_file_core.h"
|
||||
#include "dji_high_speed_data_channel.h"
|
||||
#include "dji_aircraft_info.h"
|
||||
#include "test_raspberry_pi_camera.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define FFMPEG_CMD_BUF_SIZE (256 + 256)
|
||||
@ -193,7 +195,8 @@ T_DjiReturnCode DjiTest_CameraEmuMediaStartService(void)
|
||||
UtilBuffer_Init(&s_mediaPlayCommandBufferHandler, s_mediaPlayCommandBuffer, sizeof(s_mediaPlayCommandBuffer));
|
||||
|
||||
if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M300_RTK ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M350_RTK) {
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M350_RTK ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M400) {
|
||||
returnCode = DjiPayloadCamera_RegMediaDownloadPlaybackHandler(&s_psdkCameraMedia);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("psdk camera media function init error.");
|
||||
@ -207,6 +210,13 @@ T_DjiReturnCode DjiTest_CameraEmuMediaStartService(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
#if USE_RASPBERRY_PI_CAMERA
|
||||
returnCode = DjiTest_RaspberryPiCameraInit();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("start raspberry pi camera error.");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
#else
|
||||
if (DjiPlatform_GetHalNetworkHandler() != NULL || DjiPlatform_GetHalUsbBulkHandler() != NULL) {
|
||||
returnCode = osalHandler->TaskCreate("user_camera_media_task", UserCameraMedia_SendVideoTask, 2048,
|
||||
NULL, &s_userSendVideoThread);
|
||||
@ -215,6 +225,7 @@ T_DjiReturnCode DjiTest_CameraEmuMediaStartService(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
@ -726,7 +737,7 @@ static T_DjiReturnCode DjiPlayback_GetFrameRateOfVideoFile(const char *path, flo
|
||||
|
||||
ret = fscanf(fpCommand, "r_frame_rate=%d/%d", &frameRateMolecule, &frameRateDenominator);
|
||||
if (ret <= 0) {
|
||||
USER_LOG_ERROR("can not find frame rate.");
|
||||
USER_LOG_ERROR("can not find frame rate form \"%s\".", path);
|
||||
returnCode = DJI_ERROR_SYSTEM_MODULE_CODE_NOT_FOUND;
|
||||
goto out;
|
||||
}
|
||||
@ -1196,7 +1207,7 @@ static void *UserCameraMedia_SendVideoTask(void *arg)
|
||||
exit(1);
|
||||
}
|
||||
if (s_isMediaFileDirPathConfigured == true) {
|
||||
snprintf(tempPath, DJI_FILE_PATH_SIZE_MAX, "%sPSDK_0005.h264", s_mediaFileDirPath);
|
||||
snprintf(tempPath, DJI_FILE_PATH_SIZE_MAX, "%smedia_file/PSDK_0005.h264", s_mediaFileDirPath);
|
||||
} else {
|
||||
snprintf(tempPath, DJI_FILE_PATH_SIZE_MAX, "%smedia_file/PSDK_0005.h264", curFileDirPath);
|
||||
}
|
||||
@ -1309,7 +1320,7 @@ static void *UserCameraMedia_SendVideoTask(void *arg)
|
||||
|
||||
fpFile = fopen(transcodedFilePath, "rb+");
|
||||
if (fpFile == NULL) {
|
||||
USER_LOG_ERROR("open video file fail.");
|
||||
USER_LOG_ERROR("open video file:\"%s\" fail:%d.", transcodedFilePath, errno);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@ -65,17 +65,24 @@ static const T_DjiTestCameraTypeStr s_cameraTypeStrList[] = {
|
||||
{DJI_CAMERA_TYPE_P1, "Zenmuse P1"},
|
||||
{DJI_CAMERA_TYPE_L1, "Zenmuse L1"},
|
||||
{DJI_CAMERA_TYPE_L2, "Zenmuse L2"},
|
||||
{DJI_CAMERA_TYPE_L3, "Zenmuse L3"},
|
||||
{DJI_CAMERA_TYPE_H20N, "Zenmuse H20N"},
|
||||
{DJI_CAMERA_TYPE_M30, "M30 Camera"},
|
||||
{DJI_CAMERA_TYPE_M30T, "M30T Camera"},
|
||||
{DJI_CAMERA_TYPE_M3E, "M3E Camera"},
|
||||
{DJI_CAMERA_TYPE_M3T, "M3T Camera"},
|
||||
{DJI_CAMERA_TYPE_M3TA, "M3TA Camera"},
|
||||
{DJI_CAMERA_TYPE_M3D, "M3D Camera"},
|
||||
{DJI_CAMERA_TYPE_M3TD, "M3TD Camera"},
|
||||
{DJI_CAMERA_TYPE_H30, "H30 Camera"},
|
||||
{DJI_CAMERA_TYPE_H30T, "H30T Camera"},
|
||||
{DJI_CAMERA_TYPE_M4T, "M4T Camera"},
|
||||
{DJI_CAMERA_TYPE_M4E, "M4E Camera"},
|
||||
{DJI_CAMERA_TYPE_M4TD, "M4TD Camera"},
|
||||
{DJI_CAMERA_TYPE_M4D, "M4D Camera"},
|
||||
};
|
||||
|
||||
#ifndef SYSTEM_ARCH_RTOS
|
||||
static FILE *s_downloadMediaFile = NULL;
|
||||
static T_DjiCameraManagerFileList s_meidaFileList;
|
||||
static uint32_t downloadStartMs = 0;
|
||||
@ -84,18 +91,23 @@ static char downloadFileName[TEST_CAMERA_MANAGER_MEDIA_FILE_NAME_MAX_SIZE] = {0}
|
||||
static uint32_t s_nextDownloadFileIndex = 0;
|
||||
static T_DjiMopChannelHandle s_mopChannelHandle;
|
||||
static char s_pointCloudFilePath[TEST_CAMEAR_POINT_CLOUD_FILE_PATH_STR_MAX_SIZE];
|
||||
#endif
|
||||
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
static uint8_t DjiTest_CameraManagerGetCameraTypeIndex(E_DjiCameraType cameraType);
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_DjiMountPosition position);
|
||||
static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadFileListBySlices(E_DjiMountPosition position);
|
||||
static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownloadFilePacketInfo packetInfo,
|
||||
const uint8_t *data, uint16_t len);
|
||||
#endif
|
||||
static T_DjiReturnCode DjiTest_CameraManagerGetAreaThermometryData(E_DjiMountPosition position);
|
||||
static T_DjiReturnCode DjiTest_CameraManagerGetPointThermometryData(E_DjiMountPosition position);
|
||||
|
||||
static T_DjiReturnCode DjiTest_CameraManagerGetLidarRangingInfo(E_DjiMountPosition position);
|
||||
#ifndef SYSTEM_ARCH_RTOS
|
||||
T_DjiReturnCode DjiTest_CameraManagerSubscribePointCloud(E_DjiMountPosition position);
|
||||
#endif
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
/*! @brief Sample to set EV for camera, using async api
|
||||
@ -846,12 +858,18 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_CAMERA_SHUTTER_SPEED: {
|
||||
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_H20N || cameraType == DJI_CAMERA_TYPE_M30 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M30T || cameraType == DJI_CAMERA_TYPE_M3E ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3T || cameraType == DJI_CAMERA_TYPE_M3D ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3TD || cameraType == DJI_CAMERA_TYPE_H30 ||
|
||||
cameraType == DJI_CAMERA_TYPE_H30T) {
|
||||
if (DJI_CAMERA_TYPE_H20 == cameraType || DJI_CAMERA_TYPE_H20T == 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 == cameraType
|
||||
|| DJI_CAMERA_TYPE_M3TA == cameraType
|
||||
|| DJI_CAMERA_TYPE_M3D == cameraType || DJI_CAMERA_TYPE_M3TD == cameraType
|
||||
|| DJI_CAMERA_TYPE_M4T == cameraType || DJI_CAMERA_TYPE_M4TD == cameraType
|
||||
|| DJI_CAMERA_TYPE_H30 == cameraType || DJI_CAMERA_TYPE_H30T == cameraType
|
||||
|| DJI_CAMERA_TYPE_M4T == cameraType || DJI_CAMERA_TYPE_M4E == cameraType
|
||||
|| DJI_CAMERA_TYPE_H30 == cameraType || DJI_CAMERA_TYPE_H30T == cameraType
|
||||
|| DJI_CAMERA_TYPE_M4TD == cameraType || DJI_CAMERA_TYPE_M4D == cameraType
|
||||
) {
|
||||
USER_LOG_INFO("Set mounted position %d camera's exposure mode to manual mode.",
|
||||
mountPosition);
|
||||
returnCode = DjiTest_CameraManagerSetExposureMode(mountPosition,
|
||||
@ -887,12 +905,17 @@ 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_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 || cameraType == DJI_CAMERA_TYPE_M3D
|
||||
|| cameraType == DJI_CAMERA_TYPE_M3TD || cameraType == DJI_CAMERA_TYPE_H30
|
||||
|| cameraType == DJI_CAMERA_TYPE_H30T) {
|
||||
if (DJI_CAMERA_TYPE_H20 == cameraType || DJI_CAMERA_TYPE_H20T == 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 == cameraType
|
||||
|| DJI_CAMERA_TYPE_M3TA == cameraType
|
||||
|| DJI_CAMERA_TYPE_M3D == cameraType || DJI_CAMERA_TYPE_M3TD == cameraType
|
||||
|| DJI_CAMERA_TYPE_M4T == cameraType || DJI_CAMERA_TYPE_M4TD == cameraType
|
||||
|| DJI_CAMERA_TYPE_M4E == cameraType || DJI_CAMERA_TYPE_H30 == cameraType
|
||||
|| DJI_CAMERA_TYPE_H30T == cameraType|| DJI_CAMERA_TYPE_M4TD == cameraType
|
||||
|| DJI_CAMERA_TYPE_M4D == cameraType
|
||||
) {
|
||||
USER_LOG_INFO("Set mounted position %d camera's exposure mode to manual mode.",
|
||||
mountPosition);
|
||||
returnCode = DjiTest_CameraManagerSetExposureMode(mountPosition,
|
||||
@ -1081,9 +1104,7 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SHOOT_INTERVAL_PHOTO: {
|
||||
USER_LOG_INFO("--> Function k: Shoot Interval photo with 3s intervals in 15s");
|
||||
DjiTest_WidgetLogAppend("--> Function k: Shoot Interval photo with 3s intervals in 15s");
|
||||
T_DjiCameraPhotoTimeIntervalSettings intervalData;
|
||||
intervalData.captureCount = 255;
|
||||
intervalData.timeIntervalSeconds = 3;
|
||||
T_DjiCameraPhotoTimeIntervalSettings intervalData = {.captureCount = 255, .timeIntervalSeconds = 3, .timeIntervalMilliseconds = 0};
|
||||
|
||||
returnCode = DjiTest_CameraManagerStartShootIntervalPhoto(mountPosition, intervalData);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -1185,11 +1206,17 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
E_DjiCameraManagerNightSceneMode nightSceneMode;
|
||||
T_DjiCameraManagerRangeList nightSceneModeRange;
|
||||
|
||||
if (cameraType == DJI_CAMERA_TYPE_XT2 || cameraType == DJI_CAMERA_TYPE_XTS ||
|
||||
cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_P1 ||
|
||||
cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_L2 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3E || cameraType == DJI_CAMERA_TYPE_M3T ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3D || cameraType == DJI_CAMERA_TYPE_M3TD) {
|
||||
if (DJI_CAMERA_TYPE_XT2 == cameraType || DJI_CAMERA_TYPE_XTS == cameraType
|
||||
|| DJI_CAMERA_TYPE_H20 == cameraType
|
||||
|| DJI_CAMERA_TYPE_P1 == cameraType
|
||||
|| DJI_CAMERA_TYPE_L1 == cameraType || DJI_CAMERA_TYPE_L2 == cameraType
|
||||
|| DJI_CAMERA_TYPE_M3E == cameraType || DJI_CAMERA_TYPE_M3T == cameraType
|
||||
|| DJI_CAMERA_TYPE_M3TA == cameraType
|
||||
|| DJI_CAMERA_TYPE_M3D == cameraType || DJI_CAMERA_TYPE_M3TD == cameraType
|
||||
|| DJI_CAMERA_TYPE_M4T == cameraType || DJI_CAMERA_TYPE_M4E == cameraType
|
||||
|| DJI_CAMERA_TYPE_M4TD == cameraType || DJI_CAMERA_TYPE_M4D == cameraType
|
||||
|| DJI_CAMERA_TYPE_L3 == cameraType
|
||||
) {
|
||||
USER_LOG_INFO("Camera type %s does not support night scene mode!",
|
||||
s_cameraTypeStrList[DjiTest_CameraManagerGetCameraTypeIndex(cameraType)].cameraTypeStr);
|
||||
goto exitCameraModule;
|
||||
@ -1534,6 +1561,7 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
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 || cameraType == DJI_CAMERA_TYPE_H30 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3TA ||
|
||||
cameraType == DJI_CAMERA_TYPE_H30T) {
|
||||
returnCode = DjiCameraManager_SetStreamSource(mountPosition, DJI_CAMERA_MANAGER_SOURCE_ZOOM_CAM);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -1595,7 +1623,9 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
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_H30 ||
|
||||
cameraType == DJI_CAMERA_TYPE_H30T) {
|
||||
cameraType == DJI_CAMERA_TYPE_M3TA ||
|
||||
cameraType == DJI_CAMERA_TYPE_H30T)
|
||||
{
|
||||
USER_LOG_INFO("Set camera stream source to zoom camera.");
|
||||
returnCode = DjiCameraManager_SetStreamSource(mountPosition, DJI_CAMERA_MANAGER_SOURCE_ZOOM_CAM);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -1637,7 +1667,8 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
|
||||
if (cameraType != DJI_CAMERA_TYPE_Z30) {
|
||||
returnCode = DjiCameraManager_GetFocusRingValue(mountPosition, &focusRingValue);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS
|
||||
&& returnCode != DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_UNSUPPORTED_COMMAND) {
|
||||
USER_LOG_ERROR("Get camera focus ring value at position %d failed", mountPosition);
|
||||
goto exitCameraModule;
|
||||
}
|
||||
@ -1817,60 +1848,51 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
}
|
||||
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_METERING_MODE: {
|
||||
E_DjiCameraManagerMeteringMode meteringMode;
|
||||
T_DjiCameraManagerRangeList rangeList = {0};
|
||||
|
||||
USER_LOG_INFO("Set metering mode as %d", DJI_CAMERA_MANAGER_METERING_MODE_AVERAGE);
|
||||
returnCode = DjiCameraManager_SetMeteringMode(mountPosition, DJI_CAMERA_MANAGER_METERING_MODE_AVERAGE);
|
||||
returnCode = DjiCameraManager_GetMeteringModeRange(mountPosition, &rangeList);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Set camera metering mode %d failed", DJI_CAMERA_MANAGER_METERING_MODE_AVERAGE);
|
||||
USER_LOG_ERROR("Failed to get metering mode range of camera on position %d, return code 0x%08X",
|
||||
mountPosition, returnCode);
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(200);
|
||||
USER_LOG_INFO("Avaliable metering mode num is %d", rangeList.size);
|
||||
|
||||
returnCode = DjiCameraManager_GetMeteringMode(mountPosition, &meteringMode);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get camera metering mode failed.");
|
||||
goto exitCameraModule;
|
||||
for (uint8_t i = 0; i < rangeList.size; i++) {
|
||||
USER_LOG_INFO("[%d] Set metering mode as %d (%s)",
|
||||
i,
|
||||
rangeList.meteringMode[i],
|
||||
rangeList.meteringMode[i] == DJI_CAMERA_MANAGER_METERING_MODE_CENTRAL ? "centeral" :
|
||||
rangeList.meteringMode[i] == DJI_CAMERA_MANAGER_METERING_MODE_AVERAGE ? "average" :
|
||||
rangeList.meteringMode[i] == DJI_CAMERA_MANAGER_METERING_MODE_SPOT ? "spot" :
|
||||
"error mode"
|
||||
);
|
||||
|
||||
returnCode = DjiCameraManager_SetMeteringMode(mountPosition, rangeList.meteringMode[i]);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Set camera metering mode %d failed", DJI_CAMERA_MANAGER_METERING_MODE_AVERAGE);
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(200);
|
||||
|
||||
returnCode = DjiCameraManager_GetMeteringMode(mountPosition, &meteringMode);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get camera metering mode failed.");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
USER_LOG_INFO("[%d] Current mode is %d (%s)",
|
||||
i,
|
||||
rangeList.meteringMode[i],
|
||||
rangeList.meteringMode[i] == DJI_CAMERA_MANAGER_METERING_MODE_CENTRAL ? "centeral" :
|
||||
rangeList.meteringMode[i] == DJI_CAMERA_MANAGER_METERING_MODE_AVERAGE ? "average" :
|
||||
rangeList.meteringMode[i] == DJI_CAMERA_MANAGER_METERING_MODE_SPOT ? "spot" :
|
||||
"error mode"
|
||||
);
|
||||
|
||||
osalHandler->TaskSleepMs(2000);
|
||||
}
|
||||
USER_LOG_INFO("Current metering mode is %d", meteringMode);
|
||||
|
||||
USER_LOG_INFO("Sleep 2s...");
|
||||
osalHandler->TaskSleepMs(2000);
|
||||
|
||||
USER_LOG_INFO("Set metering mode as %d", DJI_CAMERA_MANAGER_METERING_MODE_SPOT);
|
||||
returnCode = DjiCameraManager_SetMeteringMode(mountPosition, DJI_CAMERA_MANAGER_METERING_MODE_SPOT);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Set camera metering mode %d failed", DJI_CAMERA_MANAGER_METERING_MODE_SPOT);
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(200);
|
||||
|
||||
returnCode = DjiCameraManager_GetMeteringMode(mountPosition, &meteringMode);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get camera metering mode failed.");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
USER_LOG_INFO("Current metering mode is %d", meteringMode);
|
||||
|
||||
USER_LOG_INFO("Sleep 2s...");
|
||||
osalHandler->TaskSleepMs(2000);
|
||||
|
||||
USER_LOG_INFO("Set metering mode as %d", DJI_CAMERA_MANAGER_METERING_MODE_CENTRAL);
|
||||
returnCode = DjiCameraManager_SetMeteringMode(mountPosition, DJI_CAMERA_MANAGER_METERING_MODE_CENTRAL);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Set camera metering mode %d failed", DJI_CAMERA_MANAGER_METERING_MODE_CENTRAL);
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(200);
|
||||
|
||||
returnCode = DjiCameraManager_GetMeteringMode(mountPosition, &meteringMode);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get camera metering mode failed.");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
USER_LOG_INFO("Current metering mode is %d", meteringMode);
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1885,34 +1907,62 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
returnCode = DjiCameraManager_GetMeteringPointRegionRange(mountPosition, &horizonRegionNum, &viticalRegionNum);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get metering point region range failed!");
|
||||
goto exitCameraModule;
|
||||
if (cameraType == DJI_CAMERA_TYPE_L3) {
|
||||
dji_f32_t inputXFloat, inputYFloat;
|
||||
dji_f32_t getXFloat, getYFloat;
|
||||
|
||||
printf("Input nomorlized meterting point, range: 0.0 ~ 1.0 (x, y) you want to set: ");
|
||||
scanf("%f %f", &inputXFloat, &inputYFloat);
|
||||
|
||||
USER_LOG_INFO("Try to set metering point as (%f, %f)", inputXFloat, inputYFloat);
|
||||
returnCode = DjiCameraManager_SetMeteringPointNormalized(mountPosition, inputXFloat, inputYFloat);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Set metering point failed");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(500);
|
||||
|
||||
returnCode = DjiCameraManager_GetMeteringPointNormalized(mountPosition, &getXFloat, &getYFloat);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get metering point failed");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Current metering point in normalized: (%f, %f)", getXFloat, getYFloat);
|
||||
|
||||
} else {
|
||||
returnCode = DjiCameraManager_GetMeteringPointRegionRange(mountPosition, &horizonRegionNum, &viticalRegionNum);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get metering point region range failed!");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("region range: horizon %d, vitical %d", horizonRegionNum, viticalRegionNum);
|
||||
|
||||
osalHandler->TaskSleepMs(5);
|
||||
printf("Input meterting point (x, y) you want to set: ");
|
||||
scanf("%d %d", &x, &y);
|
||||
|
||||
USER_LOG_INFO("Try to set metering point as (%d, %d)", (uint8_t)x, (uint8_t)y);
|
||||
returnCode = DjiCameraManager_SetMeteringPoint(mountPosition, x, y);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Set metering point failed");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(500);
|
||||
|
||||
returnCode = DjiCameraManager_GetMeteringPoint(mountPosition, &getX, &getY);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get metering point failed");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Current metering point: (%d, %d)", getX, getY);
|
||||
}
|
||||
|
||||
USER_LOG_INFO("region range: horizon %d, vitical %d", horizonRegionNum, viticalRegionNum);
|
||||
|
||||
osalHandler->TaskSleepMs(5);
|
||||
printf("Input meterting point (x, y) you want to set: ");
|
||||
scanf("%d %d", &x, &y);
|
||||
|
||||
USER_LOG_INFO("Try to set metering point as (%d, %d)", (uint8_t)x, (uint8_t)y);
|
||||
returnCode = DjiCameraManager_SetMeteringPoint(mountPosition, x, y);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Set metering point failed");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(500);
|
||||
|
||||
returnCode = DjiCameraManager_GetMeteringPoint(mountPosition, &getX, &getY);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get metering point failed");
|
||||
goto exitCameraModule;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Current metering point: (%d, %d)", getX, getY);
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1923,7 +1973,10 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_P1 ||
|
||||
cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_M30 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3E || cameraType == DJI_CAMERA_TYPE_M3D ||
|
||||
cameraType == DJI_CAMERA_TYPE_L2 || cameraType == DJI_CAMERA_TYPE_H30) {
|
||||
cameraType == DJI_CAMERA_TYPE_L2 || cameraType == DJI_CAMERA_TYPE_H30 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M4TD || cameraType == DJI_CAMERA_TYPE_M4D ||
|
||||
cameraType == DJI_CAMERA_TYPE_M4T || cameraType == DJI_CAMERA_TYPE_L3 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M4E) {
|
||||
USER_LOG_WARN("Camera type %s don't support FFC function.",
|
||||
s_cameraTypeStrList[DjiTest_CameraManagerGetCameraTypeIndex(cameraType)].cameraTypeStr);
|
||||
goto exitCameraModule;
|
||||
@ -1969,7 +2022,10 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_P1 ||
|
||||
cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_M30 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M3E || cameraType == DJI_CAMERA_TYPE_M3D ||
|
||||
cameraType == DJI_CAMERA_TYPE_L2 || cameraType == DJI_CAMERA_TYPE_H30) {
|
||||
cameraType == DJI_CAMERA_TYPE_L2 || cameraType == DJI_CAMERA_TYPE_H30 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M4TD || cameraType == DJI_CAMERA_TYPE_M4D ||
|
||||
cameraType == DJI_CAMERA_TYPE_M4T || cameraType == DJI_CAMERA_TYPE_L3 ||
|
||||
cameraType == DJI_CAMERA_TYPE_M4E) {
|
||||
USER_LOG_WARN("Camera type %s don't support infrared function.",
|
||||
s_cameraTypeStrList[DjiTest_CameraManagerGetCameraTypeIndex(cameraType)].cameraTypeStr);
|
||||
goto exitCameraModule;
|
||||
@ -2102,6 +2158,7 @@ static uint8_t DjiTest_CameraManagerGetCameraTypeIndex(E_DjiCameraType cameraTyp
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_DjiMountPosition position)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
@ -2117,9 +2174,11 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("obtain downloader rights of pos %d", position);
|
||||
returnCode = DjiCameraManager_ObtainDownloaderRights(position);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Obtain downloader rights failed, error code: 0x%08X.", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
returnCode = DjiCameraManager_DownloadFileList(position, &s_meidaFileList);
|
||||
@ -2180,7 +2239,7 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
|
||||
returnCode = DjiCameraManager_DownloadFileByIndex(position, s_meidaFileList.fileListInfo[i].fileIndex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Download media file by index failed, error code: 0x%08X.", returnCode);
|
||||
s_nextDownloadFileIndex--;
|
||||
if(s_nextDownloadFileIndex > 0)s_nextDownloadFileIndex--;
|
||||
goto redownload;
|
||||
}
|
||||
if (s_meidaFileList.fileListInfo[i].type == DJI_CAMERA_FILE_TYPE_LDRT) {
|
||||
@ -2198,11 +2257,12 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
|
||||
}
|
||||
}
|
||||
|
||||
if (s_meidaFileList.fileListInfo[0].type == DJI_CAMERA_FILE_TYPE_JPEG) {
|
||||
if (s_meidaFileList.fileListInfo[0].type == DJI_CAMERA_FILE_TYPE_JPEG ||
|
||||
s_meidaFileList.fileListInfo[0].type == DJI_CAMERA_FILE_TYPE_MP4) {
|
||||
USER_LOG_INFO("delete camera file of index %d", s_meidaFileList.fileListInfo[0].fileIndex);
|
||||
returnCode = DjiCameraManager_DeleteFileByIndex(position, s_meidaFileList.fileListInfo[0].fileIndex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Delete media file by index failed, error code: 0x%08X.", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2211,6 +2271,7 @@ static T_DjiReturnCode DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(E_Dj
|
||||
USER_LOG_WARN("Media file is not existed in sdcard.\r\n");
|
||||
}
|
||||
|
||||
ReleaseDownloaderRights:
|
||||
returnCode = DjiCameraManager_ReleaseDownloaderRights(position);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Release downloader rights failed, error code: 0x%08X.", returnCode);
|
||||
@ -2427,6 +2488,7 @@ static T_DjiReturnCode DjiTest_CameraManagerDownloadFileDataCallback(T_DjiDownlo
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
static T_DjiReturnCode DjiTest_CameraManagerGetPointThermometryData(E_DjiMountPosition position)
|
||||
{
|
||||
@ -2559,6 +2621,7 @@ T_DjiReturnCode DjiTest_CameraManagerSubscribePointCloud(E_DjiMountPosition posi
|
||||
uint32_t colorPointCloudDataByte = 0;
|
||||
uint32_t colorPointsNum = 0;
|
||||
static bool isMopInit = false;
|
||||
E_DjiChannelAddress mopChannelAddress = 0;
|
||||
|
||||
returnCode = DjiCameraManager_StartRecordPointCloud(position);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -2597,7 +2660,10 @@ T_DjiReturnCode DjiTest_CameraManagerSubscribePointCloud(E_DjiMountPosition posi
|
||||
|
||||
RECONNECT:
|
||||
osalHandler->TaskSleepMs(TEST_CAMERA_MOP_CHANNEL_WAIT_TIME_MS);
|
||||
returnCode = DjiMopChannel_Connect(s_mopChannelHandle, DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO1,
|
||||
mopChannelAddress = position - DJI_MOUNT_POSITION_PAYLOAD_PORT_NO1 + DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO1;
|
||||
USER_LOG_INFO("connect to mop channel addr %d, channel id %d",
|
||||
mopChannelAddress, TEST_CAMERA_MOP_CHANNEL_SUBSCRIBE_POINT_CLOUD_CHANNEL_ID);
|
||||
returnCode = DjiMopChannel_Connect(s_mopChannelHandle, mopChannelAddress,
|
||||
TEST_CAMERA_MOP_CHANNEL_SUBSCRIBE_POINT_CLOUD_CHANNEL_ID);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Connect point cloud mop channel error, stat:0x%08llX.", returnCode);
|
||||
|
||||
@ -38,6 +38,10 @@
|
||||
#define DATA_TRANSMISSION_TASK_STACK_SIZE (2048)
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
E_DjiChannelAddress channelAddress;
|
||||
T_DjiReturnCode (*callback)(const uint8_t *data, uint16_t len);
|
||||
} ChannelCallbackEntry;
|
||||
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
static void *UserDataTransmission_Task(void *arg);
|
||||
@ -49,10 +53,25 @@ static T_DjiReturnCode ReceiveDataFromPayload1(const uint8_t *data, uint16_t len
|
||||
static T_DjiReturnCode ReceiveDataFromPayload2(const uint8_t *data, uint16_t len);
|
||||
static T_DjiReturnCode ReceiveDataFromPayload3(const uint8_t *data, uint16_t len);
|
||||
|
||||
static T_DjiReturnCode ReceiveDataFromPayload4(const uint8_t *data, uint16_t len);
|
||||
static T_DjiReturnCode ReceiveDataFromPayload5(const uint8_t *data, uint16_t len);
|
||||
static T_DjiReturnCode ReceiveDataFromPayload6(const uint8_t *data, uint16_t len);
|
||||
static T_DjiReturnCode ReceiveDataFromPayload7(const uint8_t *data, uint16_t len);
|
||||
static T_DjiReturnCode ReceiveDataFromPayload8(const uint8_t *data, uint16_t len);
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
static T_DjiTaskHandle s_userDataTransmissionThread;
|
||||
static T_DjiAircraftInfoBaseInfo s_aircraftInfoBaseInfo;
|
||||
|
||||
static const ChannelCallbackEntry g_channelCallbacks[] = {
|
||||
{DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO1, ReceiveDataFromPayload1},
|
||||
{DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO2, ReceiveDataFromPayload2},
|
||||
{DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO3, ReceiveDataFromPayload3},
|
||||
{DJI_CHANNEL_ADDRESS_EXTENSION_PORT_V2_NO4, ReceiveDataFromPayload4},
|
||||
{DJI_CHANNEL_ADDRESS_EXTENSION_PORT_V2_NO5, ReceiveDataFromPayload5},
|
||||
{DJI_CHANNEL_ADDRESS_EXTENSION_PORT_V2_NO6, ReceiveDataFromPayload6},
|
||||
{DJI_CHANNEL_ADDRESS_EXTENSION_PORT_V2_NO7, ReceiveDataFromPayload7},
|
||||
{DJI_CHANNEL_ADDRESS_EXTENSION_PORT_V2_NO8, ReceiveDataFromPayload8},
|
||||
};
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
T_DjiReturnCode DjiTest_DataTransmissionStartService(void)
|
||||
{
|
||||
@ -83,8 +102,13 @@ T_DjiReturnCode DjiTest_DataTransmissionStartService(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30 ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30T) {
|
||||
if ((s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30 ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30T ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3D ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M4D ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M4TD) &&
|
||||
s_aircraftInfoBaseInfo.mountPositionType != DJI_MOUNT_POSITION_TYPE_MANIFOLD3_ONBOARD) {
|
||||
channelAddress = DJI_CHANNEL_ADDRESS_CLOUD_API;
|
||||
djiStat = DjiLowSpeedDataChannel_RegRecvDataCallback(channelAddress, ReceiveDataFromCloud);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -93,7 +117,20 @@ T_DjiReturnCode DjiTest_DataTransmissionStartService(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO1 ||
|
||||
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M400) {
|
||||
uint8_t Channel_Callback_count = (sizeof(g_channelCallbacks) / sizeof(g_channelCallbacks[0]));
|
||||
for (uint8_t i = 0; i < Channel_Callback_count; i++) {
|
||||
const ChannelCallbackEntry *entry = &g_channelCallbacks[i];
|
||||
T_DjiReturnCode djiStat =
|
||||
DjiLowSpeedDataChannel_RegRecvDataCallback(entry->channelAddress, entry->callback);
|
||||
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("register receive data from channel %d error.", entry->channelAddress);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
USER_LOG_INFO("Only supports small data transmission between PSDK and MSDK.");
|
||||
} else if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO1 ||
|
||||
s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO2 ||
|
||||
s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO3) {
|
||||
channelAddress = DJI_CHANNEL_ADDRESS_EXTENSION_PORT;
|
||||
@ -206,8 +243,12 @@ static void *UserDataTransmission_Task(void *arg)
|
||||
USER_LOG_ERROR("get send to mobile channel state error.");
|
||||
}
|
||||
|
||||
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30 ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30T) {
|
||||
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30 ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30T ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3D ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M4D ||
|
||||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M4TD ) {
|
||||
channelAddress = DJI_CHANNEL_ADDRESS_CLOUD_API;
|
||||
djiStat = DjiLowSpeedDataChannel_SendData(channelAddress, dataToBeSent, sizeof(dataToBeSent));
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
@ -224,55 +265,75 @@ static void *UserDataTransmission_Task(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO1 ||
|
||||
s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO2 ||
|
||||
s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO3) {
|
||||
channelAddress = DJI_CHANNEL_ADDRESS_EXTENSION_PORT;
|
||||
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M400){
|
||||
/*!< Code Example for Data Transmission Between PSDK and PSDK. */
|
||||
/*!< Only support Psdk on M400. */
|
||||
/*
|
||||
channelAddress = DJI_CHANNEL_ADDRESS_EXTENSION_PORT_V2_NO1;
|
||||
djiStat = DjiLowSpeedDataChannel_SendData(channelAddress, dataToBeSent, sizeof(dataToBeSent));
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
USER_LOG_ERROR("send data to extension port error.");
|
||||
USER_LOG_ERROR("send data to psdk error port1.");
|
||||
|
||||
djiStat = DjiLowSpeedDataChannel_GetSendDataState(channelAddress, &state);
|
||||
if (djiStat == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_DEBUG(
|
||||
"send to extension port state: realtimeBandwidthBeforeFlowController: %d, realtimeBandwidthAfterFlowController: %d, busyState: %d.",
|
||||
"send to psdk state: realtimeBandwidthBeforeFlowController: %d, realtimeBandwidthAfterFlowController: %d, busyState: %d.",
|
||||
state.realtimeBandwidthBeforeFlowController, state.realtimeBandwidthAfterFlowController,
|
||||
state.busyState);
|
||||
} else {
|
||||
USER_LOG_ERROR("get send to extension port channel state error.");
|
||||
USER_LOG_ERROR("get send to psdk channel state error.");
|
||||
}
|
||||
|
||||
if (DjiPlatform_GetSocketHandler() != NULL) {
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
djiStat = DjiHighSpeedDataChannel_SendDataStreamData(dataToBeSent, sizeof(dataToBeSent));
|
||||
*/
|
||||
}else{
|
||||
if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO1 ||
|
||||
s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO2 ||
|
||||
s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_PAYLOAD_PORT_NO3) {
|
||||
channelAddress = DJI_CHANNEL_ADDRESS_EXTENSION_PORT;
|
||||
djiStat = DjiLowSpeedDataChannel_SendData(channelAddress, dataToBeSent, sizeof(dataToBeSent));
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
USER_LOG_ERROR("send data to data stream error.");
|
||||
USER_LOG_ERROR("send data to extension port error.");
|
||||
|
||||
djiStat = DjiHighSpeedDataChannel_GetDataStreamState(&state);
|
||||
djiStat = DjiLowSpeedDataChannel_GetSendDataState(channelAddress, &state);
|
||||
if (djiStat == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_DEBUG(
|
||||
"data stream state: realtimeBandwidthLimit: %d, realtimeBandwidthBeforeFlowController: %d, busyState: %d.",
|
||||
state.realtimeBandwidthLimit, state.realtimeBandwidthBeforeFlowController, state.busyState);
|
||||
"send to extension port state: realtimeBandwidthBeforeFlowController: %d, realtimeBandwidthAfterFlowController: %d, busyState: %d.",
|
||||
state.realtimeBandwidthBeforeFlowController, state.realtimeBandwidthAfterFlowController,
|
||||
state.busyState);
|
||||
} else {
|
||||
USER_LOG_ERROR("get data stream state error.");
|
||||
USER_LOG_ERROR("get send to extension port channel state error.");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} else if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_EXTENSION_PORT
|
||||
|| DJI_MOUNT_POSITION_EXTENSION_LITE_PORT == s_aircraftInfoBaseInfo.mountPosition) {
|
||||
channelAddress = DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO1;
|
||||
djiStat = DjiLowSpeedDataChannel_SendData(channelAddress, dataToBeSent, sizeof(dataToBeSent));
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
USER_LOG_ERROR("send data to extension port error.");
|
||||
|
||||
djiStat = DjiLowSpeedDataChannel_GetSendDataState(channelAddress, &state);
|
||||
if (djiStat == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_DEBUG(
|
||||
"send to extension port state: realtimeBandwidthBeforeFlowController: %d, realtimeBandwidthAfterFlowController: %d, busyState: %d.",
|
||||
state.realtimeBandwidthBeforeFlowController, state.realtimeBandwidthAfterFlowController,
|
||||
state.busyState);
|
||||
} else {
|
||||
USER_LOG_ERROR("get send to extension port channel state error.");
|
||||
if (DjiPlatform_GetSocketHandler() != NULL) {
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
djiStat = DjiHighSpeedDataChannel_SendDataStreamData(dataToBeSent, sizeof(dataToBeSent));
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
USER_LOG_ERROR("send data to data stream error.");
|
||||
|
||||
djiStat = DjiHighSpeedDataChannel_GetDataStreamState(&state);
|
||||
if (djiStat == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_DEBUG(
|
||||
"data stream state: realtimeBandwidthLimit: %d, realtimeBandwidthBeforeFlowController: %d, busyState: %d.",
|
||||
state.realtimeBandwidthLimit, state.realtimeBandwidthBeforeFlowController, state.busyState);
|
||||
} else {
|
||||
USER_LOG_ERROR("get data stream state error.");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} else if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_EXTENSION_PORT) {
|
||||
channelAddress = DJI_CHANNEL_ADDRESS_PAYLOAD_PORT_NO1;
|
||||
djiStat = DjiLowSpeedDataChannel_SendData(channelAddress, dataToBeSent, sizeof(dataToBeSent));
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
USER_LOG_ERROR("send data to extension port error.");
|
||||
|
||||
djiStat = DjiLowSpeedDataChannel_GetSendDataState(channelAddress, &state);
|
||||
if (djiStat == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_DEBUG(
|
||||
"send to extension port state: realtimeBandwidthBeforeFlowController: %d, realtimeBandwidthAfterFlowController: %d, busyState: %d.",
|
||||
state.realtimeBandwidthBeforeFlowController, state.realtimeBandwidthAfterFlowController,
|
||||
state.busyState);
|
||||
} else {
|
||||
USER_LOG_ERROR("get send to extension port channel state error.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -384,4 +445,32 @@ static T_DjiReturnCode ReceiveDataFromPayload3(const uint8_t *data, uint16_t len
|
||||
return ReceiveDataFromPayload(data, len);
|
||||
}
|
||||
|
||||
static T_DjiReturnCode ReceiveDataFromPayload4(const uint8_t *data, uint16_t len)
|
||||
{
|
||||
USER_LOG_INFO("Receive from payload on port 4");
|
||||
return ReceiveDataFromPayload(data, len);
|
||||
}
|
||||
static T_DjiReturnCode ReceiveDataFromPayload5(const uint8_t *data, uint16_t len)
|
||||
{
|
||||
USER_LOG_INFO("Receive from payload on port 5");
|
||||
return ReceiveDataFromPayload(data, len);
|
||||
}
|
||||
|
||||
static T_DjiReturnCode ReceiveDataFromPayload6(const uint8_t *data, uint16_t len)
|
||||
{
|
||||
USER_LOG_INFO("Receive from payload on port 6");
|
||||
return ReceiveDataFromPayload(data, len);
|
||||
}
|
||||
|
||||
static T_DjiReturnCode ReceiveDataFromPayload7(const uint8_t *data, uint16_t len)
|
||||
{
|
||||
USER_LOG_INFO("Receive from payload on port 7");
|
||||
return ReceiveDataFromPayload(data, len);
|
||||
}
|
||||
static T_DjiReturnCode ReceiveDataFromPayload8(const uint8_t *data, uint16_t len)
|
||||
{
|
||||
USER_LOG_INFO("Receive from payload on port 8");
|
||||
return ReceiveDataFromPayload(data, len);
|
||||
}
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define FC_SUBSCRIPTION_TASK_FREQ (1)
|
||||
#define FC_SUBSCRIPTION_TASK_STACK_SIZE (1024)
|
||||
#define FC_SUBSCRIPTION_TASK_STACK_SIZE (2048)
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
|
||||
@ -173,8 +173,8 @@ T_DjiReturnCode DjiTest_FcSubscriptionRunSample(void)
|
||||
USER_LOG_INFO("gps position: x = %d y = %d z = %d.", gpsPosition.x, gpsPosition.y, gpsPosition.z);
|
||||
}
|
||||
|
||||
//Attention: if you want to subscribe the single battery info on M300 RTK, you need connect USB cable to
|
||||
//OSDK device or use topic DJI_FC_SUBSCRIPTION_TOPIC_BATTERY_INFO instead.
|
||||
// Attention: if you want to subscribe the single battery info on M300 RTK, you need connect USB cable to
|
||||
// OSDK device or use topic DJI_FC_SUBSCRIPTION_TOPIC_BATTERY_INFO instead.
|
||||
djiStat = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_BATTERY_SINGLE_INFO_INDEX1,
|
||||
(uint8_t *) &singleBatteryInfo,
|
||||
sizeof(T_DjiFcSubscriptionSingleBatteryInfo),
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
#include <math.h>
|
||||
#include <widget_interaction_test/test_widget_interaction.h>
|
||||
#include <dji_aircraft_info.h>
|
||||
#include "dji_fts.h"
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
@ -45,6 +46,7 @@ static const double s_earthCenter = 6378137.0;
|
||||
static const double s_degToRad = 0.01745329252;
|
||||
static bool s_isFtsCallbackRegistered = false;
|
||||
static int32_t s_ftsTriggerCount = 0;
|
||||
static uint8_t s_mission_state_machine = 0;
|
||||
|
||||
static const T_DjiTestFlightControlDisplayModeStr s_flightControlDisplayModeStr[] = {
|
||||
{.displayMode = DJI_FC_SUBSCRIPTION_DISPLAY_MODE_ATTITUDE, .displayModeStr = "attitude mode"},
|
||||
@ -98,9 +100,12 @@ static void DjiTest_FlightControlGoHomeForceLandingSample(void);
|
||||
static void DjiTest_FlightControlVelocityControlSample(void);
|
||||
static void DjiTest_FlightControlArrestFlyingSample(void);
|
||||
static void DjiTest_FlightControlSetGetParamSample(void);
|
||||
static void DjiTest_FlightControlSetGetPerceptionParamSample(void);
|
||||
static void DjiTest_FlightControlPassiveTriggerFtsSample(void);
|
||||
static void DjiTest_FlightControlSlowRotateMotorSample(void);
|
||||
static T_DjiReturnCode DjiTest_TriggerFtsEventCallback(void);
|
||||
static void DjiTest_FlightControlSample(E_DjiTestFlightCtrlSampleSelect flightCtrlSampleSelect);
|
||||
static void DjiTest_FlightControlSetModeStartMission(void);
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
T_DjiReturnCode DjiTest_FlightControlRunSample(E_DjiTestFlightCtrlSampleSelect flightCtrlSampleSelect)
|
||||
@ -888,6 +893,163 @@ out:
|
||||
DjiTest_WidgetLogAppend("Flight control set-get-param sample end");
|
||||
}
|
||||
|
||||
void DjiTest_FlightControlSetGetPerceptionParamSample()
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
uint16_t exit_reason;
|
||||
T_DjiAircraftInfoBaseInfo aircraftInfoBaseInfo;
|
||||
|
||||
returnCode = DjiAircraftInfo_GetBaseInfo(&aircraftInfoBaseInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("get aircraft base info error");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (aircraftInfoBaseInfo.aircraftType)
|
||||
{
|
||||
case DJI_AIRCRAFT_TYPE_M4T:
|
||||
case DJI_AIRCRAFT_TYPE_M4E:
|
||||
case DJI_AIRCRAFT_TYPE_M4D:
|
||||
case DJI_AIRCRAFT_TYPE_M4TD:
|
||||
case DJI_AIRCRAFT_TYPE_M400:
|
||||
break;
|
||||
|
||||
default:
|
||||
USER_LOG_WARN("aircraft type %d not support", aircraftInfoBaseInfo.aircraftType);
|
||||
return;
|
||||
}
|
||||
USER_LOG_INFO("Flight control set-get-perception-param sample start");
|
||||
DjiTest_WidgetLogAppend("Flight control set-get-perception-param sample start");
|
||||
|
||||
/* perception parameter test*/
|
||||
USER_LOG_INFO("--> Step 1: DjiFlightController_SetPlanningAlgo");
|
||||
DjiTest_WidgetLogAppend("--> Step 1: DjiFlightController_SetPlanningAlgo");
|
||||
returnCode = DjiFlightController_SetPlanningAlgo(1);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("DjiFlightController_SetPlanningAlgo failed, error code: 0x%08X", returnCode);
|
||||
};
|
||||
s_osalHandler->TaskSleepMs(1000);
|
||||
|
||||
USER_LOG_INFO("--> Step 2: DjiFlightController_SetMaxVelocity");
|
||||
DjiTest_WidgetLogAppend("--> Step 2: DjiFlightController_SetMaxVelocity");
|
||||
returnCode = DjiFlightController_SetMaxVelocity(10);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("DjiFlightController_SetMaxVelocity failed, error code: 0x%08X", returnCode);
|
||||
};
|
||||
s_osalHandler->TaskSleepMs(1000);
|
||||
|
||||
USER_LOG_INFO("--> Step 3: DjiFlightController_SetMinFlightHeight");
|
||||
DjiTest_WidgetLogAppend("--> Step 3: DjiFlightController_SetMinFlightHeight");
|
||||
returnCode = DjiFlightController_SetMinFlightHeight(50.0f);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("DjiFlightController_SetMinFlightHeight failed, error code: 0x%08X", returnCode);
|
||||
};
|
||||
s_osalHandler->TaskSleepMs(1000);
|
||||
|
||||
USER_LOG_INFO("--> Step 4: DjiFlightController_GetExitReason");
|
||||
DjiTest_WidgetLogAppend("--> Step 4: DjiFlightController_GetExitReason");
|
||||
returnCode = DjiFlightController_GetExitReason(&exit_reason);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("DjiFlightController_GetExitReason failed, error code: 0x%08X", returnCode);
|
||||
};
|
||||
USER_LOG_INFO("DjiFlightController_GetExitReason is %d\r\n", exit_reason);
|
||||
s_osalHandler->TaskSleepMs(1000);
|
||||
|
||||
out:
|
||||
USER_LOG_INFO("Flight control set-get-perception-param sample end");
|
||||
DjiTest_WidgetLogAppend("Flight control set-get-perception-param perceptionsample end");
|
||||
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_FlightControlOpenMisInfoCallback(T_DjiFlightControllerOpenMis eventData)
|
||||
{
|
||||
s_mission_state_machine = eventData.mission_state_machine;
|
||||
USER_LOG_INFO("OpenMisInfoCallback state_machine = %d, planning_algo = %d, goal_index = %d, distance_remaining = %f, time_remaining = %f, soe_remaining = %d",
|
||||
eventData.mission_state_machine, eventData.mission_planning_algo, eventData.goal_index,
|
||||
eventData.distance_remaining, eventData.time_remaining, eventData.soe_remaining);
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_FlightControlCoreTrajCallback(T_DjiFlightControllerCoreTraj eventData)
|
||||
{
|
||||
USER_LOG_INFO("DjiTest_FlightControlCoreTrajCallback code_name = %d, point_num = %d, byte_per_point = %d",
|
||||
eventData.code_name, eventData.point_num, eventData.byte_per_point);
|
||||
}
|
||||
void DjiTest_FlightControlSetModeStartMission()
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
T_DjiFlightControllerStartMissionReq req = {0};
|
||||
T_DjiFlightControllerStartMissionRsp rsp = {0};
|
||||
T_DjiAircraftInfoBaseInfo aircraftInfoBaseInfo;
|
||||
|
||||
returnCode = DjiAircraftInfo_GetBaseInfo(&aircraftInfoBaseInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("get aircraft base info error");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (aircraftInfoBaseInfo.aircraftType)
|
||||
{
|
||||
case DJI_AIRCRAFT_TYPE_M4T:
|
||||
case DJI_AIRCRAFT_TYPE_M4E:
|
||||
case DJI_AIRCRAFT_TYPE_M4D:
|
||||
case DJI_AIRCRAFT_TYPE_M4TD:
|
||||
case DJI_AIRCRAFT_TYPE_M400:
|
||||
break;
|
||||
|
||||
default:
|
||||
USER_LOG_WARN("aircraft type %d not support", aircraftInfoBaseInfo.aircraftType);
|
||||
return;
|
||||
}
|
||||
|
||||
req.version = 1;
|
||||
req.operation = 0;
|
||||
req.mea = 10.0f;
|
||||
req.fly_vel = 10;
|
||||
req.goal_num = 1;
|
||||
req.cmd_mode_point_info->lat = 22.578111231;
|
||||
req.cmd_mode_point_info->lon = 113.93696;
|
||||
req.cmd_mode_point_info->alt = 50.0;
|
||||
|
||||
USER_LOG_INFO("Flight control SetModeStartMission sample start");
|
||||
DjiTest_WidgetLogAppend("Flight control SetModeStartMission sample start");
|
||||
|
||||
returnCode = DjiFlightController_SetModeStartMission(req, &rsp);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("DjiTest_FlightControlSetModeStartMission failed, error code: 0x%08X", returnCode);
|
||||
} else {
|
||||
USER_LOG_INFO("DjiTest_FlightControlSetModeStartMission success ret = %d", returnCode);
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Flight control SetModeStartMission sample end");
|
||||
DjiTest_WidgetLogAppend("Flight control SetModeStartMission sample end");
|
||||
|
||||
|
||||
USER_LOG_INFO("Flight control register callback sample start");
|
||||
DjiTest_WidgetLogAppend("Flight control register callback sample start");
|
||||
|
||||
returnCode = DjiFlightController_RegisterOpenMisInfoCallBack(DjiTest_FlightControlOpenMisInfoCallback);
|
||||
USER_LOG_INFO("RegisterOpenMisInfoCallBack ret = %d", returnCode);
|
||||
returnCode = DjiFlightController_RegisterCoreTrajCallBack(DjiTest_FlightControlCoreTrajCallback);
|
||||
USER_LOG_INFO("RegisterCoreTrajCallBack ret = %d", returnCode);
|
||||
|
||||
s_osalHandler->TaskSleepMs(10000);
|
||||
|
||||
while (true) {
|
||||
if (s_mission_state_machine == 0) {
|
||||
USER_LOG_INFO("Mission is finished.");
|
||||
break;
|
||||
}
|
||||
s_osalHandler->TaskSleepMs(1000);
|
||||
}
|
||||
|
||||
DjiFlightController_AntiRegisterCoreTrajCallBack();
|
||||
DjiFlightController_AntiRegisterOpenMisInfoCallBack();
|
||||
USER_LOG_INFO("Flight control register callback sample end");
|
||||
DjiTest_WidgetLogAppend("Flight control register callback sample end");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_TriggerFtsEventCallback(void)
|
||||
{
|
||||
USER_LOG_INFO("Received FTS Trigger event, count = %d.", s_ftsTriggerCount);
|
||||
@ -899,8 +1061,6 @@ T_DjiReturnCode DjiTest_TriggerFtsEventCallback(void)
|
||||
USER_LOG_WARN("Note: This is an empty implementation, and the FTS signal needs to be triggered by the PWM signal.");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
void DjiTest_FlightControlPassiveTriggerFtsSample(void)
|
||||
@ -924,6 +1084,77 @@ void DjiTest_FlightControlPassiveTriggerFtsSample(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void DjiTest_FlightControlSlowRotateMotorSample(void)
|
||||
{
|
||||
E_DjiFlightControllerElectronicSpeedControllerStatus escStatus;
|
||||
|
||||
T_DjiReturnCode returnCode = 0;
|
||||
|
||||
DjiTest_WidgetLogAppend("Start rotating.");
|
||||
USER_LOG_INFO("Start rotating.");
|
||||
returnCode = DjiFlightController_StartSlowRotateMotor();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Start slow rotate blade failed, error code is 0x%08X", returnCode);
|
||||
return ;
|
||||
}
|
||||
|
||||
returnCode = DjiFlightController_GetElectronicSpeedControllerStatus(&escStatus);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Fail to get ESC status, error code is 0x%08X", returnCode);
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("ESC status: %s motor(s) rotate mode",
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_NO_MOTOR_IN_SLOW_ROTATE_MODE ? "no" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_SOME_MOTOR_IN_SLOW_ROTATE_MODE ? "some" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_ALL_MOTOR_IN_SLOW_ROTATE_MODE ? "all" : "(error)");
|
||||
USER_LOG_INFO("ESC status: %s motor(s) rotate mode",
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_NO_MOTOR_IN_SLOW_ROTATE_MODE ? "no" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_SOME_MOTOR_IN_SLOW_ROTATE_MODE ? "some" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_ALL_MOTOR_IN_SLOW_ROTATE_MODE ? "all" : "(error)");
|
||||
|
||||
for (int32_t i = 0; i < 8; i++) {
|
||||
s_osalHandler->TaskSleepMs(1000);
|
||||
|
||||
returnCode = DjiFlightController_GetElectronicSpeedControllerStatus(&escStatus);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Fail to get ESC status, error code is 0x%08X", returnCode);
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("ESC status: %s motor(s) rotate mode",
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_NO_MOTOR_IN_SLOW_ROTATE_MODE ? "no" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_SOME_MOTOR_IN_SLOW_ROTATE_MODE ? "some" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_ALL_MOTOR_IN_SLOW_ROTATE_MODE ? "all" : "(error)");
|
||||
USER_LOG_INFO("ESC status: %s motor(s) rotate mode",
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_NO_MOTOR_IN_SLOW_ROTATE_MODE ? "no" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_SOME_MOTOR_IN_SLOW_ROTATE_MODE ? "some" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_ALL_MOTOR_IN_SLOW_ROTATE_MODE ? "all" : "(error)");
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("Stop rotating.");
|
||||
USER_LOG_INFO("Stop rotating.");
|
||||
returnCode = DjiFlightController_StopSlowRotateMotor();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_INFO("Stop slow rotate blade failed, error code is 0x%08X", returnCode);
|
||||
return ;
|
||||
}
|
||||
|
||||
s_osalHandler->TaskSleepMs(1000);
|
||||
|
||||
returnCode = DjiFlightController_GetElectronicSpeedControllerStatus(&escStatus);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Fail to get ESC status, error code is 0x%08X", returnCode);
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("ESC status: %s motor(s) rotate mode",
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_NO_MOTOR_IN_SLOW_ROTATE_MODE ? "no" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_SOME_MOTOR_IN_SLOW_ROTATE_MODE ? "some" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_ALL_MOTOR_IN_SLOW_ROTATE_MODE ? "all" : "(error)");
|
||||
USER_LOG_INFO("ESC status: %s motor(s) rotate mode",
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_NO_MOTOR_IN_SLOW_ROTATE_MODE ? "no" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_SOME_MOTOR_IN_SLOW_ROTATE_MODE ? "some" :
|
||||
escStatus == DJI_FLIGHT_CONTROLLER_ALL_MOTOR_IN_SLOW_ROTATE_MODE ? "all" : "(error)");
|
||||
}
|
||||
|
||||
void DjiTest_FlightControlSample(E_DjiTestFlightCtrlSampleSelect flightCtrlSampleSelect)
|
||||
{
|
||||
switch (flightCtrlSampleSelect) {
|
||||
@ -955,6 +1186,18 @@ void DjiTest_FlightControlSample(E_DjiTestFlightCtrlSampleSelect flightCtrlSampl
|
||||
DjiTest_FlightControlPassiveTriggerFtsSample();
|
||||
break;
|
||||
}
|
||||
case E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SLOW_ROTATE_BLADE: {
|
||||
DjiTest_FlightControlSlowRotateMotorSample();
|
||||
break;
|
||||
}
|
||||
case E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SET_GET_PERCEPTION_PARAM: {
|
||||
DjiTest_FlightControlSetGetPerceptionParamSample();
|
||||
break;
|
||||
}
|
||||
case E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SET_CMD_START_MISSION: {
|
||||
DjiTest_FlightControlSetModeStartMission();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1304,10 +1547,16 @@ bool DjiTest_FlightControlGoHomeAndConfirmLanding(void)
|
||||
DjiTest_FlightControlGetValueOfFlightStatus() == DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_IN_AIR) {
|
||||
T_DjiFcSubscriptionHeightFusion heightFusion = DjiTest_FlightControlGetValueOfHeightFusion();
|
||||
s_osalHandler->TaskSleepMs(1000);
|
||||
if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3E ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3T ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3D ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD) {
|
||||
if (DJI_AIRCRAFT_TYPE_M3E == aircraftInfoBaseInfo.aircraftType || DJI_AIRCRAFT_TYPE_M3T == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M3D == aircraftInfoBaseInfo.aircraftType || DJI_AIRCRAFT_TYPE_M3TD == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M3TA == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4T == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4TD == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4D == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4E == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4TD == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4D == aircraftInfoBaseInfo.aircraftType
|
||||
) {
|
||||
if ((dji_f64_t) 0.45 < heightFusion && heightFusion < (dji_f64_t) 0.55) {
|
||||
break;
|
||||
}
|
||||
@ -1551,60 +1800,123 @@ DjiTest_FlightControlJoystickCtrlAuthSwitchEventCallback(T_DjiFlightControllerJo
|
||||
switch (eventData.joystickCtrlAuthoritySwitchEvent) {
|
||||
case DJI_FLIGHT_CONTROLLER_MSDK_GET_JOYSTICK_CTRL_AUTH_EVENT: {
|
||||
if (eventData.curJoystickCtrlAuthority == DJI_FLIGHT_CONTROLLER_JOYSTICK_CTRL_AUTHORITY_MSDK) {
|
||||
DjiTest_WidgetLogAppend("Msdk request ctrl authority!");
|
||||
USER_LOG_INFO("[Event]Msdk request to obtain joystick ctrl authority\r\n");
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("Msdk release ctrl authority!");
|
||||
USER_LOG_INFO("[Event]Msdk request to release joystick ctrl authority\r\n");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DJI_FLIGHT_CONTROLLER_INTERNAL_GET_JOYSTICK_CTRL_AUTH_EVENT: {
|
||||
if (eventData.curJoystickCtrlAuthority == DJI_FLIGHT_CONTROLLER_JOYSTICK_CTRL_AUTHORITY_INTERNAL) {
|
||||
DjiTest_WidgetLogAppend("Internal request ctrl authority!");
|
||||
USER_LOG_INFO("[Event]Internal request to obtain joystick ctrl authority\r\n");
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("Internal release ctrl authority!");
|
||||
USER_LOG_INFO("[Event]Internal request to release joystick ctrl authority\r\n");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DJI_FLIGHT_CONTROLLER_OSDK_GET_JOYSTICK_CTRL_AUTH_EVENT: {
|
||||
if (eventData.curJoystickCtrlAuthority == DJI_FLIGHT_CONTROLLER_JOYSTICK_CTRL_AUTHORITY_OSDK) {
|
||||
DjiTest_WidgetLogAppend("request ctrl authority!");
|
||||
USER_LOG_INFO("[Event] Request to obtain joystick ctrl authority\r\n");
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("release ctrl authority!");
|
||||
USER_LOG_INFO("[Event] Request to release joystick ctrl authority\r\n");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DJI_FLIGHT_CONTROLLER_RC_LOST_GET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("rc lost! reset ctrl authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc due to rc lost\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_RC_NOT_P_MODE_RESET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("rc P mode! rc get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc for rc is not in P mode\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_RC_SWITCH_MODE_GET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("rc switching mode! rc get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc due to rc switching mode\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_RC_PAUSE_GET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("rc pausing! rc get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc due to rc pausing\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_RC_REQUEST_GO_HOME_GET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("rc request return! rc get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc due to rc request for return\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_LOW_BATTERY_GO_HOME_RESET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("low battery return! rc get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc for low battery return\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_LOW_BATTERY_LANDING_RESET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("low battery land! rc get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc for low battery land\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_OSDK_LOST_GET_JOYSTICK_CTRL_AUTH_EVENT:
|
||||
DjiTest_WidgetLogAppend("sdk lost! rc get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc due to sdk lost\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_NERA_FLIGHT_BOUNDARY_RESET_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("near boundary! rc get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is reset to rc due to near boundary\r\n");
|
||||
break;
|
||||
case DJI_FLIGHT_CONTROLLER_DOCK_REQUEST_CHANGE_JOYSTICK_CTRL_AUTH_EVENT :
|
||||
DjiTest_WidgetLogAppend("dock request! dock get authority");
|
||||
USER_LOG_INFO("[Event]Current joystick ctrl authority is change due to the dock request\r\n");
|
||||
break;
|
||||
default:
|
||||
DjiTest_WidgetLogAppend("Unknown ctrl authority event");
|
||||
USER_LOG_INFO("[Event]Unknown joystick ctrl authority event\r\n");
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static T_DjiReturnCode DjiTest_SetFtsTrigger(E_DjiMountPosition position, const char* desc)
|
||||
{
|
||||
T_DjiReturnCode djiStat;
|
||||
T_DjiFtsPwmEscTriggerStatus esc_status;
|
||||
|
||||
djiStat = DjiFts_SelectFtsPwmTrigger(position);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("select fts pwm trigger E-PORT error, error code: 0x%08X", djiStat);
|
||||
return djiStat;
|
||||
}
|
||||
|
||||
djiStat = DjiFts_GetFtsPwmTriggerStatus(&esc_status);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("get pwm trigger status error, error code: 0x%08X", djiStat);
|
||||
return djiStat;
|
||||
}
|
||||
|
||||
if (esc_status.ESC[0].fts_select != position || esc_status.ESC[1].fts_select != position)
|
||||
{
|
||||
USER_LOG_ERROR("pwm trigger status incorrect");
|
||||
return djiStat;
|
||||
}
|
||||
|
||||
if (esc_status.ESC[0].fts_status == DJI_FLIGHT_CONTROLLER_FTS_NOT_TRIGGERD && esc_status.ESC[1].fts_status == DJI_FLIGHT_CONTROLLER_FTS_NOT_TRIGGERD)
|
||||
|
||||
USER_LOG_INFO("Set fts trigger position %s success", desc);
|
||||
|
||||
return djiStat;
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_FtsPwmTriggerSample(E_DjiMountPosition position, const char* port_name)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
|
||||
returnCode = DjiTest_SetFtsTrigger(position, port_name);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Test select %s fts pwm trigger failed", port_name);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -43,6 +43,9 @@ typedef enum {
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_ARREST_FLYING,
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SET_GET_PARAM,
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_FTS_TRIGGER,
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SLOW_ROTATE_BLADE,
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SET_GET_PERCEPTION_PARAM,
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_SET_CMD_START_MISSION,
|
||||
} E_DjiTestFlightCtrlSampleSelect;
|
||||
|
||||
#pragma pack(1)
|
||||
@ -59,6 +62,7 @@ typedef struct {
|
||||
T_DjiReturnCode DjiTest_FlightControlRunSample(E_DjiTestFlightCtrlSampleSelect flightCtrlSampleSelect);
|
||||
void DjiTest_FlightControlVelocityAndYawRateCtrl(const T_DjiTestFlightControlVector3f offsetDesired, float yawRate,
|
||||
uint32_t timeMs);
|
||||
T_DjiReturnCode DjiTest_FtsPwmTriggerSample(E_DjiMountPosition position, const char* port_name);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
#include "dji_logger.h"
|
||||
#include "dji_platform.h"
|
||||
#include "utils/util_misc.h"
|
||||
#include "widget_interaction_test/test_widget_interaction.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define PAYLOAD_GIMBAL_EMU_TASK_STACK_SIZE (2048)
|
||||
@ -237,6 +238,8 @@ T_DjiReturnCode DjiTest_GimbalRotate(E_DjiGimbalRotationMode rotationMode,
|
||||
case DJI_GIMBAL_ROTATION_MODE_RELATIVE_ANGLE:
|
||||
USER_LOG_INFO("gimbal relative rotate angle: pitch %d, roll %d, yaw %d.", rotationValue.pitch,
|
||||
rotationValue.roll, rotationValue.yaw);
|
||||
DjiTest_WidgetLogAppend("relative mod: pitch %d, roll %d, yaw %d.", rotationValue.pitch,
|
||||
rotationValue.roll, rotationValue.yaw);
|
||||
USER_LOG_DEBUG("gimbal relative rotate action time: %d.",
|
||||
rotationProperty.relativeAngleRotation.actionTime);
|
||||
|
||||
@ -277,6 +280,7 @@ T_DjiReturnCode DjiTest_GimbalRotate(E_DjiGimbalRotationMode rotationMode,
|
||||
|
||||
break;
|
||||
case DJI_GIMBAL_ROTATION_MODE_ABSOLUTE_ANGLE:
|
||||
DjiTest_WidgetLogAppend("abs mode (%d %d %d)", rotationValue.pitch, rotationValue.roll, rotationValue.yaw);
|
||||
USER_LOG_INFO("gimbal absolute rotate angle: pitch %d, roll %d, yaw %d.", rotationValue.pitch,
|
||||
rotationValue.roll, rotationValue.yaw);
|
||||
USER_LOG_DEBUG("gimbal absolute rotate action time: %d.",
|
||||
@ -325,6 +329,7 @@ T_DjiReturnCode DjiTest_GimbalRotate(E_DjiGimbalRotationMode rotationMode,
|
||||
|
||||
break;
|
||||
case DJI_GIMBAL_ROTATION_MODE_SPEED:
|
||||
DjiTest_WidgetLogAppend("speed mode (%d %d %d)", rotationValue.pitch, rotationValue.roll, rotationValue.yaw);
|
||||
USER_LOG_INFO("gimbal rotate speed: pitch %d, roll %d, yaw %d.", rotationValue.pitch,
|
||||
rotationValue.roll, rotationValue.yaw);
|
||||
|
||||
@ -696,6 +701,7 @@ static T_DjiReturnCode StartCalibrate(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("calibrate gimbal.");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -721,6 +727,7 @@ static T_DjiReturnCode SetControllerSmoothFactor(uint8_t smoothingFactor, E_DjiG
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("set smooth factor: factor %d, axis %d.", smoothingFactor, axis);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -741,6 +748,7 @@ static T_DjiReturnCode SetPitchRangeExtensionEnabled(bool enabledFlag)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("set gimbal pitch range extension enable: %d.", enabledFlag);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -767,6 +775,7 @@ static T_DjiReturnCode SetControllerMaxSpeedPercentage(uint8_t maxSpeedPercentag
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("set gimbal max speed: %d, axis %d.", maxSpeedPercentage, axis);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -793,6 +802,8 @@ static T_DjiReturnCode RestoreFactorySettings(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("restore gimbal factory settings.");
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -814,6 +825,8 @@ static T_DjiReturnCode SetMode(E_DjiGimbalMode mode)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("set gimbal mode: %d.", mode);
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -895,6 +908,8 @@ unlock2:
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("reset gimbal: %d.", mode);
|
||||
|
||||
return djiReturnCode;
|
||||
}
|
||||
|
||||
@ -968,6 +983,8 @@ unlock:
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_OUT_OF_RANGE;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("gimbal fine tune angle: pitch %d, roll %d, yaw %d.", fineTuneAngle.pitch,
|
||||
fineTuneAngle.roll, fineTuneAngle.yaw);
|
||||
return djiReturnCode;
|
||||
}
|
||||
|
||||
|
||||
@ -77,6 +77,7 @@ T_DjiReturnCode DjiTest_GimbalManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
T_DjiGimbalManagerRotation rotation;
|
||||
T_DjiAircraftInfoBaseInfo baseInfo;
|
||||
E_DjiAircraftSeries aircraftSeries;
|
||||
bool gimbalAnglesSubscribedFlag = false;
|
||||
|
||||
returnCode = DjiAircraftInfo_GetBaseInfo(&baseInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -89,10 +90,17 @@ T_DjiReturnCode DjiTest_GimbalManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
USER_LOG_INFO("Gimbal manager sample start");
|
||||
DjiTest_WidgetLogAppend("Gimbal manager sample start");
|
||||
|
||||
returnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, DJI_DATA_SUBSCRIPTION_TOPIC_50_HZ, NULL);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Failed to subscribe topic %d, 0x%08X", DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, returnCode);
|
||||
goto out;
|
||||
if (DJI_AIRCRAFT_SERIES_M30 == aircraftSeries ||
|
||||
DJI_AIRCRAFT_SERIES_M3 == aircraftSeries ||
|
||||
DJI_AIRCRAFT_SERIES_M3D == aircraftSeries ||
|
||||
DJI_AIRCRAFT_SERIES_M4 == aircraftSeries ||
|
||||
DJI_AIRCRAFT_SERIES_M4D == aircraftSeries) {
|
||||
returnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, DJI_DATA_SUBSCRIPTION_TOPIC_50_HZ, NULL);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Failed to subscribe topic %d, 0x%08X", DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, returnCode);
|
||||
goto out;
|
||||
}
|
||||
gimbalAnglesSubscribedFlag = true;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("--> Step 1: Init gimbal manager module");
|
||||
@ -140,8 +148,12 @@ T_DjiReturnCode DjiTest_GimbalManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
|
||||
rotation = s_rotationActionList[i].rotation;
|
||||
|
||||
if (aircraftSeries == DJI_AIRCRAFT_SERIES_M3 || aircraftSeries == DJI_AIRCRAFT_SERIES_M30
|
||||
|| aircraftSeries == DJI_AIRCRAFT_SERIES_M3D) {
|
||||
if (DJI_AIRCRAFT_SERIES_M30 == aircraftSeries
|
||||
|| DJI_AIRCRAFT_SERIES_M3 == aircraftSeries
|
||||
|| DJI_AIRCRAFT_SERIES_M3D == aircraftSeries
|
||||
|| DJI_AIRCRAFT_SERIES_M4 == aircraftSeries
|
||||
|| DJI_AIRCRAFT_SERIES_M4D == aircraftSeries
|
||||
) {
|
||||
if (s_rotationActionList[i].rotation.rotationMode == DJI_GIMBAL_ROTATION_MODE_ABSOLUTE_ANGLE) {
|
||||
T_DjiFcSubscriptionGimbalAngles gimbalAngles = {0};
|
||||
T_DjiDataTimestamp timestamp = {0};
|
||||
@ -166,9 +178,12 @@ T_DjiReturnCode DjiTest_GimbalManagerRunSample(E_DjiMountPosition mountPosition,
|
||||
}
|
||||
}
|
||||
|
||||
returnCode = DjiFcSubscription_UnSubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Failed to unsubscribe topic %d, 0x%08X", DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, returnCode);
|
||||
if (gimbalAnglesSubscribedFlag) {
|
||||
returnCode = DjiFcSubscription_UnSubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Failed to unsubscribe topic %d, 0x%08X", DJI_FC_SUBSCRIPTION_TOPIC_GIMBAL_ANGLES, returnCode);
|
||||
}
|
||||
gimbalAnglesSubscribedFlag = false;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("--> Step 5: Deinit gimbal manager module");
|
||||
|
||||
@ -61,13 +61,13 @@
|
||||
{
|
||||
"hms_error_code": "0x1E020004",
|
||||
"hms_interface": {
|
||||
"message_title": "HMS测试文案: 我是错误码标题4",
|
||||
"message_content": "HMS测试文案: 我是错误码内容4"
|
||||
"message_title": "负载网络较差",
|
||||
"message_content": "请检查飞行器周围网络或关闭增强图传"
|
||||
},
|
||||
"fpv_interface": {
|
||||
"message_on_the_ground": "HMS测试文案: 我在地面发生了错误4",
|
||||
"message_on_the_ground": "负载网络较差,请检查飞行器周围网络或关闭增强图传",
|
||||
"is_keep_history_on_the_ground": true,
|
||||
"message_in_the_sky": "HMS测试文案: 我在空中发生了错误4",
|
||||
"message_in_the_sky": "负载网络较差,请检查飞行器周围网络或关闭增强图传",
|
||||
"is_keep_history_in_the_sky": true
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,13 +61,13 @@
|
||||
{
|
||||
"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"
|
||||
"message_title": "Payload Network Poor",
|
||||
"message_content": "Please check the network around the aircraft or disable Enhanced Transmission"
|
||||
},
|
||||
"fpv_interface": {
|
||||
"message_on_the_ground": "HMS test text: I got error on the ground 4",
|
||||
"message_on_the_ground": "Payload network is poor. Please check the network around the aircraft or disable Enhanced Transmission",
|
||||
"is_keep_history_on_the_ground": true,
|
||||
"message_in_the_sky": "HMS test text: I got error in the sky 4",
|
||||
"message_in_the_sky": "Payload network is poor. Please check the network around the aircraft or disable Enhanced Transmission",
|
||||
"is_keep_history_in_the_sky": true
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,7 +43,11 @@
|
||||
#define MAX_HMS_ERROR_LEVEL (6)
|
||||
#define HMS_DIR_PATH_LEN_MAX (256)
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
#define DJI_CUSTOM_HMS_CODE_INJECT_ON (0)
|
||||
#else
|
||||
#define DJI_CUSTOM_HMS_CODE_INJECT_ON (1)
|
||||
#endif
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
|
||||
@ -51,11 +55,17 @@
|
||||
static const char *oldReplaceAlarmIdStr = "%alarmid";
|
||||
static const char *oldReplaceIndexStr = "%index";
|
||||
static const char *oldReplaceComponentIndexStr = "%component_index";
|
||||
static bool isHmsManagerInit = false;
|
||||
static T_DjiHmsFileBinaryArray s_EnHmsTextConfigFileBinaryArrayList[] = {
|
||||
{hms_text_config_json_fileName, hms_text_config_json_fileSize, hms_text_config_json_fileBinaryArray},
|
||||
};
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static uint8_t *s_hmsJsonData = NULL;
|
||||
static T_DjiMutexHandle s_hmsJsonDataMutex = {0};
|
||||
#endif
|
||||
static E_DjiMobileAppLanguage s_hmsLanguage = DJI_MOBILE_APP_LANGUAGE_ENGLISH;
|
||||
static bool s_isHmsConfigFileDirPathConfigured = false;
|
||||
static char s_hmsConfigFileDirPath[DJI_FILE_PATH_SIZE_MAX] = {0};
|
||||
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
static T_DjiReturnCode DjiTest_HmsManagerInit(void);
|
||||
@ -63,7 +73,9 @@ static T_DjiReturnCode DjiTest_HmsManagerDeInit(void);
|
||||
static T_DjiFcSubscriptionFlightStatus DjiTest_GetValueOfFlightStatus(void);
|
||||
static bool DjiTest_ReplaceStr(char *buffer, uint32_t bufferMaxLen, const char *target, const char *dest);
|
||||
static bool DjiTest_MarchErrCodeInfoTable(T_DjiHmsInfoTable hmsInfoTable);
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static bool DjiTest_MarchErrCodeInfoTableByJson(T_DjiHmsInfoTable hmsInfoTable);
|
||||
#endif
|
||||
static T_DjiReturnCode DjiTest_HmsInfoCallback(T_DjiHmsInfoTable hmsInfoTable);
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
@ -86,6 +98,7 @@ T_DjiReturnCode DjiTest_HmsManagerRunSample(E_DjiMobileAppLanguage language)
|
||||
}
|
||||
|
||||
osalHandler = DjiPlatform_GetOsalHandler();
|
||||
|
||||
USER_LOG_INFO("--> Step 2: Register callback function of push HMS information");
|
||||
DjiTest_WidgetLogAppend("--> Step 2: Register callback function of push HMS information");
|
||||
returnCode = DjiHmsManager_RegHmsInfoCallback(DjiTest_HmsInfoCallback);
|
||||
@ -132,7 +145,11 @@ T_DjiReturnCode DjiTest_HmsCustomizationStartService(void)
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/en", curFileDirPath);
|
||||
if (s_isHmsConfigFileDirPathConfigured == true) {
|
||||
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/en", s_hmsConfigFileDirPath);
|
||||
} else {
|
||||
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/en", curFileDirPath);
|
||||
}
|
||||
|
||||
//set default hms text config path
|
||||
returnCode = DjiHmsCustomization_RegDefaultHmsTextConfigByDirPath(tempPath);
|
||||
@ -150,7 +167,12 @@ T_DjiReturnCode DjiTest_HmsCustomizationStartService(void)
|
||||
}
|
||||
|
||||
//set hms text config for Chinese language
|
||||
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/cn", curFileDirPath);
|
||||
if (s_isHmsConfigFileDirPathConfigured == true) {
|
||||
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/cn", s_hmsConfigFileDirPath);
|
||||
} else {
|
||||
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/cn", curFileDirPath);
|
||||
}
|
||||
|
||||
returnCode = DjiHmsCustomization_RegHmsTextConfigByDirPath(DJI_MOBILE_APP_LANGUAGE_CHINESE,
|
||||
tempPath);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -174,21 +196,40 @@ T_DjiReturnCode DjiTest_HmsCustomizationStartService(void)
|
||||
|
||||
#if DJI_CUSTOM_HMS_CODE_INJECT_ON
|
||||
DjiHmsCustomization_InjectHmsErrorCode(0x1E020000, DJI_HMS_ERROR_LEVEL_FATAL);
|
||||
DjiHmsCustomization_InjectHmsErrorCode(0x1E020001, DJI_HMS_ERROR_LEVEL_CRITICAL);
|
||||
DjiHmsCustomization_InjectHmsErrorCode(0x1E020002, DJI_HMS_ERROR_LEVEL_WARN);
|
||||
DjiHmsCustomization_InjectHmsErrorCode(0x1E020003, DJI_HMS_ERROR_LEVEL_HINT);
|
||||
#endif
|
||||
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_HmsCustomizationSetConfigFilePath(const char *path)
|
||||
{
|
||||
memset(s_hmsConfigFileDirPath, 0, sizeof(s_hmsConfigFileDirPath));
|
||||
memcpy(s_hmsConfigFileDirPath, path, USER_UTIL_MIN(strlen(path), sizeof(s_hmsConfigFileDirPath) - 1));
|
||||
s_isHmsConfigFileDirPathConfigured = true;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
static T_DjiReturnCode DjiTest_HmsManagerInit(void)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
char curFileDirPath[HMS_DIR_PATH_LEN_MAX];
|
||||
char tempFileDirPath[HMS_DIR_PATH_LEN_MAX];
|
||||
uint32_t fileSize = 0;
|
||||
uint32_t readRealSize = 0;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
|
||||
returnCode = osalHandler->MutexCreate(&s_hmsJsonDataMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Create mutex error: 0x%08llX.", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
#endif
|
||||
|
||||
returnCode = DjiFcSubscription_Init();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Hms sample init data subscription module failed, error code:0x%08llX", returnCode);
|
||||
@ -199,13 +240,13 @@ static T_DjiReturnCode DjiTest_HmsManagerInit(void)
|
||||
returnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
|
||||
DJI_DATA_SUBSCRIPTION_TOPIC_10_HZ,
|
||||
NULL);
|
||||
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("HMS sample subscribe topic flight status error, error code:0x%08llX", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
|
||||
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);
|
||||
@ -230,13 +271,17 @@ static T_DjiReturnCode DjiTest_HmsManagerInit(void)
|
||||
UtilFile_GetFileDataByPath(tempFileDirPath, 0, fileSize, s_hmsJsonData, &readRealSize);
|
||||
#endif
|
||||
|
||||
isHmsManagerInit = true;
|
||||
|
||||
return DjiHmsManager_Init();
|
||||
}
|
||||
|
||||
static T_DjiReturnCode DjiTest_HmsManagerDeInit(void)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
#endif
|
||||
|
||||
returnCode = DjiFcSubscription_DeInit();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -246,9 +291,19 @@ static T_DjiReturnCode DjiTest_HmsManagerDeInit(void)
|
||||
}
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
osalHandler->MutexLock(s_hmsJsonDataMutex);
|
||||
osalHandler->Free(s_hmsJsonData);
|
||||
s_hmsJsonData = NULL;
|
||||
osalHandler->MutexUnlock(s_hmsJsonDataMutex);
|
||||
|
||||
returnCode = osalHandler->MutexDestroy(s_hmsJsonDataMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Destroy mutex error: 0x%08llX.", returnCode);
|
||||
}
|
||||
#endif
|
||||
|
||||
isHmsManagerInit = false;
|
||||
|
||||
return DjiHmsManager_DeInit();
|
||||
}
|
||||
|
||||
@ -258,6 +313,10 @@ static T_DjiFcSubscriptionFlightStatus DjiTest_GetValueOfFlightStatus(void)
|
||||
T_DjiFcSubscriptionFlightStatus flightStatus;
|
||||
T_DjiDataTimestamp flightStatusTimestamp = {0};
|
||||
|
||||
if (isHmsManagerInit == false) {
|
||||
return DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_ON_GROUND;
|
||||
}
|
||||
|
||||
returnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
|
||||
(uint8_t *) &flightStatus,
|
||||
sizeof(T_DjiFcSubscriptionFlightStatus),
|
||||
@ -357,17 +416,29 @@ static bool DjiTest_MarchErrCodeInfoTable(T_DjiHmsInfoTable hmsInfoTable)
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static bool DjiTest_MarchErrCodeInfoTableByJson(T_DjiHmsInfoTable hmsInfoTable)
|
||||
{
|
||||
cJSON *hmsJsonRoot = NULL;
|
||||
cJSON *hmsErrorCode = NULL;
|
||||
cJSON *hmsLanguage = NULL;
|
||||
char alarmIdStr[20] = {0};
|
||||
char sensorIdStr[20] = {0};
|
||||
char componentIdStr[20] = {0};
|
||||
char printBuff[256] = {0};
|
||||
char hmsErrorCodeString[HMS_DIR_PATH_LEN_MAX] = {0};
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
|
||||
osalHandler->MutexLock(s_hmsJsonDataMutex);
|
||||
if (s_hmsJsonData == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
hmsJsonRoot = cJSON_Parse((char *) s_hmsJsonData);
|
||||
if (hmsJsonRoot == NULL) {
|
||||
return 0;
|
||||
}
|
||||
osalHandler->MutexUnlock(s_hmsJsonDataMutex);
|
||||
|
||||
for (int i = 0; i < hmsInfoTable.hmsInfoNum; i++) {
|
||||
if (DjiTest_GetValueOfFlightStatus() == DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_IN_AIR) {
|
||||
@ -388,14 +459,22 @@ static bool DjiTest_MarchErrCodeInfoTableByJson(T_DjiHmsInfoTable hmsInfoTable)
|
||||
hmsLanguage = cJSON_GetObjectItem(hmsErrorCode, "fr");
|
||||
}
|
||||
if (hmsLanguage != NULL) {
|
||||
snprintf(alarmIdStr, sizeof(alarmIdStr), "%u", hmsInfoTable.hmsInfo[i].errorCode);
|
||||
snprintf(sensorIdStr, sizeof(sensorIdStr), "%d", hmsInfoTable.hmsInfo[i].componentIndex + 1);
|
||||
snprintf(componentIdStr, sizeof(componentIdStr), "0x%02X", hmsInfoTable.hmsInfo[i].componentIndex + 1);
|
||||
|
||||
snprintf(printBuff, sizeof(printBuff), "%s", hmsLanguage->valuestring);
|
||||
DjiTest_ReplaceStr(printBuff, sizeof(printBuff), oldReplaceAlarmIdStr, alarmIdStr);
|
||||
DjiTest_ReplaceStr(printBuff, sizeof(printBuff), oldReplaceIndexStr, sensorIdStr);
|
||||
DjiTest_ReplaceStr(printBuff, sizeof(printBuff), oldReplaceComponentIndexStr, componentIdStr);
|
||||
if (hmsInfoTable.hmsInfo[i].errorLevel > MIN_HMS_ERROR_LEVEL &&
|
||||
hmsInfoTable.hmsInfo[i].errorLevel < MID_HMS_ERROR_LEVEL) {
|
||||
USER_LOG_WARN("[ErrorCode: 0x%2x]: %s", hmsInfoTable.hmsInfo[i].errorCode,
|
||||
hmsLanguage->valuestring);
|
||||
printBuff);
|
||||
} else if (hmsInfoTable.hmsInfo[i].errorLevel >= MID_HMS_ERROR_LEVEL &&
|
||||
hmsInfoTable.hmsInfo[i].errorLevel < MAX_HMS_ERROR_LEVEL) {
|
||||
USER_LOG_ERROR("[ErrorCode: 0x%2x]: %s", hmsInfoTable.hmsInfo[i].errorCode,
|
||||
hmsLanguage->valuestring);
|
||||
printBuff);
|
||||
}
|
||||
} else {
|
||||
USER_LOG_WARN("[ErrorCode: 0x%2x] There are no matching documents for this language for now.",
|
||||
@ -409,6 +488,7 @@ static bool DjiTest_MarchErrCodeInfoTableByJson(T_DjiHmsInfoTable hmsInfoTable)
|
||||
|
||||
cJSON_Delete(hmsJsonRoot);
|
||||
}
|
||||
#endif
|
||||
|
||||
static T_DjiReturnCode DjiTest_HmsInfoCallback(T_DjiHmsInfoTable hmsInfoTable)
|
||||
{
|
||||
|
||||
@ -41,6 +41,7 @@ extern "C" {
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
T_DjiReturnCode DjiTest_HmsManagerRunSample(E_DjiMobileAppLanguage language);
|
||||
T_DjiReturnCode DjiTest_HmsCustomizationStartService(void);
|
||||
T_DjiReturnCode DjiTest_HmsCustomizationSetConfigFilePath(const char *path);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -28,6 +28,7 @@
|
||||
#include "dji_logger.h"
|
||||
#include "dji_flight_controller.h"
|
||||
#include "flight_control/test_flight_control.h"
|
||||
#include "dji_aircraft_info.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
|
||||
@ -45,11 +46,18 @@ T_DjiReturnCode DjiTest_InterestPointRunSample(void)
|
||||
T_DjiInterestPointSettings interestPointSettings = {0};
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
T_DjiFlightControllerRidInfo ridInfo = {0};
|
||||
T_DjiAircraftInfoBaseInfo aircraftInfoBaseInfo = {0};
|
||||
|
||||
ridInfo.latitude = 22.542812;
|
||||
ridInfo.longitude = 113.958902;
|
||||
ridInfo.altitude = 10;
|
||||
|
||||
returnCode = DjiAircraftInfo_GetBaseInfo(&aircraftInfoBaseInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("get aircraft base info error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
returnCode = DjiFlightController_Init(ridInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Flight control init failed, errno=%lld", returnCode);
|
||||
@ -59,7 +67,7 @@ T_DjiReturnCode DjiTest_InterestPointRunSample(void)
|
||||
returnCode = DjiInterestPoint_Init();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Point interest init failed, errno=%lld", returnCode);
|
||||
return returnCode;
|
||||
goto controller_deinit;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
@ -74,55 +82,70 @@ T_DjiReturnCode DjiTest_InterestPointRunSample(void)
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
DjiTest_FlightControlVelocityAndYawRateCtrl((T_DjiTestFlightControlVector3f) {3, 0, 0}, 0, 5000);
|
||||
|
||||
interestPointSettings.latitude = 22.542812;
|
||||
interestPointSettings.longitude = 113.958902;
|
||||
interestPointSettings.latitude = 22.57775;
|
||||
interestPointSettings.longitude = 113.94265;
|
||||
|
||||
returnCode = DjiInterestPoint_RegMissionStateCallback(DjiUser_InterestPointMissionStateCallback);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Register mission state callback failed, errno=%lld", returnCode);
|
||||
return returnCode;
|
||||
goto point_deinit;
|
||||
}
|
||||
|
||||
if (aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M400) {
|
||||
interestPointSettings.payloadCameraIndex = 1;
|
||||
USER_LOG_INFO("The sample try to use payload camera on position %d for poi, please make sure that DJI camera mounted on this position.",
|
||||
interestPointSettings.payloadCameraIndex);
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Start interest point circle, circumcenter(%f, %f)", interestPointSettings.latitude, interestPointSettings.longitude);
|
||||
returnCode = DjiInterestPoint_Start(interestPointSettings);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Point interest start failed, errno=%lld", returnCode);
|
||||
return returnCode;
|
||||
goto point_deinit;
|
||||
}
|
||||
|
||||
DjiInterestPoint_SetSpeed(5.0f);
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
|
||||
USER_LOG_INFO("set speed to 15");
|
||||
DjiInterestPoint_SetSpeed(15.0f);
|
||||
|
||||
for (int i = 0; i < 60; ++i) {
|
||||
USER_LOG_INFO("Interest point mission running %d.", i);
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Stop interest point circle");
|
||||
returnCode = DjiInterestPoint_Stop();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Point interest stop failed, errno=%lld", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
point_deinit:
|
||||
USER_LOG_INFO("Force landing");
|
||||
DjiFlightController_StartForceLanding();
|
||||
|
||||
returnCode = DjiInterestPoint_DeInit();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Point interest deinit failed, errno=%lld", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
controller_deinit:
|
||||
returnCode = DjiFlightController_DeInit();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Flight control init failed, errno=%lld", returnCode);
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
static T_DjiReturnCode DjiUser_InterestPointMissionStateCallback(T_DjiInterestPointMissionState missionState)
|
||||
{
|
||||
USER_LOG_INFO("Interest point state: %d, radius: %.2f m, speed: %.2f m/s", missionState.state, missionState.radius,
|
||||
USER_LOG_INFO("Interest point state: %s, radius: %.2f m, speed: %.2f m/s",
|
||||
missionState.state == DJI_INTEREST_POINT_MISSION_ACTION_STATE_NOT_STARTED ? "not started" :
|
||||
missionState.state == DJI_INTEREST_POINT_MISSION_ACTION_STATE_PAUSE ? "pause" :
|
||||
missionState.state == DJI_INTEREST_POINT_MISSION_ACTION_STATE_RUNNING ? "running" : "unknown",
|
||||
missionState.radius,
|
||||
missionState.curSpeed);
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
|
||||
@ -52,6 +52,23 @@ static void DjiTest_PayloadCameraStreamCallback(E_DjiLiveViewCameraPosition posi
|
||||
uint32_t bufLen);
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
|
||||
void DjiTest_LiveviewSample(void)
|
||||
{
|
||||
int pos;
|
||||
|
||||
do {
|
||||
printf("Please enter the camera mount position (valid values: 1 or 2): ");
|
||||
scanf("%d", &pos);
|
||||
|
||||
if (pos != 1 && pos != 2) {
|
||||
printf("Invalid input, please enter 1 or 2.\n");
|
||||
}
|
||||
} while (pos != 1 && pos != 2);
|
||||
|
||||
DjiTest_LiveviewRunSample((E_DjiMountPosition)pos);
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
@ -77,12 +94,13 @@ T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition)
|
||||
goto out;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("--> Step 2: Start h264 stream of the fpv and selected payload\r\n");
|
||||
USER_LOG_INFO("--> Step 2: Start h264 stream of the fpv and default of selected payload\r\n");
|
||||
DjiTest_WidgetLogAppend("--> Step 2: Start h264 stream of the fpv and selected payload\r\n");
|
||||
|
||||
if (aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M300 ||
|
||||
aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M350 ||
|
||||
aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M30) {
|
||||
aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M30 ||
|
||||
aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M400) {
|
||||
|
||||
localTime = localtime(¤tTime);
|
||||
sprintf(s_fpvCameraStreamFilePath, "fpv_stream_%04d%02d%02d_%02d-%02d-%02d.h264",
|
||||
@ -97,8 +115,23 @@ T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition)
|
||||
}
|
||||
}
|
||||
|
||||
if (aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M400
|
||||
&& aircraftInfoBaseInfo.mountPositionType == DJI_MOUNT_POSITION_TYPE_MANIFOLD3_ONBOARD)
|
||||
{
|
||||
// XXX: On MANIFOLD3, FPV and MAIN CAMERA SOURCE_DEFAULT streams cannot be subscribed to at the same time.
|
||||
for (int i = 0; i < TEST_LIVEVIEW_STREAM_STROING_TIME_IN_SECONDS; ++i) {
|
||||
USER_LOG_INFO("Storing camera h264 stream, second: %d.", i + 1);
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
}
|
||||
returnCode = DjiLiveview_StopH264Stream(DJI_LIVEVIEW_CAMERA_POSITION_FPV, DJI_LIVEVIEW_CAMERA_SOURCE_DEFAULT);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Request to stop h264 of fpv failed, error code: 0x%08X", returnCode);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
localTime = localtime(¤tTime);
|
||||
sprintf(s_payloadCameraStreamFilePath, "payload%d_vis_stream_%04d%02d%02d_%02d-%02d-%02d.h264",
|
||||
sprintf(s_payloadCameraStreamFilePath, "payload%d_default_stream_%04d%02d%02d_%02d-%02d-%02d.h264",
|
||||
mountPosition, localTime->tm_year + 1900, localTime->tm_mon + 1, localTime->tm_mday,
|
||||
localTime->tm_hour, localTime->tm_min, localTime->tm_sec);
|
||||
|
||||
@ -112,12 +145,17 @@ 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);
|
||||
if (aircraftInfoBaseInfo.mountPositionType != DJI_MOUNT_POSITION_TYPE_MANIFOLD3_ONBOARD)
|
||||
{
|
||||
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
|
||||
@ -128,7 +166,9 @@ T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition)
|
||||
DjiTest_WidgetLogAppend("--> Step 3: Stop h264 stream of the fpv and selected payload");
|
||||
if (aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M300 ||
|
||||
aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M350 ||
|
||||
aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M30) {
|
||||
aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M30 ||
|
||||
(aircraftInfoBaseInfo.aircraftSeries == DJI_AIRCRAFT_SERIES_M400
|
||||
&& aircraftInfoBaseInfo.mountPositionType != DJI_MOUNT_POSITION_TYPE_MANIFOLD3_ONBOARD)) {
|
||||
returnCode = DjiLiveview_StopH264Stream(DJI_LIVEVIEW_CAMERA_POSITION_FPV, DJI_LIVEVIEW_CAMERA_SOURCE_DEFAULT);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Request to stop h264 of fpv failed, error code: 0x%08X", returnCode);
|
||||
@ -143,11 +183,12 @@ T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition)
|
||||
goto out;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Fpv stream is saved to file: %s", s_fpvCameraStreamFilePath);
|
||||
USER_LOG_INFO("Payload%d stream is saved to file: %s\r\n", mountPosition, s_payloadCameraStreamFilePath);
|
||||
|
||||
if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3T ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD) {
|
||||
if (DJI_AIRCRAFT_TYPE_M3T == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M3TA == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M3TD == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4T == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4TD == aircraftInfoBaseInfo.aircraftType
|
||||
) {
|
||||
USER_LOG_INFO("--> Start h264 stream of the fpv and selected payload\r\n");
|
||||
|
||||
localTime = localtime(¤tTime);
|
||||
|
||||
@ -39,6 +39,7 @@ extern "C" {
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
void DjiTest_LiveviewSample(void);
|
||||
T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -180,7 +180,7 @@ REWAIT:
|
||||
}
|
||||
|
||||
sendDataCount++;
|
||||
memset(sendBuf, sendDataCount, TEST_MOP_CHANNEL_NORMAL_TRANSFOR_SEND_BUFFER);
|
||||
memset(sendBuf, 'A' - 1 + (sendDataCount % 26), TEST_MOP_CHANNEL_NORMAL_TRANSFOR_SEND_BUFFER);
|
||||
returnCode = DjiMopChannel_SendData(s_testMopChannelNormalOutHandle, sendBuf,
|
||||
TEST_MOP_CHANNEL_NORMAL_TRANSFOR_SEND_BUFFER, &realLen);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -723,6 +723,8 @@ static void *DjiTest_MopChannelFileServiceRecvTask(void *arg)
|
||||
s_fileServiceContent[clientNum].uploadState = MOP_FILE_SERVICE_UPLOAD_DATA_SENDING;
|
||||
s_fileServiceContent[clientNum].uploadSeqNum = fileTransfor->seqNum;
|
||||
|
||||
USER_LOG_INFO("fileTransfor->seqNum %d", fileTransfor->seqNum);
|
||||
|
||||
uploadWriteLen = fwrite(&recvBuf[UTIL_OFFSETOF(T_DjiMopChannel_FileTransfor, data)], 1,
|
||||
fileTransfor->dataLen, uploadFile);
|
||||
if (uploadWriteLen < 0) {
|
||||
|
||||
@ -65,7 +65,7 @@ T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction)
|
||||
DjiTest_WidgetLogAppend("Perception sample start");
|
||||
|
||||
USER_LOG_INFO("--> Step 1: Init Perception module");
|
||||
DjiTest_WidgetLogAppend("--> Step 1: Init Perception module");
|
||||
DjiTest_WidgetLogAppend("Step 1: Init Perception module");
|
||||
returnCode = DjiPerception_Init();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Perception init failed, error code: 0x%08X", returnCode);
|
||||
@ -75,7 +75,7 @@ T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction)
|
||||
s_perceptionImageCount = 0;
|
||||
|
||||
USER_LOG_INFO("--> Step 2: Get stereo camera parameters\r\n");
|
||||
DjiTest_WidgetLogAppend("--> Step 2: Get stereo camera parameters\r\n");
|
||||
DjiTest_WidgetLogAppend("Step 2: Get stereo camera parameters\r\n");
|
||||
returnCode = DjiPerception_GetStereoCameraParameters(&cameraParametersetersPacket);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get stereo camera parameters failed, error code: 0x%08X", returnCode);
|
||||
@ -95,6 +95,8 @@ T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction)
|
||||
cameraParametersetersPacket.cameraParameters[i].leftIntrinsics[6],
|
||||
cameraParametersetersPacket.cameraParameters[i].leftIntrinsics[7],
|
||||
cameraParametersetersPacket.cameraParameters[i].leftIntrinsics[8]);
|
||||
DjiTest_WidgetLogAppend("rcv [%-05s] leftIntrinsics ",
|
||||
directionName[cameraParametersetersPacket.cameraParameters[i].direction].name);
|
||||
USER_LOG_INFO("[%-05s] rightIntrinsics = {%f, %f, %f, %f, %f, %f, %f, %f, %f }",
|
||||
directionName[cameraParametersetersPacket.cameraParameters[i].direction].name,
|
||||
cameraParametersetersPacket.cameraParameters[i].rightIntrinsics[0],
|
||||
@ -106,6 +108,8 @@ T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction)
|
||||
cameraParametersetersPacket.cameraParameters[i].rightIntrinsics[6],
|
||||
cameraParametersetersPacket.cameraParameters[i].rightIntrinsics[7],
|
||||
cameraParametersetersPacket.cameraParameters[i].rightIntrinsics[8]);
|
||||
DjiTest_WidgetLogAppend("rcv [%-05s] rightIntrinsics",
|
||||
directionName[cameraParametersetersPacket.cameraParameters[i].direction].name);
|
||||
USER_LOG_INFO("[%-05s] rotationLeftInRight = {%f, %f, %f, %f, %f, %f, %f, %f, %f }",
|
||||
directionName[cameraParametersetersPacket.cameraParameters[i].direction].name,
|
||||
cameraParametersetersPacket.cameraParameters[i].rotationLeftInRight[0],
|
||||
@ -117,16 +121,20 @@ T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction)
|
||||
cameraParametersetersPacket.cameraParameters[i].rotationLeftInRight[6],
|
||||
cameraParametersetersPacket.cameraParameters[i].rotationLeftInRight[7],
|
||||
cameraParametersetersPacket.cameraParameters[i].rotationLeftInRight[8]);
|
||||
DjiTest_WidgetLogAppend("rcv [%-05s] rotationLeftInRight",
|
||||
directionName[cameraParametersetersPacket.cameraParameters[i].direction].name);
|
||||
USER_LOG_INFO("[%-05s] translationLeftInRight = {%f, %f, %f }\r\n",
|
||||
directionName[cameraParametersetersPacket.cameraParameters[i].direction].name,
|
||||
cameraParametersetersPacket.cameraParameters[i].translationLeftInRight[0],
|
||||
cameraParametersetersPacket.cameraParameters[i].translationLeftInRight[1],
|
||||
cameraParametersetersPacket.cameraParameters[i].translationLeftInRight[2]);
|
||||
DjiTest_WidgetLogAppend("rcv [%-05s] translationLeftInRight\r\n",
|
||||
directionName[cameraParametersetersPacket.cameraParameters[i].direction].name);
|
||||
osalHandler->TaskSleepMs(100);
|
||||
}
|
||||
|
||||
USER_LOG_INFO("--> Step 3: Subscribe perception image\r\n");
|
||||
DjiTest_WidgetLogAppend("--> Step 3: Subscribe perception image\r\n");
|
||||
DjiTest_WidgetLogAppend("Step 3: Subscribe perception image\r\n");
|
||||
returnCode = DjiPerception_SubscribePerceptionImage(direction, DjiTest_PerceptionImageCallback);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Subscribe perception image failed, error code: 0x%08X", returnCode);
|
||||
@ -136,7 +144,7 @@ T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction)
|
||||
osalHandler->TaskSleepMs(5000);
|
||||
|
||||
USER_LOG_INFO("--> Step 4: Unsubscribe perception image");
|
||||
DjiTest_WidgetLogAppend("--> Step 4: Unsubscribe perception image");
|
||||
DjiTest_WidgetLogAppend("Step 4: Unsubscribe perception image");
|
||||
returnCode = DjiPerception_UnsubscribePerceptionImage(direction);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Unsubscribe perception image failed, error code: 0x%08X", returnCode);
|
||||
@ -144,7 +152,7 @@ T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction)
|
||||
}
|
||||
|
||||
USER_LOG_INFO("--> Step 5: Deinit Perception module");
|
||||
DjiTest_WidgetLogAppend("--> Step 5: Deinit Perception module");
|
||||
DjiTest_WidgetLogAppend("Step 5: Deinit Perception module");
|
||||
returnCode = DjiPerception_Deinit();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Perception deinit failed, error code: 0x%08X", returnCode);
|
||||
@ -153,6 +161,7 @@ T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction)
|
||||
|
||||
out:
|
||||
USER_LOG_INFO("Perception sample end");
|
||||
DjiTest_WidgetLogAppend("Perception sample end");
|
||||
|
||||
return returnCode;
|
||||
}
|
||||
@ -202,6 +211,11 @@ static void DjiTest_PerceptionImageCallback(T_DjiPerceptionImageInfo imageInfo,
|
||||
imageInfo.dataType,
|
||||
imageInfo.rawInfo.width,
|
||||
imageInfo.rawInfo.height);
|
||||
DjiTest_WidgetLogAppend(
|
||||
"Save image: dir:%s, pos:%d, size:%dx%d",
|
||||
imageInfo.dataType,
|
||||
imageInfo.rawInfo.width,
|
||||
imageInfo.rawInfo.height);
|
||||
|
||||
s_perceptionImageCount++;
|
||||
}
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
#include <fc_subscription/test_fc_subscription.h>
|
||||
#include "test_positioning.h"
|
||||
#include "dji_positioning.h"
|
||||
#include "dji_network_rtk.h"
|
||||
#include "dji_logger.h"
|
||||
#include "utils/util_misc.h"
|
||||
#include "dji_platform.h"
|
||||
@ -39,11 +40,11 @@
|
||||
#endif
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define POSITIONING_TASK_FREQ (1)
|
||||
#define POSITIONING_TASK_STACK_SIZE (2048)
|
||||
#define POSITIONING_TASK_FREQ (0.1)
|
||||
#define POSITIONING_TASK_STACK_SIZE (3 * 1024)
|
||||
#define TEST_RTCM_FILE_PATH_STR_MAX_SIZE (64)
|
||||
|
||||
#define DJI_TEST_POSITIONING_EVENT_COUNT (2)
|
||||
#define DJI_TEST_POSITIONING_EVENT_COUNT (1)
|
||||
#define DJI_TEST_TIME_INTERVAL_AMONG_EVENTS_US (200000)
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
@ -58,8 +59,10 @@ static T_DjiReturnCode DjiTest_ReceiveRtkBaseStationRtcmDataCallback(uint8_t ind
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
static T_DjiTaskHandle s_userPositioningThread;
|
||||
static int32_t s_eventIndex = 0;
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static char s_rtkOnAircraftRtcmFilePath[TEST_RTCM_FILE_PATH_STR_MAX_SIZE];
|
||||
static char s_rtkBaseStationRtcmFilePath[TEST_RTCM_FILE_PATH_STR_MAX_SIZE];
|
||||
#endif
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
T_DjiReturnCode DjiTest_PositioningStartService(void)
|
||||
@ -79,7 +82,7 @@ T_DjiReturnCode DjiTest_PositioningStartService(void)
|
||||
if (osalHandler->TaskCreate("user_positioning_task", DjiTest_PositioningTask,
|
||||
POSITIONING_TASK_STACK_SIZE, NULL, &s_userPositioningThread) !=
|
||||
DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("user positioning task create error.");
|
||||
USER_LOG_ERROR("user ps_extensionPortSampleIndexositioning task create error.");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
#else
|
||||
@ -113,6 +116,51 @@ T_DjiReturnCode DjiTest_PositioningStartService(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static void DjiTest_ReceiveNetworkRtkStateCallback(E_DjiNetworkRtkOnboardState state)
|
||||
{
|
||||
USER_LOG_INFO("Network rtk state: %d", state);
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_NetworkRtkOnBoardService(E_DjiTestNetworkRtkCtrl ctrl)
|
||||
{
|
||||
T_DjiReturnCode djiStat;
|
||||
USER_LOG_INFO("Network rtk service %s..", ctrl == DJI_TEST_NETWORK_RTK_START ? "start":"stop");
|
||||
switch (ctrl)
|
||||
{
|
||||
case DJI_TEST_NETWORK_RTK_START:
|
||||
djiStat = DjiNetworkRtk_RegReceiveNetworkRtkStateCallback(DjiTest_ReceiveNetworkRtkStateCallback);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
{
|
||||
USER_LOG_ERROR("Register receive network rtk state callback error.");
|
||||
return djiStat;
|
||||
}
|
||||
/* example account */
|
||||
T_DjiNetworkRtkServiceConfig config = {
|
||||
.account = "12345",
|
||||
.password = "12345",
|
||||
.host = "12345",
|
||||
.port = "123",
|
||||
.mountPoint = "234",
|
||||
};
|
||||
djiStat = DjiNetworkRtk_StartService(&config);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
{
|
||||
USER_LOG_ERROR("start network rtk on aircraft error.");
|
||||
return djiStat;
|
||||
}
|
||||
break;
|
||||
case DJI_TEST_NETWORK_RTK_STOP:
|
||||
djiStat = DjiNetworkRtk_StopService();
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
||||
{
|
||||
USER_LOG_ERROR("stop network rtk on aircraft error.");
|
||||
return djiStat;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
#ifndef __CC_ARM
|
||||
#pragma GCC diagnostic push
|
||||
@ -168,22 +216,22 @@ static void *DjiTest_PositioningTask(void *arg)
|
||||
continue;
|
||||
}
|
||||
|
||||
USER_LOG_DEBUG("request position of target points success.");
|
||||
USER_LOG_DEBUG("detail position information:");
|
||||
USER_LOG_INFO("request position of target points success.");
|
||||
USER_LOG_INFO("detail position information:");
|
||||
for (i = 0; i < DJI_TEST_POSITIONING_EVENT_COUNT; ++i) {
|
||||
USER_LOG_DEBUG("position solution property: %d.", positionInfo[i].positionSolutionProperty);
|
||||
USER_LOG_DEBUG("pitchAttitudeAngle: %d\trollAttitudeAngle: %d\tyawAttitudeAngle: %d",
|
||||
USER_LOG_INFO("position solution property: %d.", positionInfo[i].positionSolutionProperty);
|
||||
USER_LOG_INFO("pitchAttitudeAngle: %d\trollAttitudeAngle: %d\tyawAttitudeAngle: %d",
|
||||
positionInfo[i].uavAttitude.pitch, positionInfo[i].uavAttitude.roll,
|
||||
positionInfo[i].uavAttitude.yaw);
|
||||
USER_LOG_DEBUG("northPositionOffset: %d\tearthPositionOffset: %d\tdownPositionOffset: %d",
|
||||
USER_LOG_INFO("northPositionOffset: %d\tearthPositionOffset: %d\tdownPositionOffset: %d",
|
||||
positionInfo[i].offsetBetweenMainAntennaAndTargetPoint.x,
|
||||
positionInfo[i].offsetBetweenMainAntennaAndTargetPoint.y,
|
||||
positionInfo[i].offsetBetweenMainAntennaAndTargetPoint.z);
|
||||
USER_LOG_DEBUG("longitude: %.8f\tlatitude: %.8f\theight: %.8f",
|
||||
USER_LOG_INFO("longitude: %.8f\tlatitude: %.8f\theight: %.8f",
|
||||
positionInfo[i].targetPointPosition.longitude,
|
||||
positionInfo[i].targetPointPosition.latitude,
|
||||
positionInfo[i].targetPointPosition.height);
|
||||
USER_LOG_DEBUG(
|
||||
USER_LOG_INFO(
|
||||
"longStandardDeviation: %.8f\tlatStandardDeviation: %.8f\thgtStandardDeviation: %.8f",
|
||||
positionInfo[i].targetPointPositionStandardDeviation.longitude,
|
||||
positionInfo[i].targetPointPositionStandardDeviation.latitude,
|
||||
@ -198,9 +246,9 @@ static void *DjiTest_PositioningTask(void *arg)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static int32_t DjiTest_SaveRtcmData(char *filePath, const uint8_t *data, uint32_t len)
|
||||
{
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
FILE *fp = NULL;
|
||||
size_t size;
|
||||
|
||||
@ -218,9 +266,9 @@ static int32_t DjiTest_SaveRtcmData(char *filePath, const uint8_t *data, uint32_
|
||||
|
||||
fflush(fp);
|
||||
fclose(fp);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static T_DjiReturnCode DjiTest_ReceiveRtkOnAircraftRtcmDataCallback(uint8_t index, const uint8_t *data,
|
||||
uint16_t dataLen)
|
||||
|
||||
@ -36,12 +36,18 @@ extern "C" {
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
typedef enum {
|
||||
DJI_TEST_NETWORK_RTK_START = 0,
|
||||
DJI_TEST_NETWORK_RTK_STOP = 1,
|
||||
} E_DjiTestNetworkRtkCtrl;
|
||||
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
T_DjiReturnCode DjiTest_PositioningStartService(void);
|
||||
T_DjiReturnCode DjiTest_NetworkRtkOnBoardService(E_DjiTestNetworkRtkCtrl ctrl);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -87,9 +87,11 @@ T_DjiReturnCode DjiTest_PowerManagementStartService(void)
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
if (((baseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M300_RTK || baseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M350_RTK) &&
|
||||
(baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 || baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_XPORT)) ||
|
||||
baseInfo.aircraftType == DJI_AIRCRAFT_TYPE_FC30) {
|
||||
if (baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 ||
|
||||
baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_XPORT ||
|
||||
baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V3 ||
|
||||
baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_EPORT_V2_RIBBON_CABLE ||
|
||||
baseInfo.aircraftType == DJI_AIRCRAFT_TYPE_FC30) {
|
||||
// apply high power
|
||||
if (s_applyHighPowerHandler.pinInit == NULL) {
|
||||
USER_LOG_ERROR("apply high power pin init interface is NULL error");
|
||||
@ -113,10 +115,30 @@ T_DjiReturnCode DjiTest_PowerManagementStartService(void)
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
returnCode = DjiPowerManagement_ApplyHighPowerSync();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("apply high power error");
|
||||
return returnCode;
|
||||
if (baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V3 ||
|
||||
baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_EPORT_V2_RIBBON_CABLE) {
|
||||
E_DjiHighPowerVoltage voltage = E_DJI_HIGH_POWER_VOLTAGE_17V;
|
||||
|
||||
USER_LOG_INFO("Start to apply high power.");
|
||||
|
||||
returnCode = DjiPowerManagement_ApplyHighPowerSyncV2(voltage);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("apply high power error");
|
||||
return returnCode;
|
||||
}
|
||||
USER_LOG_INFO("Success to apply high power %s.",
|
||||
voltage == E_DJI_HIGH_POWER_VOLTAGE_13V6 ? "13V6" :
|
||||
voltage == E_DJI_HIGH_POWER_VOLTAGE_17V ? "17V" :
|
||||
voltage == E_DJI_HIGH_POWER_VOLTAGE_24V ? "24V" : "???");
|
||||
} else {
|
||||
USER_LOG_INFO("Start to apply high power.");
|
||||
|
||||
returnCode = DjiPowerManagement_ApplyHighPowerSync();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("apply high power error");
|
||||
return returnCode;
|
||||
}
|
||||
USER_LOG_INFO("Success to apply high power.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -160,9 +160,16 @@ static void *DjiTest_TimeSyncTask(void *arg)
|
||||
continue;
|
||||
}
|
||||
|
||||
USER_LOG_DEBUG("current aircraft time is %04d-%02d-%02d %02d:%02d:%02d %d.",
|
||||
aircraftTime.year, aircraftTime.month, aircraftTime.day,
|
||||
aircraftTime.hour, aircraftTime.minute, aircraftTime.second, aircraftTime.microsecond);
|
||||
if ((aircraftTime.second % 30) == 0) {
|
||||
USER_LOG_INFO("current aircraft time is %04d-%02d-%02d %02d:%02d:%02d %d.",
|
||||
aircraftTime.year, aircraftTime.month, aircraftTime.day,
|
||||
aircraftTime.hour, aircraftTime.minute, aircraftTime.second, aircraftTime.microsecond);
|
||||
} else {
|
||||
USER_LOG_DEBUG("current aircraft time is %04d-%02d-%02d %02d:%02d:%02d %d.",
|
||||
aircraftTime.year, aircraftTime.month, aircraftTime.day,
|
||||
aircraftTime.hour, aircraftTime.minute, aircraftTime.second, aircraftTime.microsecond);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -90,6 +90,7 @@ bool DjiUserConfigManager_IsEnable(void)
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
static T_DjiReturnCode DjiUserConfigManager_GetAppInfoInner(const char *path, T_DjiUserInfo *userInfo)
|
||||
{
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
T_DjiReturnCode returnCode;
|
||||
uint32_t fileSize = 0;
|
||||
uint32_t readRealSize = 0;
|
||||
@ -99,7 +100,6 @@ static T_DjiReturnCode DjiUserConfigManager_GetAppInfoInner(const char *path, T_
|
||||
cJSON *jsonItem = NULL;
|
||||
cJSON *jsonValue = NULL;
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
returnCode = UtilFile_GetFileSizeByPath(path, &fileSize);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get file size by path failed, stat = 0x%08llX", returnCode);
|
||||
@ -191,6 +191,7 @@ jsonDataFree:
|
||||
|
||||
static T_DjiReturnCode DjiUserConfigManager_GetLinkConfigInner(const char *path, T_DjiUserLinkConfig *linkConfig)
|
||||
{
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
T_DjiReturnCode returnCode;
|
||||
uint32_t fileSize = 0;
|
||||
uint32_t readRealSize = 0;
|
||||
@ -202,8 +203,6 @@ static T_DjiReturnCode DjiUserConfigManager_GetLinkConfigInner(const char *path,
|
||||
cJSON *jsonConfig = NULL;
|
||||
int32_t configValue;
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
|
||||
returnCode = UtilFile_GetFileSizeByPath(path, &fileSize);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get file size by path failed, stat = 0x%08llX", returnCode);
|
||||
@ -240,6 +239,10 @@ static T_DjiReturnCode DjiUserConfigManager_GetLinkConfigInner(const char *path,
|
||||
linkConfig->type = DJI_USER_LINK_CONFIG_USE_UART_AND_NETWORK_DEVICE;
|
||||
} else if (strcmp(jsonValue->valuestring, "use_uart_and_usb_bulk_device") == 0) {
|
||||
linkConfig->type = DJI_USER_LINK_CONFIG_USE_UART_AND_USB_BULK_DEVICE;
|
||||
} else if (strcmp(jsonValue->valuestring, "use_only_usb_bulk_device") == 0) {
|
||||
linkConfig->type = DJI_USER_LINK_CONFIG_USE_ONLY_USB_BULK_DEVICE;
|
||||
} else if (strcmp(jsonValue->valuestring, "use_only_network_device") == 0) {
|
||||
linkConfig->type = DJI_USER_LINK_CONFIG_USE_ONLY_NETWORK_DEVICE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -326,6 +329,23 @@ static T_DjiReturnCode DjiUserConfigManager_GetLinkConfigInner(const char *path,
|
||||
jsonConfig = cJSON_GetObjectItem(jsonValue, "usb_bulk2_endpoint_out");
|
||||
printf("Config usb bulk2 endpoint out: %s\r\n", jsonConfig->valuestring);
|
||||
linkConfig->usbBulkConfig.usbBulk2EndpointOut = configValue;
|
||||
|
||||
jsonConfig = cJSON_GetObjectItem(jsonValue, "usb_bulk3_device_name");
|
||||
printf("Config usb bulk2 device name: %s\r\n", jsonConfig->valuestring);
|
||||
strcpy(linkConfig->usbBulkConfig.usbBulk3DeviceName, jsonConfig->valuestring);
|
||||
|
||||
jsonConfig = cJSON_GetObjectItem(jsonValue, "usb_bulk3_interface_num");
|
||||
printf("Config usb bulk2 interface num: %s\r\n", jsonConfig->valuestring);
|
||||
sscanf(jsonConfig->valuestring, "%X", &configValue);
|
||||
linkConfig->usbBulkConfig.usbBulk3InterfaceNum = configValue;
|
||||
|
||||
jsonConfig = cJSON_GetObjectItem(jsonValue, "usb_bulk3_endpoint_in");
|
||||
printf("Config usb bulk2 endpoint in: %s\r\n", jsonConfig->valuestring);
|
||||
linkConfig->usbBulkConfig.usbBulk3EndpointIn = configValue;
|
||||
|
||||
jsonConfig = cJSON_GetObjectItem(jsonValue, "usb_bulk3_endpoint_out");
|
||||
printf("Config usb bulk2 endpoint out: %s\r\n", jsonConfig->valuestring);
|
||||
linkConfig->usbBulkConfig.usbBulk3EndpointOut = configValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -43,6 +43,8 @@ typedef enum {
|
||||
DJI_USER_LINK_CONFIG_USE_ONLY_UART,
|
||||
DJI_USER_LINK_CONFIG_USE_UART_AND_NETWORK_DEVICE,
|
||||
DJI_USER_LINK_CONFIG_USE_UART_AND_USB_BULK_DEVICE,
|
||||
DJI_USER_LINK_CONFIG_USE_ONLY_USB_BULK_DEVICE,
|
||||
DJI_USER_LINK_CONFIG_USE_ONLY_NETWORK_DEVICE,
|
||||
} E_DjiUserLinkConfigType;
|
||||
|
||||
typedef struct {
|
||||
@ -71,6 +73,11 @@ typedef struct {
|
||||
uint8_t usbBulk2InterfaceNum;
|
||||
uint8_t usbBulk2EndpointIn;
|
||||
uint8_t usbBulk2EndpointOut;
|
||||
|
||||
char usbBulk3DeviceName[USER_DEVICE_NAME_STR_MAX_SIZE];
|
||||
uint8_t usbBulk3InterfaceNum;
|
||||
uint8_t usbBulk3EndpointIn;
|
||||
uint8_t usbBulk3EndpointOut;
|
||||
} usbBulkConfig;
|
||||
} T_DjiUserLinkConfig;
|
||||
|
||||
|
||||
@ -27,12 +27,12 @@
|
||||
#ifndef UTIL_FILE_H
|
||||
#define UTIL_FILE_H
|
||||
|
||||
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <dji_typedef.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
#include "dji_waypoint_v3.h"
|
||||
#include "waypoint_file_c/waypoint_v3_test_file_kmz.h"
|
||||
#include "dji_fc_subscription.h"
|
||||
#include "widget_interaction_test/test_widget_interaction.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define DJI_TEST_WAYPOINT_V3_KMZ_FILE_PATH_LEN_MAX (256)
|
||||
@ -37,22 +38,26 @@
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
|
||||
/* Private values -------------------------------------------------------------*/
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static T_DjiWaypointV3MissionState s_lastWaypointV3MissionState = {0};
|
||||
#endif
|
||||
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static T_DjiReturnCode DjiTest_WaypointV3MissionStateCallback(T_DjiWaypointV3MissionState missionState);
|
||||
static T_DjiReturnCode DjiTest_WaypointV3ActionStateCallback(T_DjiWaypointV3ActionState actionState);
|
||||
#endif
|
||||
static T_DjiReturnCode DjiTest_WaypointV3WaitEndFlightStatus(T_DjiFcSubscriptionFlightStatus status);
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
T_DjiFcSubscriptionFlightStatus flightStatus = 0;
|
||||
T_DjiDataTimestamp flightStatusTimestamp = {0};
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
FILE *kmzFile = NULL;
|
||||
uint32_t kmzFileSize = 0;
|
||||
uint8_t *kmzFileBuf;
|
||||
@ -88,7 +93,7 @@ T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
|
||||
/*! Attention: suggest use the exported kmz file by DJI pilot. If use this test file, you need set the longitude as
|
||||
* 113.94255, latitude as 22.57765 on DJI Assistant 2 simulator */
|
||||
snprintf(tempPath, DJI_TEST_WAYPOINT_V3_KMZ_FILE_PATH_LEN_MAX, "%s/waypoint_file/waypoint_v3_test_file.kmz",
|
||||
curFileDirPath);
|
||||
curFileDirPath);
|
||||
|
||||
kmzFile = fopen(tempPath, "r");
|
||||
if (kmzFile == NULL) {
|
||||
@ -130,6 +135,7 @@ T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
DjiTest_WidgetLogAppend("Execute start action");
|
||||
USER_LOG_INFO("Execute start action");
|
||||
returnCode = DjiWaypointV3_Action(DJI_WAYPOINT_V3_ACTION_START);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -154,6 +160,7 @@ close_file:
|
||||
goto out;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("aircraft on the ground, motors stoped...");
|
||||
USER_LOG_INFO("The aircraft is on the ground and motors are stoped...");
|
||||
returnCode = DjiTest_WaypointV3WaitEndFlightStatus(DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_STOPED);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -161,6 +168,7 @@ close_file:
|
||||
goto out;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("aircraft on the ground, motors rotating...");
|
||||
USER_LOG_INFO("The aircraft is on the ground and motors are rotating...");
|
||||
returnCode = DjiTest_WaypointV3WaitEndFlightStatus(DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_ON_GROUND);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -168,6 +176,7 @@ close_file:
|
||||
goto out;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("aircraft in the air...");
|
||||
USER_LOG_INFO("The aircraft is in the air...");
|
||||
returnCode = DjiTest_WaypointV3WaitEndFlightStatus(DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_IN_AIR);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -175,6 +184,7 @@ close_file:
|
||||
goto out;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("aircraft on the ground, motors rotating...");
|
||||
USER_LOG_INFO("The aircraft is on the ground and motors are rotating...");
|
||||
returnCode = DjiTest_WaypointV3WaitEndFlightStatus(DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_ON_GROUND);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -196,6 +206,7 @@ close_file:
|
||||
goto out;
|
||||
}
|
||||
|
||||
DjiTest_WidgetLogAppend("aircraft on the ground, motor toped.");
|
||||
USER_LOG_INFO("The aircraft is on the ground now, and motor are stoped.");
|
||||
|
||||
out:
|
||||
@ -209,6 +220,7 @@ out:
|
||||
}
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static T_DjiReturnCode DjiTest_WaypointV3MissionStateCallback(T_DjiWaypointV3MissionState missionState)
|
||||
{
|
||||
if (s_lastWaypointV3MissionState.state == missionState.state
|
||||
@ -220,6 +232,9 @@ static T_DjiReturnCode DjiTest_WaypointV3MissionStateCallback(T_DjiWaypointV3Mis
|
||||
USER_LOG_INFO("Waypoint v3 mission state: %d, current waypoint index: %d, wayLine id: %d", missionState.state,
|
||||
missionState.currentWaypointIndex, missionState.wayLineId);
|
||||
|
||||
DjiTest_WidgetLogAppend("WP3 mission: %d, wp idx: %d, wL id: %d", missionState.state,
|
||||
missionState.currentWaypointIndex, missionState.wayLineId);
|
||||
|
||||
memcpy(&s_lastWaypointV3MissionState, &missionState, sizeof(T_DjiWaypointV3MissionState));
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -233,8 +248,13 @@ static T_DjiReturnCode DjiTest_WaypointV3ActionStateCallback(T_DjiWaypointV3Acti
|
||||
actionState.currentWaypointIndex, actionState.wayLineId,
|
||||
actionState.actionGroupId, actionState.actionId);
|
||||
|
||||
DjiTest_WidgetLogAppend("WP3 action :%d, wp idx:%d, wL id:%d, ac:%d-%d",
|
||||
actionState.state,
|
||||
actionState.currentWaypointIndex, actionState.wayLineId,
|
||||
actionState.actionGroupId, actionState.actionId);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
static T_DjiReturnCode DjiTest_WaypointV3WaitEndFlightStatus(T_DjiFcSubscriptionFlightStatus status) {
|
||||
T_DjiReturnCode returnCode;
|
||||
|
||||
@ -31,15 +31,21 @@
|
||||
#include <stdio.h>
|
||||
#include "dji_sdk_config.h"
|
||||
#include "file_binary_array_list_en.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define WIDGET_DIR_PATH_LEN_MAX (256)
|
||||
#define WIDGET_TASK_STACK_SIZE (2048)
|
||||
#define WIDGET_LOG_STRING_MAX_SIZE (64)
|
||||
#define WIDGET_LOG_LINE_MAX_NUM (4)
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
bool valid;
|
||||
char content[WIDGET_LOG_STRING_MAX_SIZE];
|
||||
} T_DjiTestWidgetLog;
|
||||
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
static void *DjiTest_WidgetTask(void *arg);
|
||||
static T_DjiReturnCode DjiTestWidget_SetWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t value,
|
||||
void *userData);
|
||||
static T_DjiReturnCode DjiTestWidget_GetWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t *value,
|
||||
@ -49,7 +55,7 @@ static T_DjiReturnCode DjiTestWidget_GetWidgetValue(E_DjiWidgetType widgetType,
|
||||
static T_DjiTaskHandle s_widgetTestThread;
|
||||
static bool s_isWidgetFileDirPathConfigured = false;
|
||||
static char s_widgetFileDirPath[DJI_FILE_PATH_SIZE_MAX] = {0};
|
||||
|
||||
static T_DjiTestWidgetLog s_djiTestWidgetLog[WIDGET_LOG_LINE_MAX_NUM] = {0};
|
||||
static const T_DjiWidgetHandlerListItem s_widgetHandlerList[] = {
|
||||
{0, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
|
||||
{1, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},
|
||||
@ -75,6 +81,34 @@ static const uint32_t s_widgetHandlerListCount = sizeof(s_widgetHandlerList) / s
|
||||
static int32_t s_widgetValueList[sizeof(s_widgetHandlerList) / sizeof(T_DjiWidgetHandlerListItem)] = {0};
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
|
||||
|
||||
void DjiTest_WidgetLogAppend(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char string[WIDGET_LOG_STRING_MAX_SIZE];
|
||||
int32_t i;
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(string, WIDGET_LOG_STRING_MAX_SIZE, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
for (i = 0; i < WIDGET_LOG_LINE_MAX_NUM; ++i) {
|
||||
if (s_djiTestWidgetLog[i].valid == false) {
|
||||
s_djiTestWidgetLog[i].valid = true;
|
||||
strcpy(s_djiTestWidgetLog[i].content, string);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == WIDGET_LOG_LINE_MAX_NUM) {
|
||||
for (i = 0; i < WIDGET_LOG_LINE_MAX_NUM - 1; i++) {
|
||||
strcpy(s_djiTestWidgetLog[i].content, s_djiTestWidgetLog[i + 1].content);
|
||||
}
|
||||
strcpy(s_djiTestWidgetLog[WIDGET_LOG_LINE_MAX_NUM - 1].content, string);
|
||||
}
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_WidgetStartService(void)
|
||||
{
|
||||
T_DjiReturnCode djiStat;
|
||||
@ -104,6 +138,7 @@ T_DjiReturnCode DjiTest_WidgetStartService(void)
|
||||
}
|
||||
|
||||
//set default ui config path
|
||||
USER_LOG_INFO("widget file: %s", tempPath);
|
||||
djiStat = DjiWidget_RegDefaultUiConfigByDirPath(tempPath);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Add default widget ui config error, stat = 0x%08llX", djiStat);
|
||||
@ -173,20 +208,13 @@ T_DjiReturnCode DjiTest_WidgetSetConfigFilePath(const char *path)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
__attribute__((weak)) void DjiTest_WidgetLogAppend(const char *fmt, ...)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#ifndef __CC_ARM
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmissing-noreturn"
|
||||
#pragma GCC diagnostic ignored "-Wreturn-type"
|
||||
#pragma GCC diagnostic ignored "-Wformat"
|
||||
#endif
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
static void *DjiTest_WidgetTask(void *arg)
|
||||
void *DjiTest_WidgetTask(void *arg)
|
||||
{
|
||||
char message[DJI_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN];
|
||||
uint32_t sysTimeMs = 0;
|
||||
@ -201,35 +229,34 @@ static void *DjiTest_WidgetTask(void *arg)
|
||||
USER_LOG_ERROR("Get system time ms error, stat = 0x%08llX", djiStat);
|
||||
}
|
||||
|
||||
#ifndef USER_FIRMWARE_MAJOR_VERSION
|
||||
snprintf(message, DJI_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN, "System time : %u ms", sysTimeMs);
|
||||
#else
|
||||
snprintf(message, DJI_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN,
|
||||
"System time : %u ms\r\nVersion: v%02d.%02d.%02d.%02d\r\nBuild time: %s %s", sysTimeMs,
|
||||
USER_FIRMWARE_MAJOR_VERSION, USER_FIRMWARE_MINOR_VERSION,
|
||||
USER_FIRMWARE_MODIFY_VERSION, USER_FIRMWARE_DEBUG_VERSION,
|
||||
__DATE__, __TIME__);
|
||||
#endif
|
||||
|
||||
"System time : %ld ms \r\n%s \r\n%s \r\n%s \r\n%s \r\n",
|
||||
sysTimeMs,
|
||||
s_djiTestWidgetLog[0].content,
|
||||
s_djiTestWidgetLog[1].content,
|
||||
s_djiTestWidgetLog[2].content,
|
||||
s_djiTestWidgetLog[3].content);
|
||||
|
||||
djiStat = DjiWidgetFloatingWindow_ShowMessage(message);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Floating window show message error, stat = 0x%08llX", djiStat);
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(1000);
|
||||
osalHandler->TaskSleepMs(200);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __CC_ARM
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
|
||||
static T_DjiReturnCode DjiTestWidget_SetWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t value,
|
||||
void *userData)
|
||||
{
|
||||
USER_UTIL_UNUSED(userData);
|
||||
|
||||
DjiTest_WidgetLogAppend("Set widget: typ %s idx %d val %d\n", s_widgetTypeNameArray[widgetType], index, value);
|
||||
USER_LOG_INFO("Set widget value, widgetType = %s, widgetIndex = %d ,widgetValue = %d",
|
||||
s_widgetTypeNameArray[widgetType], index, value);
|
||||
s_widgetValueList[index] = value;
|
||||
|
||||
@ -41,8 +41,8 @@ extern "C" {
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
T_DjiReturnCode DjiTest_WidgetStartService(void);
|
||||
T_DjiReturnCode DjiTest_WidgetSetConfigFilePath(const char *path);
|
||||
__attribute__((weak)) void DjiTest_WidgetLogAppend(const char *fmt, ...);
|
||||
|
||||
void DjiTest_WidgetLogAppend(const char *fmt, ...);
|
||||
void *DjiTest_WidgetTask(void *arg);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -71,10 +71,13 @@
|
||||
static T_DjiWidgetSpeakerHandler s_speakerHandler = {0};
|
||||
static T_DjiMutexHandle s_speakerMutex = {0};
|
||||
static T_DjiWidgetSpeakerState s_speakerState = {0};
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
static T_DjiTaskHandle s_widgetSpeakerTestThread;
|
||||
static FILE *s_ttsFile = NULL;
|
||||
#endif
|
||||
|
||||
static FILE *s_audioFile = NULL;
|
||||
static FILE *s_ttsFile = NULL;
|
||||
static bool s_isDecodeFinished = true;
|
||||
static uint16_t s_decodeBitrate = 0;
|
||||
|
||||
@ -321,10 +324,16 @@ static T_DjiReturnCode DjiTest_PlayTtsData(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3E ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3T ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3D ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD) {
|
||||
if (DJI_AIRCRAFT_TYPE_M3E == aircraftInfoBaseInfo.aircraftType || DJI_AIRCRAFT_TYPE_M3T == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M3D == aircraftInfoBaseInfo.aircraftType || DJI_AIRCRAFT_TYPE_M3TD == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M3TA == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4T == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4TD == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4D == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4E == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4TD == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4D == aircraftInfoBaseInfo.aircraftType
|
||||
) {
|
||||
return DjiTest_PlayAudioData();
|
||||
} else {
|
||||
txtFile = fopen(WIDGET_SPEAKER_TTS_FILE_NAME, "r");
|
||||
@ -512,7 +521,9 @@ static T_DjiReturnCode SetPlayMode(E_DjiWidgetSpeakerPlayMode playMode)
|
||||
|
||||
static T_DjiReturnCode StartPlay(void)
|
||||
{
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
uint32_t pid;
|
||||
#endif
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
@ -533,7 +544,9 @@ static T_DjiReturnCode StopPlay(void)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
uint32_t pid;
|
||||
#endif
|
||||
|
||||
returnCode = osalHandler->MutexLock(s_speakerMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -564,9 +577,11 @@ static T_DjiReturnCode SetVolume(uint8_t volume)
|
||||
{
|
||||
T_DjiReturnCode returnCode;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
char cmdStr[128];
|
||||
int32_t ret = 0;
|
||||
#ifdef PLATFORM_ARCH_x86_64
|
||||
float realVolume;
|
||||
int32_t ret = 0;
|
||||
char cmdStr[128];
|
||||
#endif
|
||||
|
||||
returnCode = osalHandler->MutexLock(s_speakerMutex);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
@ -574,7 +589,6 @@ static T_DjiReturnCode SetVolume(uint8_t volume)
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
realVolume = 1.5f * (float) volume;
|
||||
s_speakerState.volume = volume;
|
||||
|
||||
USER_LOG_INFO("Set widget speaker volume: %d", volume);
|
||||
@ -584,6 +598,7 @@ static T_DjiReturnCode SetVolume(uint8_t volume)
|
||||
ret = system(cmdStr);
|
||||
if (ret == DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
memset(cmdStr, 0, sizeof(cmdStr));
|
||||
realVolume = 1.5f * (float) volume;
|
||||
snprintf(cmdStr, sizeof(cmdStr), "pactl set-sink-volume %s %d%%", WIDGET_SPEAKER_USB_AUDIO_DEVICE_NAME,
|
||||
(int32_t) realVolume);
|
||||
|
||||
@ -610,8 +625,10 @@ static T_DjiReturnCode SetVolume(uint8_t volume)
|
||||
static T_DjiReturnCode ReceiveTtsData(E_DjiWidgetTransmitDataEvent event,
|
||||
uint32_t offset, uint8_t *buf, uint16_t size)
|
||||
{
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
uint16_t writeLen;
|
||||
T_DjiReturnCode returnCode;
|
||||
#endif
|
||||
|
||||
if (event == DJI_WIDGET_TRANSMIT_DATA_EVENT_START) {
|
||||
USER_LOG_INFO("Create tts file.");
|
||||
@ -662,8 +679,11 @@ static T_DjiReturnCode ReceiveTtsData(E_DjiWidgetTransmitDataEvent event,
|
||||
static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
|
||||
uint32_t offset, uint8_t *buf, uint16_t size)
|
||||
{
|
||||
#ifdef SYSTEM_ARCH_LINUX
|
||||
uint16_t writeLen;
|
||||
T_DjiReturnCode returnCode;
|
||||
#endif
|
||||
|
||||
T_DjiWidgetTransDataContent transDataContent = {0};
|
||||
|
||||
if (event == DJI_WIDGET_TRANSMIT_DATA_EVENT_START) {
|
||||
|
||||
@ -1,148 +1,612 @@
|
||||
{
|
||||
"version": {
|
||||
"major": 1,
|
||||
"minor": 0
|
||||
},
|
||||
"main_interface": {
|
||||
"floating_window": {
|
||||
"is_enable": true
|
||||
"version": {
|
||||
"major": 1,
|
||||
"minor": 0
|
||||
},
|
||||
"speaker": {
|
||||
"is_enable_tts": true,
|
||||
"is_enable_voice": true
|
||||
},
|
||||
"widget_list": [
|
||||
{
|
||||
"widget_index": 0,
|
||||
"widget_type": "button",
|
||||
"widget_name": "按钮",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_button1.png",
|
||||
"icon_file_name_unselected": "icon_button1.png"
|
||||
},
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 1,
|
||||
"widget_type": "list",
|
||||
"widget_name": "列表",
|
||||
"list_item": [
|
||||
{
|
||||
"item_name": "选项_1",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_list_item1.png",
|
||||
"icon_file_name_unselected": "icon_list_item1.png"
|
||||
"ar_config": {
|
||||
"circleStyleList": [
|
||||
{
|
||||
"face": {
|
||||
"bottom": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.4,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 0,
|
||||
"minDist": 50
|
||||
},
|
||||
"side": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"top": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
}
|
||||
},
|
||||
"stroke": {
|
||||
"bottom": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"side": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"styleId": 10
|
||||
},
|
||||
{
|
||||
"face": {
|
||||
"bottom": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.4,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 0,
|
||||
"minDist": 50
|
||||
},
|
||||
"side": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"top": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
}
|
||||
},
|
||||
"stroke": {
|
||||
"bottom": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"side": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"styleId": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"item_name": "选项_2",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_list_item2.png",
|
||||
"icon_file_name_unselected": "icon_list_item2.png"
|
||||
],
|
||||
"commonPointStyleList": [
|
||||
{
|
||||
"alwaysInEdge": false,
|
||||
"arTextAttribute": {
|
||||
"color": -65536
|
||||
},
|
||||
"isIgnoreBorder": true,
|
||||
"styleId": 10
|
||||
},
|
||||
{
|
||||
"alwaysInEdge": false,
|
||||
"arTextAttribute": {
|
||||
"color": -65536
|
||||
},
|
||||
"isIgnoreBorder": true,
|
||||
"styleId": 11
|
||||
}
|
||||
}
|
||||
],
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 2,
|
||||
"widget_type": "switch",
|
||||
"widget_name": "开关",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_switch_select.png",
|
||||
"icon_file_name_unselected": "icon_switch_unselect.png"
|
||||
},
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 3,
|
||||
"widget_type": "scale",
|
||||
"widget_name": "范围条",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_scale.png",
|
||||
"icon_file_name_unselected": "icon_scale.png"
|
||||
},
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 3,
|
||||
"button_value_step_length": 5
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"config_interface": {
|
||||
"text_input_box": {
|
||||
"widget_name": "文本输入框",
|
||||
"placeholder_text": "请输入消息",
|
||||
"is_enable": true
|
||||
"lineStyleList": [
|
||||
{
|
||||
"color": -256,
|
||||
"stokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": false,
|
||||
"width": {
|
||||
"maxStrokeWidth": 2,
|
||||
"maxWidthDist": 2,
|
||||
"minStrokeWidth": 2,
|
||||
"minWidthDist": 2
|
||||
}
|
||||
},
|
||||
"styleId": 10,
|
||||
"useDepth": false
|
||||
},
|
||||
{
|
||||
"color": -256,
|
||||
"stokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": false,
|
||||
"width": {
|
||||
"maxStrokeWidth": 2,
|
||||
"maxWidthDist": 2,
|
||||
"minStrokeWidth": 2,
|
||||
"minWidthDist": 2
|
||||
}
|
||||
},
|
||||
"styleId": 11,
|
||||
"useDepth": false
|
||||
}
|
||||
],
|
||||
"pointStyleList": [
|
||||
{
|
||||
"keyName": 0,
|
||||
"pointConfig": {
|
||||
"arrowConfig": {
|
||||
"customIcon": false,
|
||||
"defaultDeg": 0,
|
||||
"img": "",
|
||||
"imgHeight": 0,
|
||||
"imgWidth": 0,
|
||||
"showMode": 0,
|
||||
"translate": 0,
|
||||
"type": 0
|
||||
},
|
||||
"needFont": true,
|
||||
"needOrthographic": true,
|
||||
"needPerspective": false,
|
||||
"oConfig": {
|
||||
"displayHeight": 20.0,
|
||||
"displayWidth": 20.0,
|
||||
"img": "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"none\"\n version=\"1.1\" width=\"8\" height=\"8\" viewBox=\"0 0 8 8\">\n <g>\n <ellipse id=\"point_normal_bg\"\n cx=\"4\" cy=\"4\" rx=\"2\" ry=\"2\"\n fill=\"#FFFFFF\" fill-opacity=\"1\" />\n </g>\n\n</svg>",
|
||||
"imgHeight": 20.0,
|
||||
"imgWidth": 20.0
|
||||
},
|
||||
"pConfig": {
|
||||
"maxSVG": "",
|
||||
"maxSize": 0,
|
||||
"minSVG": "",
|
||||
"minSize": 0,
|
||||
"realSize": 0,
|
||||
"strokeWidthRadio": 0
|
||||
},
|
||||
"textConfig": {
|
||||
"backgroundColor": 1427379220,
|
||||
"cornerRadius": 5,
|
||||
"paddingB": 5,
|
||||
"paddingL": 10,
|
||||
"paddingR": 10,
|
||||
"paddingT": 5,
|
||||
"shadow": false,
|
||||
"textGravity": 1,
|
||||
"textSize": 20
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"keyName": 1,
|
||||
"pointConfig": {
|
||||
"arrowConfig": {
|
||||
"customIcon": false,
|
||||
"defaultDeg": 0,
|
||||
"img": "",
|
||||
"imgHeight": 0,
|
||||
"imgWidth": 0,
|
||||
"showMode": 0,
|
||||
"translate": 0,
|
||||
"type": 0
|
||||
},
|
||||
"needFont": true,
|
||||
"needOrthographic": true,
|
||||
"needPerspective": false,
|
||||
"oConfig": {
|
||||
"displayHeight": 20.0,
|
||||
"displayWidth": 20.0,
|
||||
"img": "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"none\"\n version=\"1.1\" width=\"8\" height=\"8\" viewBox=\"0 0 8 8\">\n <g>\n <ellipse id=\"point_normal_bg\"\n cx=\"4\" cy=\"4\" rx=\"2\" ry=\"2\"\n fill=\"#FFFFFF\" fill-opacity=\"1\" />\n </g>\n\n</svg>",
|
||||
"imgHeight": 20.0,
|
||||
"imgWidth": 20.0
|
||||
},
|
||||
"pConfig": {
|
||||
"maxSVG": "",
|
||||
"maxSize": 0,
|
||||
"minSVG": "",
|
||||
"minSize": 0,
|
||||
"realSize": 0,
|
||||
"strokeWidthRadio": 0
|
||||
},
|
||||
"textConfig": {
|
||||
"backgroundColor": 1427379220,
|
||||
"cornerRadius": 5,
|
||||
"paddingB": 5,
|
||||
"paddingL": 10,
|
||||
"paddingR": 10,
|
||||
"paddingT": 5,
|
||||
"shadow": false,
|
||||
"textGravity": 1,
|
||||
"textSize": 20
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"polygonStyleList": [
|
||||
{
|
||||
"face": {
|
||||
"bottom": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.4,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 0,
|
||||
"minDist": 50
|
||||
},
|
||||
"side": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"top": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
}
|
||||
},
|
||||
"is3DMesh": false,
|
||||
"stroke": {
|
||||
"bottom": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"side": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"styleId": 10
|
||||
},
|
||||
{
|
||||
"face": {
|
||||
"bottom": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.4,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 0,
|
||||
"minDist": 50
|
||||
},
|
||||
"side": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"top": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
}
|
||||
},
|
||||
"is3DMesh": false,
|
||||
"stroke": {
|
||||
"bottom": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"side": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"styleId": 11
|
||||
}
|
||||
]
|
||||
},
|
||||
"widget_list": [
|
||||
{
|
||||
"widget_index": 4,
|
||||
"widget_type": "button",
|
||||
"widget_name": "按钮 4",
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 5,
|
||||
"widget_type": "scale",
|
||||
"widget_name": "范围条 5",
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 5,
|
||||
"button_value_step_length": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 6,
|
||||
"widget_type": "int_input_box",
|
||||
"widget_name": "整形值输入框 6",
|
||||
"int_input_box_hint": "unit:s"
|
||||
},
|
||||
{
|
||||
"widget_index": 7,
|
||||
"widget_type": "switch",
|
||||
"widget_name": "开关 7",
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 7
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 8,
|
||||
"widget_type": "list",
|
||||
"widget_name": "列表 8",
|
||||
"list_item": [
|
||||
{
|
||||
"item_name": "选项 1"
|
||||
},
|
||||
{
|
||||
"item_name": "选项 2"
|
||||
},
|
||||
{
|
||||
"item_name": "选项 3"
|
||||
},
|
||||
{
|
||||
"item_name": "选项 4"
|
||||
}
|
||||
],
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 8
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
"main_interface": {
|
||||
"floating_window": {
|
||||
"is_enable": true
|
||||
},
|
||||
"speaker": {
|
||||
"is_enable_tts": true,
|
||||
"is_enable_voice": true
|
||||
},
|
||||
"widget_list": [
|
||||
{
|
||||
"widget_index": 0,
|
||||
"widget_type": "button",
|
||||
"widget_name": "按钮",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_button1.png",
|
||||
"icon_file_name_unselected": "icon_button1.png"
|
||||
},
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 1,
|
||||
"widget_type": "list",
|
||||
"widget_name": "列表",
|
||||
"list_item": [
|
||||
{
|
||||
"item_name": "选项_1",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_list_item1.png",
|
||||
"icon_file_name_unselected": "icon_list_item1.png"
|
||||
}
|
||||
},
|
||||
{
|
||||
"item_name": "选项_2",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_list_item2.png",
|
||||
"icon_file_name_unselected": "icon_list_item2.png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 2,
|
||||
"widget_type": "switch",
|
||||
"widget_name": "开关",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_switch_select.png",
|
||||
"icon_file_name_unselected": "icon_switch_unselect.png"
|
||||
},
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 3,
|
||||
"widget_type": "scale",
|
||||
"widget_name": "范围条",
|
||||
"icon_file_set": {
|
||||
"icon_file_name_selected": "icon_scale.png",
|
||||
"icon_file_name_unselected": "icon_scale.png"
|
||||
},
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 3,
|
||||
"button_value_step_length": 5
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"config_interface": {
|
||||
"text_input_box": {
|
||||
"widget_name": "文本输入框",
|
||||
"placeholder_text": "请输入消息",
|
||||
"is_enable": true
|
||||
},
|
||||
"widget_list": [
|
||||
{
|
||||
"widget_index": 4,
|
||||
"widget_type": "button",
|
||||
"widget_name": "按钮 4",
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 5,
|
||||
"widget_type": "scale",
|
||||
"widget_name": "范围条 5",
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 5,
|
||||
"button_value_step_length": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 6,
|
||||
"widget_type": "int_input_box",
|
||||
"widget_name": "整形值输入框 6",
|
||||
"int_input_box_hint": "unit:s"
|
||||
},
|
||||
{
|
||||
"widget_index": 7,
|
||||
"widget_type": "switch",
|
||||
"widget_name": "开关 7",
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 7
|
||||
}
|
||||
},
|
||||
{
|
||||
"widget_index": 8,
|
||||
"widget_type": "list",
|
||||
"widget_name": "列表 8",
|
||||
"list_item": [
|
||||
{
|
||||
"item_name": "选项 1"
|
||||
},
|
||||
{
|
||||
"item_name": "选项 2"
|
||||
},
|
||||
{
|
||||
"item_name": "选项 3"
|
||||
},
|
||||
{
|
||||
"item_name": "选项 4"
|
||||
}
|
||||
],
|
||||
"customize_rc_buttons_config": {
|
||||
"is_enable": true,
|
||||
"mapping_config_display_order": 8
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -3,6 +3,470 @@
|
||||
"major": 1,
|
||||
"minor": 0
|
||||
},
|
||||
"ar_config": {
|
||||
"circleStyleList": [
|
||||
{
|
||||
"face": {
|
||||
"bottom": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.4,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 0,
|
||||
"minDist": 50
|
||||
},
|
||||
"side": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"top": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
}
|
||||
},
|
||||
"stroke": {
|
||||
"bottom": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"side": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"styleId": 10
|
||||
},
|
||||
{
|
||||
"face": {
|
||||
"bottom": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.4,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 0,
|
||||
"minDist": 50
|
||||
},
|
||||
"side": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"top": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
}
|
||||
},
|
||||
"stroke": {
|
||||
"bottom": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"side": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"styleId": 11
|
||||
}
|
||||
],
|
||||
"commonPointStyleList": [
|
||||
{
|
||||
"alwaysInEdge": false,
|
||||
"arTextAttribute": {
|
||||
"color": -65536
|
||||
},
|
||||
"isIgnoreBorder": true,
|
||||
"styleId": 10
|
||||
},
|
||||
{
|
||||
"alwaysInEdge": false,
|
||||
"arTextAttribute": {
|
||||
"color": -65536
|
||||
},
|
||||
"isIgnoreBorder": true,
|
||||
"styleId": 11
|
||||
}
|
||||
],
|
||||
"lineStyleList": [
|
||||
{
|
||||
"color": -256,
|
||||
"stokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": false,
|
||||
"width": {
|
||||
"maxStrokeWidth": 2,
|
||||
"maxWidthDist": 2,
|
||||
"minStrokeWidth": 2,
|
||||
"minWidthDist": 2
|
||||
}
|
||||
},
|
||||
"styleId": 10,
|
||||
"useDepth": false
|
||||
},
|
||||
{
|
||||
"color": -256,
|
||||
"stokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": false,
|
||||
"width": {
|
||||
"maxStrokeWidth": 2,
|
||||
"maxWidthDist": 2,
|
||||
"minStrokeWidth": 2,
|
||||
"minWidthDist": 2
|
||||
}
|
||||
},
|
||||
"styleId": 11,
|
||||
"useDepth": false
|
||||
}
|
||||
],
|
||||
"pointStyleList": [
|
||||
{
|
||||
"keyName": 0,
|
||||
"pointConfig": {
|
||||
"arrowConfig": {
|
||||
"customIcon": false,
|
||||
"defaultDeg": 0,
|
||||
"img": "",
|
||||
"imgHeight": 0,
|
||||
"imgWidth": 0,
|
||||
"showMode": 0,
|
||||
"translate": 0,
|
||||
"type": 0
|
||||
},
|
||||
"needFont": true,
|
||||
"needOrthographic": true,
|
||||
"needPerspective": false,
|
||||
"oConfig": {
|
||||
"displayHeight": 20.0,
|
||||
"displayWidth": 20.0,
|
||||
"img": "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"none\"\n version=\"1.1\" width=\"8\" height=\"8\" viewBox=\"0 0 8 8\">\n <g>\n <ellipse id=\"point_normal_bg\"\n cx=\"4\" cy=\"4\" rx=\"2\" ry=\"2\"\n fill=\"#FFFFFF\" fill-opacity=\"1\" />\n </g>\n\n</svg>",
|
||||
"imgHeight": 20.0,
|
||||
"imgWidth": 20.0
|
||||
},
|
||||
"pConfig": {
|
||||
"maxSVG": "",
|
||||
"maxSize": 0,
|
||||
"minSVG": "",
|
||||
"minSize": 0,
|
||||
"realSize": 0,
|
||||
"strokeWidthRadio": 0
|
||||
},
|
||||
"textConfig": {
|
||||
"backgroundColor": 1427379220,
|
||||
"cornerRadius": 5,
|
||||
"paddingB": 5,
|
||||
"paddingL": 10,
|
||||
"paddingR": 10,
|
||||
"paddingT": 5,
|
||||
"shadow": false,
|
||||
"textGravity": 1,
|
||||
"textSize": 20
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"keyName": 1,
|
||||
"pointConfig": {
|
||||
"arrowConfig": {
|
||||
"customIcon": false,
|
||||
"defaultDeg": 0,
|
||||
"img": "",
|
||||
"imgHeight": 0,
|
||||
"imgWidth": 0,
|
||||
"showMode": 0,
|
||||
"translate": 0,
|
||||
"type": 0
|
||||
},
|
||||
"needFont": true,
|
||||
"needOrthographic": true,
|
||||
"needPerspective": false,
|
||||
"oConfig": {
|
||||
"displayHeight": 20.0,
|
||||
"displayWidth": 20.0,
|
||||
"img": "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"none\"\n version=\"1.1\" width=\"8\" height=\"8\" viewBox=\"0 0 8 8\">\n <g>\n <ellipse id=\"point_normal_bg\"\n cx=\"4\" cy=\"4\" rx=\"2\" ry=\"2\"\n fill=\"#FFFFFF\" fill-opacity=\"1\" />\n </g>\n\n</svg>",
|
||||
"imgHeight": 20.0,
|
||||
"imgWidth": 20.0
|
||||
},
|
||||
"pConfig": {
|
||||
"maxSVG": "",
|
||||
"maxSize": 0,
|
||||
"minSVG": "",
|
||||
"minSize": 0,
|
||||
"realSize": 0,
|
||||
"strokeWidthRadio": 0
|
||||
},
|
||||
"textConfig": {
|
||||
"backgroundColor": 1427379220,
|
||||
"cornerRadius": 5,
|
||||
"paddingB": 5,
|
||||
"paddingL": 10,
|
||||
"paddingR": 10,
|
||||
"paddingT": 5,
|
||||
"shadow": false,
|
||||
"textGravity": 1,
|
||||
"textSize": 20
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"polygonStyleList": [
|
||||
{
|
||||
"face": {
|
||||
"bottom": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.4,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 0,
|
||||
"minDist": 50
|
||||
},
|
||||
"side": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"top": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
}
|
||||
},
|
||||
"is3DMesh": false,
|
||||
"stroke": {
|
||||
"bottom": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"side": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"styleId": 10
|
||||
},
|
||||
{
|
||||
"face": {
|
||||
"bottom": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.4,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 0,
|
||||
"minDist": 50
|
||||
},
|
||||
"side": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
},
|
||||
"top": {
|
||||
"backColor": -256,
|
||||
"faceColor": -65536
|
||||
}
|
||||
},
|
||||
"is3DMesh": false,
|
||||
"stroke": {
|
||||
"bottom": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"side": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
},
|
||||
"top": {
|
||||
"distAlpha": {
|
||||
"maxAlpha": 0.6,
|
||||
"maxDist": 100,
|
||||
"minAlpha": 1,
|
||||
"minDist": 50
|
||||
},
|
||||
"strokeInfo": {
|
||||
"color": -65536,
|
||||
"dash": true,
|
||||
"width": {
|
||||
"maxStrokeWidth": 20,
|
||||
"maxWidthDist": 20,
|
||||
"minStrokeWidth": 2.5,
|
||||
"minWidthDist": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"styleId": 11
|
||||
}
|
||||
]
|
||||
},
|
||||
"main_interface": {
|
||||
"floating_window": {
|
||||
"is_enable": true
|
||||
|
||||
@ -47,14 +47,12 @@
|
||||
#include "dji_sdk_config.h"
|
||||
#include "hms/hms_text_c/en/hms_text_config_json.h"
|
||||
#include "dji_hms.h"
|
||||
#include "positioning/test_positioning.h"
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define WIDGET_DIR_PATH_LEN_MAX (256)
|
||||
#define WIDGET_TASK_STACK_SIZE (2048)
|
||||
|
||||
#define WIDGET_LOG_STRING_MAX_SIZE (40)
|
||||
#define WIDGET_LOG_LINE_MAX_NUM (5)
|
||||
|
||||
#define DJI_HMS_ERROR_CODE_VALUE0 0x1E020000
|
||||
#define DJI_HMS_ERROR_CODE_VALUE1 0x1E020001
|
||||
#define DJI_HMS_ERROR_CODE_VALUE2 0x1E020002
|
||||
@ -92,6 +90,8 @@ typedef enum {
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_RECORDER_VIDEO = 25,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_MEDIA_DOWNLOAD = 26,
|
||||
E_DJI_SAMPLE_INDEX_CAMMGR_THERMOMETRY = 27,
|
||||
E_DJI_SAMPLE_INDEX_ON_BOARD_NETWORK_RTK_START = 28,
|
||||
E_DJI_SAMPLE_INDEX_ON_BOARD_NETWORK_RTK_STOP = 29,
|
||||
E_DJI_SAMPLE_INDEX_UNKNOWN = 0xFF,
|
||||
} E_DjiExtensionPortSampleIndex;
|
||||
|
||||
@ -111,13 +111,7 @@ typedef enum {
|
||||
E_DJI_HMS_ERROR_LEVEL_INDEX5,
|
||||
} E_DjiExtensionPortHmsErrorLevelIndex;
|
||||
|
||||
typedef struct {
|
||||
bool valid;
|
||||
char content[WIDGET_LOG_STRING_MAX_SIZE];
|
||||
} T_DjiTestWidgetLog;
|
||||
|
||||
/* Private functions declaration ---------------------------------------------*/
|
||||
static void *DjiTest_WidgetTask(void *arg);
|
||||
static void *DjiTest_WidgetInteractionTask(void *arg);
|
||||
static T_DjiReturnCode DjiTestWidget_SetWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t value,
|
||||
void *userData);
|
||||
@ -136,7 +130,6 @@ 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;
|
||||
static T_DjiTestWidgetLog s_djiTestWidgetLog[WIDGET_LOG_LINE_MAX_NUM] = {0};
|
||||
static T_DjiAircraftInfoBaseInfo s_aircraftInfoBaseInfo = {0};
|
||||
static bool s_isAliasChanged = false;
|
||||
|
||||
@ -173,32 +166,6 @@ static bool s_isWidgetFileDirPathConfigured = false;
|
||||
static char s_widgetFileDirPath[DJI_FILE_PATH_SIZE_MAX] = {0};
|
||||
|
||||
/* Exported functions definition ---------------------------------------------*/
|
||||
void DjiTest_WidgetLogAppend(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char string[WIDGET_LOG_STRING_MAX_SIZE];
|
||||
int32_t i;
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(string, WIDGET_LOG_STRING_MAX_SIZE, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
for (i = 0; i < WIDGET_LOG_LINE_MAX_NUM; ++i) {
|
||||
if (s_djiTestWidgetLog[i].valid == false) {
|
||||
s_djiTestWidgetLog[i].valid = true;
|
||||
strcpy(s_djiTestWidgetLog[i].content, string);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == WIDGET_LOG_LINE_MAX_NUM) {
|
||||
for (i = 0; i < WIDGET_LOG_LINE_MAX_NUM - 1; i++) {
|
||||
strcpy(s_djiTestWidgetLog[i].content, s_djiTestWidgetLog[i + 1].content);
|
||||
}
|
||||
strcpy(s_djiTestWidgetLog[WIDGET_LOG_LINE_MAX_NUM - 1].content, string);
|
||||
}
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiTest_WidgetInteractionStartService(void)
|
||||
{
|
||||
T_DjiReturnCode djiStat;
|
||||
@ -211,10 +178,11 @@ T_DjiReturnCode DjiTest_WidgetInteractionStartService(void)
|
||||
return djiStat;
|
||||
}
|
||||
|
||||
#ifdef SYSTEM_ARCH_LINUX_DISABLEED
|
||||
#ifdef SYSTEM_ARCH_LINUX_DISABLE
|
||||
//Step 2 : Set UI Config (Linux environment)
|
||||
char curFileDirPath[WIDGET_DIR_PATH_LEN_MAX];
|
||||
char tempPath[WIDGET_DIR_PATH_LEN_MAX];
|
||||
|
||||
djiStat = DjiUserUtil_GetCurrentFileDirPath(__FILE__, WIDGET_DIR_PATH_LEN_MAX, curFileDirPath);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get file current path error, stat = 0x%08llX", djiStat);
|
||||
@ -227,7 +195,9 @@ T_DjiReturnCode DjiTest_WidgetInteractionStartService(void)
|
||||
snprintf(tempPath, WIDGET_DIR_PATH_LEN_MAX, "%swidget_file/en_big_screen", curFileDirPath);
|
||||
}
|
||||
|
||||
USER_LOG_ERROR("Dji test widget set path");
|
||||
//set default ui config path
|
||||
USER_LOG_INFO("widget file: %s", tempPath);
|
||||
djiStat = DjiWidget_RegDefaultUiConfigByDirPath(tempPath);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Add default widget ui config error, stat = 0x%08llX", djiStat);
|
||||
@ -311,45 +281,6 @@ T_DjiReturnCode DjiTest_WidgetInteractionSetConfigFilePath(const char *path)
|
||||
#endif
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
static void *DjiTest_WidgetTask(void *arg)
|
||||
{
|
||||
char message[DJI_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN];
|
||||
uint32_t sysTimeMs = 0;
|
||||
T_DjiReturnCode djiStat;
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
|
||||
USER_UTIL_UNUSED(arg);
|
||||
|
||||
while (1) {
|
||||
djiStat = osalHandler->GetTimeMs(&sysTimeMs);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Get system time ms error, stat = 0x%08llX", djiStat);
|
||||
}
|
||||
#ifndef USER_FIRMWARE_MAJOR_VERSION
|
||||
snprintf(message, DJI_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN,
|
||||
"System time : %u ms \r\n%s \r\n%s \r\n%s \r\n%s \r\n%s \r\n",
|
||||
sysTimeMs,
|
||||
s_djiTestWidgetLog[0].content,
|
||||
s_djiTestWidgetLog[1].content,
|
||||
s_djiTestWidgetLog[2].content,
|
||||
s_djiTestWidgetLog[3].content,
|
||||
s_djiTestWidgetLog[4].content);
|
||||
#else
|
||||
snprintf(message, DJI_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN,
|
||||
"System time : %u ms\r\nVersion: v%02d.%02d.%02d.%02d\r\nBuild time: %s %s", sysTimeMs,
|
||||
USER_FIRMWARE_MAJOR_VERSION, USER_FIRMWARE_MINOR_VERSION,
|
||||
USER_FIRMWARE_MODIFY_VERSION, USER_FIRMWARE_DEBUG_VERSION,
|
||||
__DATE__, __TIME__);
|
||||
#endif
|
||||
|
||||
djiStat = DjiWidgetFloatingWindow_ShowMessage(message);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Floating window show message error, stat = 0x%08llX", djiStat);
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(200);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __CC_ARM
|
||||
#pragma GCC diagnostic pop
|
||||
@ -461,14 +392,16 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
USER_LOG_INFO("--------------------------------------------------------------------------------------------->");
|
||||
DjiTest_WidgetLogAppend("-> Sample Start");
|
||||
|
||||
if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_EXTENSION_PORT
|
||||
|| DJI_MOUNT_POSITION_EXTENSION_LITE_PORT == s_aircraftInfoBaseInfo.mountPosition) {
|
||||
if (s_aircraftInfoBaseInfo.mountPositionType == DJI_MOUNT_POSITION_TYPE_EXTENSION_PORT ||
|
||||
s_aircraftInfoBaseInfo.mountPositionType == DJI_MOUNT_POSITION_TYPE_EXTENSION_LITE_PORT ||
|
||||
s_aircraftInfoBaseInfo.mountPositionType == DJI_MOUNT_POSITION_TYPE_MANIFOLD3_ONBOARD ||
|
||||
s_aircraftInfoBaseInfo.mountPositionType == DJI_MOUNT_POSITION_TYPE_EXTENSION_PORT_V2) {
|
||||
switch (s_extensionPortSampleIndex) {
|
||||
case E_DJI_SAMPLE_INDEX_WAYPOINT_V2:
|
||||
if (s_isallowRunFlightControlSample == true) {
|
||||
DjiTest_WaypointV2RunSample();
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("Please turn on the 'unlock flight control restrictions'");
|
||||
DjiTest_WidgetLogAppend("turn on 'unlock flight control restrictions!!'");
|
||||
USER_LOG_WARN("Please turn on the 'unlock flight control restrictions' switch.");
|
||||
}
|
||||
break;
|
||||
@ -476,7 +409,7 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
if (s_isallowRunFlightControlSample == true) {
|
||||
DjiTest_WaypointV3RunSample();
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("Please turn on the 'unlock flight control restrictions'");
|
||||
DjiTest_WidgetLogAppend("turn on 'unlock flight control restrictions!!'");
|
||||
USER_LOG_WARN("Please turn on the 'unlock flight control restrictions' switch.");
|
||||
}
|
||||
break;
|
||||
@ -484,6 +417,7 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
if (s_isallowRunFlightControlSample == true) {
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_TAKE_OFF_LANDING);
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("should turn on 'unlock flight control restrictions.");
|
||||
USER_LOG_WARN("Please turn on the 'unlock flight control restrictions' switch.");
|
||||
}
|
||||
break;
|
||||
@ -492,6 +426,7 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
DjiTest_FlightControlRunSample(
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_TAKE_OFF_POSITION_CTRL_LANDING);
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("should turn on 'unlock flight control restrictions..");
|
||||
USER_LOG_WARN("Please turn on the 'unlock flight control restrictions' switch.");
|
||||
}
|
||||
break;
|
||||
@ -500,6 +435,7 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
DjiTest_FlightControlRunSample(
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_TAKE_OFF_GO_HOME_FORCE_LANDING);
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("should turn on 'unlock flight control restrictions.");
|
||||
USER_LOG_WARN("Please turn on the 'unlock flight control restrictions' switch.");
|
||||
}
|
||||
break;
|
||||
@ -508,6 +444,7 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
DjiTest_FlightControlRunSample(
|
||||
E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_TAKE_OFF_VELOCITY_CTRL_LANDING);
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("should turn on 'unlock flight control restrictions.");
|
||||
USER_LOG_WARN("Please turn on the 'unlock flight control restrictions' switch.");
|
||||
}
|
||||
break;
|
||||
@ -515,6 +452,7 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
if (s_isallowRunFlightControlSample == true) {
|
||||
DjiTest_FlightControlRunSample(E_DJI_TEST_FLIGHT_CTRL_SAMPLE_SELECT_ARREST_FLYING);
|
||||
} else {
|
||||
DjiTest_WidgetLogAppend("should turn on 'unlock flight control restrictions.");
|
||||
USER_LOG_WARN("Please turn on the 'unlock flight control restrictions' switch.");
|
||||
}
|
||||
break;
|
||||
@ -602,6 +540,12 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
|
||||
DjiTest_CameraManagerRunSample(s_mountPosition,
|
||||
E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_THERMOMETRY);
|
||||
break;
|
||||
case E_DJI_SAMPLE_INDEX_ON_BOARD_NETWORK_RTK_START:
|
||||
DjiTest_NetworkRtkOnBoardService(DJI_TEST_NETWORK_RTK_START);
|
||||
break;
|
||||
case E_DJI_SAMPLE_INDEX_ON_BOARD_NETWORK_RTK_STOP:
|
||||
DjiTest_NetworkRtkOnBoardService(DJI_TEST_NETWORK_RTK_STOP);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <dji_typedef.h>
|
||||
|
||||
#include <widget/test_widget.h>
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@ -218,6 +218,12 @@
|
||||
},
|
||||
{
|
||||
"item_name": "28_test_cammgr-thermometry"
|
||||
},
|
||||
{
|
||||
"item_name": "29_test_network-rtk-start"
|
||||
},
|
||||
{
|
||||
"item_name": "30_test_network-rtk-stop"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@ -218,6 +218,12 @@
|
||||
},
|
||||
{
|
||||
"item_name": "28_test_cammgr-thermometry"
|
||||
},
|
||||
{
|
||||
"item_name": "29_test_network-rtk-start"
|
||||
},
|
||||
{
|
||||
"item_name": "30_test_network-rtk-stop"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -88,6 +88,7 @@ T_DjiReturnCode DjiTest_XPortStartService(void)
|
||||
|
||||
limitAngle.upperLimit = 300;
|
||||
limitAngle.lowerLimit = -1000;
|
||||
USER_LOG_INFO("Set joint angle limit of pitch axis, upperLimit %d, lowerLimit %d", limitAngle.upperLimit, limitAngle.lowerLimit);
|
||||
djiStat = DjiXPort_SetLimitAngleSync(DJI_XPORT_LIMIT_ANGLE_CATEGORY_PITCH_JOINT_ANGLE, limitAngle);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set pitch joint angle limit angle for XPort error: 0x%08llX.", djiStat);
|
||||
@ -96,6 +97,7 @@ T_DjiReturnCode DjiTest_XPortStartService(void)
|
||||
|
||||
limitAngle.upperLimit = 300;
|
||||
limitAngle.lowerLimit = -800;
|
||||
USER_LOG_INFO("Set euler angle limit of pitch axis, upperLimit %d, lowerLimit %d", limitAngle.upperLimit, limitAngle.lowerLimit);
|
||||
djiStat = DjiXPort_SetLimitAngleSync(DJI_XPORT_LIMIT_ANGLE_CATEGORY_PITCH_EULER_ANGLE, limitAngle);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set pitch euler angle limit angle for XPort error: 0x%08llX.", djiStat);
|
||||
@ -104,6 +106,7 @@ T_DjiReturnCode DjiTest_XPortStartService(void)
|
||||
|
||||
limitAngle.upperLimit = 300;
|
||||
limitAngle.lowerLimit = -1000;
|
||||
USER_LOG_INFO("Set extended euler angle limit of pitch axis, upperLimit %d, lowerLimit %d", limitAngle.upperLimit, limitAngle.lowerLimit);
|
||||
djiStat = DjiXPort_SetLimitAngleSync(DJI_XPORT_LIMIT_ANGLE_CATEGORY_PITCH_EULER_ANGLE_EXTENSION, limitAngle);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set pitch extension euler angle limit angle for XPort error: 0x%08llX.", djiStat);
|
||||
@ -126,10 +129,12 @@ T_DjiReturnCode DjiTest_XPortStartService(void)
|
||||
limitAngle.upperLimit = 1500;
|
||||
limitAngle.lowerLimit = -1500;
|
||||
} else {
|
||||
USER_LOG_WARN("payload mount position is unknown.");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
USER_LOG_WARN("unknown mounposition.");
|
||||
limitAngle.upperLimit = 300;
|
||||
limitAngle.lowerLimit = -1500;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("Set joint angle limit of yaw axis, upperLimit %d, lowerLimit %d", limitAngle.upperLimit, limitAngle.lowerLimit);
|
||||
djiStat = DjiXPort_SetLimitAngleSync(DJI_XPORT_LIMIT_ANGLE_CATEGORY_YAW_JOINT_ANGLE, limitAngle);
|
||||
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set yaw joint angle limit angle for XPort error: 0x%08llX.", djiStat);
|
||||
|
||||
@ -323,7 +323,7 @@ T_DjiReturnCode Osal_GetTimeUs(uint64_t *us)
|
||||
if (s_localTimeUsOffset == 0) {
|
||||
s_localTimeUsOffset = *us;
|
||||
} else {
|
||||
*us = *us - s_localTimeMsOffset;
|
||||
*us = *us - s_localTimeUsOffset;
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
|
||||
@ -48,15 +48,10 @@ T_DjiReturnCode Osal_FileOpen(const char *fileName, const char *fileMode, T_DjiF
|
||||
|
||||
*fileObj = fopen(fileName, fileMode);
|
||||
if (*fileObj == NULL) {
|
||||
goto out;
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
|
||||
out:
|
||||
free(*fileObj);
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
T_DjiReturnCode Osal_FileClose(T_DjiFileHandle fileObj)
|
||||
|
||||
@ -176,8 +176,6 @@ T_DjiReturnCode Osal_UdpRecvData(T_DjiSocketHandle socketHandle, char *ipAddr, u
|
||||
ret = recvfrom(socketHandleStruct->socketFd, buf, len, 0, (struct sockaddr *) &addr, &addrLen);
|
||||
if (ret >= 0) {
|
||||
*realLen = ret;
|
||||
strcpy(ipAddr, inet_ntoa(addr.sin_addr));
|
||||
*port = ntohs(addr.sin_port);
|
||||
} else {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
@ -47,6 +47,9 @@ static T_DjiReturnCode DjiTest_RunSystemCmd(char *systemCmdStr);
|
||||
T_DjiReturnCode DjiUpgradePlatformLinux_RebootSystem(void)
|
||||
{
|
||||
// attention: you need su permission to reboot system
|
||||
|
||||
USER_LOG_INFO("reboot -h now");
|
||||
|
||||
return DjiTest_RunSystemCmd("reboot -h now");
|
||||
}
|
||||
|
||||
@ -56,16 +59,31 @@ T_DjiReturnCode DjiUpgradePlatformLinux_CleanUpgradeProgramFileStoreArea(void)
|
||||
|
||||
snprintf(cmdBuffer, DJI_TEST_CMD_CALL_MAX_LEN, "rm -rf %s*", DJI_TEST_UPGRADE_FILE_DIR);
|
||||
|
||||
USER_LOG_INFO("%s", cmdBuffer);
|
||||
|
||||
return DjiTest_RunSystemCmd(cmdBuffer);
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiUpgradePlatformLinux_ReplaceOldProgram(void)
|
||||
{
|
||||
char cmdBuffer[DJI_TEST_CMD_CALL_MAX_LEN];
|
||||
T_DjiReturnCode returnCode;
|
||||
|
||||
snprintf(cmdBuffer, DJI_TEST_CMD_CALL_MAX_LEN, "cp -f %s*_V*.*.*.bin %s", DJI_TEST_UPGRADE_FILE_DIR,
|
||||
DJI_TEST_UPGRADE_OLD_FIRMWARE_PATH);
|
||||
|
||||
USER_LOG_INFO("%s", cmdBuffer);
|
||||
|
||||
returnCode = DjiTest_RunSystemCmd(cmdBuffer);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Replace old program file error");
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
snprintf(cmdBuffer, DJI_TEST_CMD_CALL_MAX_LEN, "chmod 777 %s", DJI_TEST_UPGRADE_OLD_FIRMWARE_PATH);
|
||||
|
||||
USER_LOG_INFO("%s", cmdBuffer);
|
||||
|
||||
return DjiTest_RunSystemCmd(cmdBuffer);
|
||||
}
|
||||
|
||||
@ -81,6 +99,8 @@ T_DjiReturnCode DjiUpgradePlatformLinux_SetUpgradeRebootState(const T_DjiUpgrade
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("set upgrade reboot state to %s, state %d", DJI_REBOOT_STATE_FILE_NAME, upgradeEndInfo->upgradeEndState);
|
||||
|
||||
res = fwrite((uint8_t *) upgradeEndInfo, 1, sizeof(T_DjiUpgradeEndInfo), rebootStateFile);
|
||||
if (res != sizeof(T_DjiUpgradeEndInfo)) {
|
||||
USER_LOG_ERROR("Write data len is not equal");
|
||||
@ -103,6 +123,7 @@ T_DjiReturnCode DjiUpgradePlatformLinux_GetUpgradeRebootState(bool *isUpgradeReb
|
||||
rebootStateFile = fopen(DJI_REBOOT_STATE_FILE_NAME, "r");
|
||||
if (rebootStateFile == NULL) {
|
||||
*isUpgradeReboot = false;
|
||||
USER_LOG_INFO("isUpgradeReboot false");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
@ -112,8 +133,12 @@ T_DjiReturnCode DjiUpgradePlatformLinux_GetUpgradeRebootState(bool *isUpgradeReb
|
||||
*isUpgradeReboot = false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("isUpgradeReboot true");
|
||||
*isUpgradeReboot = true;
|
||||
|
||||
USER_LOG_INFO("upgrade end state is %d", upgradeEndInfo->upgradeEndState);
|
||||
|
||||
out:
|
||||
fclose(rebootStateFile);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -121,18 +146,29 @@ out:
|
||||
|
||||
T_DjiReturnCode DjiUpgradePlatformLinux_CleanUpgradeRebootState(void)
|
||||
{
|
||||
USER_LOG_INFO("rm -f %s", DJI_REBOOT_STATE_FILE_NAME);
|
||||
|
||||
return DjiTest_RunSystemCmd("rm -f "DJI_REBOOT_STATE_FILE_NAME);
|
||||
}
|
||||
|
||||
T_DjiReturnCode DjiUpgradePlatformLinux_CreateUpgradeProgramFile(const T_DjiUpgradeFileInfo *fileInfo)
|
||||
{
|
||||
char filePath[DJI_FILE_PATH_SIZE_MAX];
|
||||
char cmdBuffer[DJI_TEST_CMD_CALL_MAX_LEN];
|
||||
|
||||
snprintf(cmdBuffer, DJI_TEST_CMD_CALL_MAX_LEN, "mkdir -p %s", DJI_TEST_UPGRADE_FILE_DIR);
|
||||
|
||||
USER_LOG_INFO("%s", cmdBuffer);
|
||||
|
||||
DjiTest_RunSystemCmd(cmdBuffer);
|
||||
|
||||
USER_LOG_INFO("create %s%s", DJI_TEST_UPGRADE_FILE_DIR, fileInfo->fileName);
|
||||
|
||||
s_upgradeProgramFile = NULL;
|
||||
snprintf(filePath, DJI_FILE_PATH_SIZE_MAX, "%s%s", DJI_TEST_UPGRADE_FILE_DIR, fileInfo->fileName);
|
||||
s_upgradeProgramFile = fopen(filePath, "w+");
|
||||
if (s_upgradeProgramFile == NULL) {
|
||||
USER_LOG_ERROR("Upgrade program file can't create");
|
||||
USER_LOG_ERROR("Upgrade program file can't create: %s", filePath);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
@ -191,6 +227,8 @@ T_DjiReturnCode DjiUpgradePlatformLinux_CloseUpgradeProgramFile(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
USER_LOG_INFO("close upgrade program file");
|
||||
|
||||
fclose(s_upgradeProgramFile);
|
||||
s_upgradeProgramFile = NULL;
|
||||
|
||||
|
||||
@ -41,7 +41,7 @@ file(GLOB_RECURSE MODULE_SAMPLE_SRC ../../../module_sample/*.c)
|
||||
|
||||
include_directories(../../../module_sample)
|
||||
include_directories(../common)
|
||||
include_directories(../manifold2/application)
|
||||
include_directories(application)
|
||||
|
||||
include_directories(../../../../../psdk_lib/include)
|
||||
link_directories(../../../../../psdk_lib/lib/${TOOLCHAIN_NAME})
|
||||
@ -82,7 +82,7 @@ else ()
|
||||
message(STATUS "Cannot Find LIBUSB")
|
||||
endif (LIBUSB_FOUND)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} m)
|
||||
target_link_libraries(${PROJECT_NAME} m dl)
|
||||
|
||||
add_custom_command(TARGET ${PROJECT_NAME}
|
||||
PRE_LINK COMMAND cmake ..
|
||||
|
||||
@ -31,7 +31,8 @@ elseif (DEVICE_SYSTEM_ID MATCHES aarch64)
|
||||
set(TOOLCHAIN_NAME aarch64-linux-gnu-gcc)
|
||||
add_definitions(-DPLATFORM_ARCH_aarch64=1)
|
||||
else ()
|
||||
message(FATAL_ERROR "FATAL: Please confirm your platform.")
|
||||
set(TOOLCHAIN_NAME arm-linux-gnueabihf-gcc)
|
||||
# message(FATAL_ERROR "FATAL: Please confirm your platform.")
|
||||
endif ()
|
||||
|
||||
file(GLOB_RECURSE MODULE_COMMON_SRC ../common/*.c)
|
||||
@ -41,7 +42,7 @@ file(GLOB_RECURSE MODULE_SAMPLE_SRC ../../../module_sample/*.c)
|
||||
|
||||
include_directories(../../../module_sample)
|
||||
include_directories(../common)
|
||||
include_directories(../manifold2/application)
|
||||
include_directories(application)
|
||||
|
||||
include_directories(../../../../../psdk_lib/include)
|
||||
link_directories(../../../../../psdk_lib/lib/${TOOLCHAIN_NAME})
|
||||
@ -82,7 +83,7 @@ else ()
|
||||
message(STATUS "Cannot Find LIBUSB")
|
||||
endif (LIBUSB_FOUND)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} m)
|
||||
target_link_libraries(${PROJECT_NAME} m dl)
|
||||
|
||||
add_custom_command(TARGET ${PROJECT_NAME}
|
||||
PRE_LINK COMMAND cmake ..
|
||||
|
||||
@ -35,13 +35,14 @@ extern "C" {
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
// ATTENTION: User must goto https://developer.dji.com/user/apps/#all to create your own dji sdk application, get dji sdk application
|
||||
// information then fill in the application information here.
|
||||
#define USER_APP_NAME "your_app_name"
|
||||
#define USER_APP_ID "your_app_id"
|
||||
#define USER_APP_KEY "your_app_key"
|
||||
#define USER_APP_LICENSE "your_app_license"
|
||||
#define USER_DEVELOPER_ACCOUNT "your_developer_account"
|
||||
#define USER_APP_NAME "M400device"
|
||||
#define USER_APP_ID "176035"
|
||||
#define USER_APP_KEY "4889bbeb0092089889b4f3180167202"
|
||||
#define USER_APP_LICENSE "VVfdaxQA6j5aX6zy/C6S2PFoSUqdcj5PeQ1GG8aRMuy+SegA1y9iYtQLOLu7CprNwwBN6X6wdwzSn8lOHJuXb6TfvRsakVCsXQ6A9qWmBB8IKzAKcQ60EJlZ71h5cLthXzNNq1ERQpBM5w9b+FebKF29XzozZCF2ZYWSgoGb/nEWxlm23Gp0EB3ZwbP31yRyLQUCY3iDdLYByOe3xSGLtJOlu3OJuujzY80T3eqWonwYsl4Hb4hWJODXJYWzLGFA1irjVJdle//7WZ0F17fEo/xGgPb7W36twDU80QFfpwagEqtacoo6bp+qij6Db10wF9Z8VWlAkY+59lLbyV3gnw=="
|
||||
#define USER_DEVELOPER_ACCOUNT "rlxlixin1@163.com"
|
||||
#define USER_BAUD_RATE "460800"
|
||||
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
@ -37,22 +37,24 @@ extern "C" {
|
||||
#define DJI_USE_ONLY_UART (0)
|
||||
#define DJI_USE_UART_AND_USB_BULK_DEVICE (1)
|
||||
#define DJI_USE_UART_AND_NETWORK_DEVICE (2)
|
||||
#define DJI_USE_ONLY_USB_BULK_DEVICE (3)
|
||||
#define DJI_USE_ONLY_NETWORK_DEVICE (4)
|
||||
|
||||
/*!< Attention: Select your hardware connection mode here.
|
||||
* */
|
||||
#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_NETWORK_DEVICE
|
||||
#define CONFIG_HARDWARE_CONNECTION DJI_USE_ONLY_USB_BULK_DEVICE
|
||||
|
||||
/*!< Attention: Select the sample you want to run here.
|
||||
* */
|
||||
#define CONFIG_MODULE_SAMPLE_POWER_MANAGEMENT_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_CAMERA_EMU_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_CAMERA_MEDIA_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_GIMBAL_EMU_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_XPORT_ON
|
||||
// #define CONFIG_MODULE_SAMPLE_POWER_MANAGEMENT_ON
|
||||
//
|
||||
// #define CONFIG_MODULE_SAMPLE_CAMERA_EMU_ON
|
||||
//
|
||||
// #define CONFIG_MODULE_SAMPLE_CAMERA_MEDIA_ON
|
||||
//
|
||||
// #define CONFIG_MODULE_SAMPLE_GIMBAL_EMU_ON
|
||||
//
|
||||
// #define CONFIG_MODULE_SAMPLE_XPORT_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_WIDGET_ON
|
||||
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
#include "../hal/hal_uart.h"
|
||||
#include "../hal/hal_network.h"
|
||||
#include "../hal/hal_usb_bulk.h"
|
||||
#include "../hal/hal_i2c.h"
|
||||
#include "dji_sdk_app_info.h"
|
||||
#include "dji_aircraft_info.h"
|
||||
#include "widget/test_widget.h"
|
||||
@ -128,6 +129,7 @@ int main(int argc, char **argv)
|
||||
returnCode = DjiCore_Init(&userInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Core init error");
|
||||
sleep(1);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
@ -185,12 +187,13 @@ int main(int argc, char **argv)
|
||||
#ifdef CONFIG_MODULE_SAMPLE_DATA_TRANSMISSION_ON
|
||||
returnCode = DjiTest_DataTransmissionStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("widget sample init error");
|
||||
USER_LOG_ERROR("data tramsmission sample init error");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_EXTENSION_PORT &&
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M300_RTK) {
|
||||
(aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M300_RTK ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M350_RTK)) {
|
||||
returnCode = DjiTest_WidgetInteractionStartService();
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("widget interaction sample init error");
|
||||
@ -224,6 +227,8 @@ int main(int argc, char **argv)
|
||||
|
||||
#ifdef CONFIG_MODULE_SAMPLE_GIMBAL_EMU_ON
|
||||
if (aircraftInfoBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 ||
|
||||
aircraftInfoBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_EPORT_V2_RIBBON_CABLE ||
|
||||
aircraftInfoBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V3 ||
|
||||
aircraftInfoBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_NONE) {
|
||||
if (DjiTest_GimbalStartService() != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("psdk gimbal init error");
|
||||
@ -370,6 +375,7 @@ static T_DjiReturnCode DjiUser_PrepareSystemEnvironment(void)
|
||||
.UartWriteData = HalUart_WriteData,
|
||||
.UartReadData = HalUart_ReadData,
|
||||
.UartGetStatus = HalUart_GetStatus,
|
||||
.UartGetDeviceInfo = HalUart_GetDeviceInfo,
|
||||
};
|
||||
|
||||
T_DjiHalNetworkHandler networkHandler = {
|
||||
@ -415,15 +421,22 @@ static T_DjiReturnCode DjiUser_PrepareSystemEnvironment(void)
|
||||
.TcpRecvData = Osal_TcpRecvData,
|
||||
};
|
||||
|
||||
T_DjiHalI2cHandler i2CHandler = {
|
||||
.I2cInit = HalI2c_Init,
|
||||
.I2cDeInit = HalI2c_DeInit,
|
||||
.I2cWriteData = HalI2c_WriteData,
|
||||
.I2cReadData = HalI2c_ReadData,
|
||||
};
|
||||
|
||||
returnCode = DjiPlatform_RegOsalHandler(&osalHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register osal handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
returnCode = DjiPlatform_RegHalUartHandler(&uartHandler);
|
||||
returnCode = DjiPlatform_RegHalI2cHandler(&i2CHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal uart handler error");
|
||||
printf("register hal i2c handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
@ -445,12 +458,24 @@ static T_DjiReturnCode DjiUser_PrepareSystemEnvironment(void)
|
||||
}
|
||||
|
||||
#if (CONFIG_HARDWARE_CONNECTION == DJI_USE_UART_AND_USB_BULK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalUartHandler(&uartHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal uart handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
returnCode = DjiPlatform_RegHalUsbBulkHandler(&usbBulkHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal usb bulk handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
#elif (CONFIG_HARDWARE_CONNECTION == DJI_USE_UART_AND_NETWORK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalUartHandler(&uartHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal uart handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
returnCode = DjiPlatform_RegHalNetworkHandler(&networkHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal network handler error");
|
||||
@ -464,8 +489,32 @@ static T_DjiReturnCode DjiUser_PrepareSystemEnvironment(void)
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
#elif (CONFIG_HARDWARE_CONNECTION == DJI_USE_ONLY_UART)
|
||||
/*!< Attention: Only use uart hardware connection.
|
||||
*/
|
||||
returnCode = DjiPlatform_RegHalUartHandler(&uartHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal uart handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
#elif (CONFIG_HARDWARE_CONNECTION == DJI_USE_ONLY_USB_BULK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalUsbBulkHandler(&usbBulkHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal usb bulk handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
#elif (CONFIG_HARDWARE_CONNECTION == DJI_USE_ONLY_NETWORK_DEVICE)
|
||||
returnCode = DjiPlatform_RegHalNetworkHandler(&networkHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal network handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
//Attention: if you want to use camera stream view function, please uncomment it.
|
||||
returnCode = DjiPlatform_RegSocketHandler(&socketHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register osal socket handler error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
returnCode = DjiPlatform_RegFileSystemHandler(&fileSystemHandler);
|
||||
|
||||
@ -42,16 +42,27 @@ T_DjiReturnCode HalNetWork_Init(const char *ipAddr, const char *netMask, T_DjiNe
|
||||
{
|
||||
int32_t ret;
|
||||
char cmdStr[LINUX_CMD_STR_MAX_SIZE];
|
||||
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
|
||||
int32_t routeIp[4] = {0};
|
||||
int32_t genMask[4] = {0};
|
||||
|
||||
if (ipAddr == NULL || netMask == NULL) {
|
||||
USER_LOG_ERROR("hal network config param error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
sscanf(ipAddr, "%d.%d.%d.%d", &routeIp[0], &routeIp[1], &routeIp[2], &routeIp[3]);
|
||||
sscanf(netMask, "%d.%d.%d.%d", &genMask[0], &genMask[1], &genMask[2], &genMask[3]);
|
||||
routeIp[0] &= genMask[0];
|
||||
routeIp[1] &= genMask[1];
|
||||
routeIp[2] &= genMask[2];
|
||||
routeIp[3] &= genMask[3];
|
||||
|
||||
//Attention: need root permission to config ip addr and netmask.
|
||||
memset(cmdStr, 0, sizeof(cmdStr));
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s up", LINUX_NETWORK_DEV);
|
||||
USER_LOG_DEBUG("%s", cmdStr);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Can't open the network."
|
||||
@ -61,14 +72,34 @@ T_DjiReturnCode HalNetWork_Init(const char *ipAddr, const char *netMask, T_DjiNe
|
||||
}
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s %s netmask %s", LINUX_NETWORK_DEV, ipAddr, netMask);
|
||||
USER_LOG_DEBUG("%s", cmdStr);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("Can't config the ip address of network."
|
||||
"Probably the program not execute with root permission."
|
||||
"Please use the root permission to execute the program.");
|
||||
USER_LOG_ERROR("cmd failed: %s", cmdStr);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(50);
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "ip route flush dev %s", LINUX_NETWORK_DEV);
|
||||
USER_LOG_DEBUG("%s", cmdStr);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("cmd failed: %s", cmdStr);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
snprintf(cmdStr, sizeof(cmdStr), "route add -net %d.%d.%d.%d netmask %s dev %s",
|
||||
routeIp[0], routeIp[1], routeIp[2], routeIp[3], netMask, LINUX_NETWORK_DEV);
|
||||
USER_LOG_DEBUG("%s", cmdStr);
|
||||
ret = system(cmdStr);
|
||||
if (ret != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("cmd failed: %s", cmdStr);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
osalHandler->TaskSleepMs(50);
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -42,7 +42,7 @@ extern "C" {
|
||||
#ifdef PLATFORM_ARCH_x86_64
|
||||
#define LINUX_NETWORK_DEV "enxf8e43b7bbc2c"
|
||||
#else
|
||||
#define LINUX_NETWORK_DEV "l4tbr0"
|
||||
#define LINUX_NETWORK_DEV "pi4br0"
|
||||
#endif
|
||||
/**
|
||||
* @attention
|
||||
@ -52,8 +52,8 @@ extern "C" {
|
||||
#define USB_NET_ADAPTER_VID (0x0B95)
|
||||
#define USB_NET_ADAPTER_PID (0x1790)
|
||||
#else
|
||||
#define USB_NET_ADAPTER_VID (0x0955)
|
||||
#define USB_NET_ADAPTER_PID (0x7020)
|
||||
#define USB_NET_ADAPTER_VID (0x2CA3)
|
||||
#define USB_NET_ADAPTER_PID (0xF003)
|
||||
#endif
|
||||
|
||||
#define LINUX_CMD_STR_MAX_SIZE (128)
|
||||
|
||||
@ -255,6 +255,18 @@ T_DjiReturnCode HalUart_GetStatus(E_DjiHalUartNum uartNum, T_DjiUartStatus *stat
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
T_DjiReturnCode HalUart_GetDeviceInfo(T_DjiHalUartDeviceInfo *deviceInfo)
|
||||
{
|
||||
if (deviceInfo == NULL) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
deviceInfo->vid = USB_UART_CONNECTED_TO_UAV_VID;
|
||||
deviceInfo->pid = USB_UART_CONNECTED_TO_UAV_PID;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -48,6 +48,15 @@ extern "C" {
|
||||
#define LINUX_UART_DEV1 "/dev/ttyUSB0"
|
||||
#define LINUX_UART_DEV2 "/dev/ttyACM0"
|
||||
|
||||
/**
|
||||
* Use for Eport 2.0, specify the VID and PID of the USB serial port closest to the aircraft.
|
||||
* FT232 0x0403:0x6001
|
||||
* CP2102 0x10C4:0xEA60
|
||||
* VCOM 0x2CA3:0xF002
|
||||
*/
|
||||
#define USB_UART_CONNECTED_TO_UAV_VID (0x0403)
|
||||
#define USB_UART_CONNECTED_TO_UAV_PID (0x6001)
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
@ -56,6 +65,7 @@ T_DjiReturnCode HalUart_DeInit(T_DjiUartHandle uartHandle);
|
||||
T_DjiReturnCode HalUart_WriteData(T_DjiUartHandle uartHandle, const uint8_t *buf, uint32_t len, uint32_t *realLen);
|
||||
T_DjiReturnCode HalUart_ReadData(T_DjiUartHandle uartHandle, uint8_t *buf, uint32_t len, uint32_t *realLen);
|
||||
T_DjiReturnCode HalUart_GetStatus(E_DjiHalUartNum uartNum, T_DjiUartStatus *status);
|
||||
T_DjiReturnCode HalUart_GetDeviceInfo(T_DjiHalUartDeviceInfo *deviceInfo);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "hal_usb_bulk.h"
|
||||
#include "dji_logger.h"
|
||||
#include <errno.h>
|
||||
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define LINUX_USB_BULK_TRANSFER_TIMEOUT_MS (50)
|
||||
@ -67,12 +68,13 @@ T_DjiReturnCode HalUsbBulk_Init(T_DjiHalUsbBulkInfo usbBulkInfo, T_DjiUsbBulkHan
|
||||
|
||||
handle = libusb_open_device_with_vid_pid(NULL, usbBulkInfo.vid, usbBulkInfo.pid);
|
||||
if (handle == NULL) {
|
||||
USER_LOG_ERROR("libusb open device error");
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
ret = libusb_claim_interface(handle, usbBulkInfo.channelInfo.interfaceNum);
|
||||
if (ret != LIBUSB_SUCCESS) {
|
||||
printf("libusb claim interface error");
|
||||
USER_LOG_ERROR("libusb claim interface error");
|
||||
libusb_close(handle);
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
@ -86,22 +88,32 @@ T_DjiReturnCode HalUsbBulk_Init(T_DjiHalUsbBulkInfo usbBulkInfo, T_DjiUsbBulkHan
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->interfaceNum = usbBulkInfo.channelInfo.interfaceNum;
|
||||
|
||||
if (usbBulkInfo.channelInfo.interfaceNum == LINUX_USB_BULK1_INTERFACE_NUM) {
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK1_EP_OUT_FD, O_RDWR);
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK1_EP_IN_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK1_EP_IN_FD, O_RDWR);
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK1_EP_OUT_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
} else if (usbBulkInfo.channelInfo.interfaceNum == LINUX_USB_BULK2_INTERFACE_NUM) {
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK2_EP_OUT_FD, O_RDWR);
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK2_EP_IN_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK2_EP_IN_FD, O_RDWR);
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK2_EP_OUT_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
} else if (usbBulkInfo.channelInfo.interfaceNum == LINUX_USB_BULK3_INTERFACE_NUM) {
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 = open(LINUX_USB_BULK3_EP_IN_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep1 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 = open(LINUX_USB_BULK3_EP_OUT_FD, O_RDWR);
|
||||
if (((T_HalUsbBulkObj *) *usbBulkHandle)->ep2 < 0) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
|
||||
}
|
||||
@ -163,7 +175,13 @@ T_DjiReturnCode HalUsbBulk_WriteData(T_DjiUsbBulkHandle usbBulkHandle, const uin
|
||||
*realLen = actualLen;
|
||||
#endif
|
||||
} else {
|
||||
*realLen = write(((T_HalUsbBulkObj *) usbBulkHandle)->ep1, buf, len);
|
||||
ret = write(((T_HalUsbBulkObj *) usbBulkHandle)->ep1, buf, len);
|
||||
if (ret < 0) {
|
||||
USER_LOG_ERROR("write ret %d %d %s\n", ret, errno, strerror(errno));
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
} else {
|
||||
*realLen = ret;
|
||||
}
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -194,7 +212,13 @@ T_DjiReturnCode HalUsbBulk_ReadData(T_DjiUsbBulkHandle usbBulkHandle, uint8_t *b
|
||||
*realLen = actualLen;
|
||||
#endif
|
||||
} else {
|
||||
*realLen = read(((T_HalUsbBulkObj *) usbBulkHandle)->ep2, buf, len);
|
||||
ret = read(((T_HalUsbBulkObj *) usbBulkHandle)->ep2, buf, len);
|
||||
if (ret < 0) {
|
||||
USER_LOG_ERROR("read ret %d %d %s\n", ret, errno, strerror(errno));
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
} else {
|
||||
*realLen = ret;
|
||||
}
|
||||
}
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
@ -216,6 +240,10 @@ T_DjiReturnCode HalUsbBulk_GetDeviceInfo(T_DjiHalUsbBulkDeviceInfo *deviceInfo)
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_1].endPointIn = LINUX_USB_BULK2_END_POINT_IN;
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_1].endPointOut = LINUX_USB_BULK2_END_POINT_OUT;
|
||||
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_2].interfaceNum = LINUX_USB_BULK3_INTERFACE_NUM;
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_2].endPointIn = LINUX_USB_BULK3_END_POINT_IN;
|
||||
deviceInfo->channelInfo[DJI_HAL_USB_BULK_NUM_2].endPointOut = LINUX_USB_BULK3_END_POINT_OUT;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -52,27 +52,29 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
#define LINUX_USB_BULK1_EP_OUT_FD "/dev/usb-ffs/bulk1/ep1"
|
||||
#define LINUX_USB_BULK1_EP_IN_FD "/dev/usb-ffs/bulk1/ep2"
|
||||
#define LINUX_USB_BULK1_EP_IN_FD "/dev/usb-ffs/bulk1/ep1"
|
||||
#define LINUX_USB_BULK1_EP_OUT_FD "/dev/usb-ffs/bulk1/ep2"
|
||||
|
||||
#define LINUX_USB_BULK1_INTERFACE_NUM (7)
|
||||
#define LINUX_USB_BULK1_END_POINT_IN (0x88)
|
||||
#define LINUX_USB_BULK1_END_POINT_OUT (5)
|
||||
#define LINUX_USB_BULK1_INTERFACE_NUM (0)
|
||||
#define LINUX_USB_BULK1_END_POINT_IN (0x81)
|
||||
#define LINUX_USB_BULK1_END_POINT_OUT (0x01)
|
||||
|
||||
#define LINUX_USB_BULK2_EP_OUT_FD "/dev/usb-ffs/bulk2/ep1"
|
||||
#define LINUX_USB_BULK2_EP_IN_FD "/dev/usb-ffs/bulk2/ep2"
|
||||
#define LINUX_USB_BULK2_EP_IN_FD "/dev/usb-ffs/bulk2/ep1"
|
||||
#define LINUX_USB_BULK2_EP_OUT_FD "/dev/usb-ffs/bulk2/ep2"
|
||||
|
||||
#define LINUX_USB_BULK2_INTERFACE_NUM (8)
|
||||
#define LINUX_USB_BULK2_END_POINT_IN (0x89)
|
||||
#define LINUX_USB_BULK2_END_POINT_OUT (6)
|
||||
#define LINUX_USB_BULK2_INTERFACE_NUM (1)
|
||||
#define LINUX_USB_BULK2_END_POINT_IN (0x82)
|
||||
#define LINUX_USB_BULK2_END_POINT_OUT (0x02)
|
||||
|
||||
#ifdef PLATFORM_ARCH_x86_64
|
||||
#define LINUX_USB_VID (0x0B95)
|
||||
#define LINUX_USB_PID (0x1790)
|
||||
#else
|
||||
#define LINUX_USB_VID (0x0955)
|
||||
#define LINUX_USB_PID (0x7020)
|
||||
#endif
|
||||
#define LINUX_USB_BULK3_EP_IN_FD "/dev/usb-ffs/bulk3/ep1"
|
||||
#define LINUX_USB_BULK3_EP_OUT_FD "/dev/usb-ffs/bulk3/ep2"
|
||||
|
||||
#define LINUX_USB_BULK3_INTERFACE_NUM (2)
|
||||
#define LINUX_USB_BULK3_END_POINT_IN (0x83)
|
||||
#define LINUX_USB_BULK3_END_POINT_OUT (0x03)
|
||||
|
||||
#define LINUX_USB_VID (0x2CA3)
|
||||
#define LINUX_USB_PID (0xF001)
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -38,6 +38,7 @@
|
||||
|
||||
#include "application.h"
|
||||
#include "hal_uart.h"
|
||||
#include "hal_i2c.h"
|
||||
#include "osal.h"
|
||||
#include "dji_sdk_app_info.h"
|
||||
#include "dji_sdk_config.h"
|
||||
@ -110,6 +111,13 @@ void DjiUser_StartTask(void const *argument)
|
||||
.UartWriteData = HalUart_WriteData,
|
||||
.UartReadData = HalUart_ReadData,
|
||||
.UartGetStatus = HalUart_GetStatus,
|
||||
.UartGetDeviceInfo = HalUart_GetDeviceInfo,
|
||||
};
|
||||
T_DjiHalI2cHandler i2CHandler = {
|
||||
.I2cInit = HalI2c_Init,
|
||||
.I2cDeInit = HalI2c_DeInit,
|
||||
.I2cWriteData = HalI2c_WriteData,
|
||||
.I2cReadData = HalI2c_ReadData,
|
||||
};
|
||||
T_DjiFirmwareVersion firmwareVersion = {
|
||||
.majorVersion = USER_FIRMWARE_MAJOR_VERSION,
|
||||
@ -139,6 +147,12 @@ void DjiUser_StartTask(void const *argument)
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiPlatform_RegHalI2cHandler(&i2CHandler);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("register hal i2c handler error");
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiLogger_AddConsole(&printConsole);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
printf("add printf console error");
|
||||
@ -151,6 +165,18 @@ void DjiUser_StartTask(void const *argument)
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiCore_SetFirmwareVersion(firmwareVersion);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set firmware version error");
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiCore_SetSerialNumber("PSDK12345678XX");
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set serial number error");
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiCore_Init(&userInfo);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("core init error");
|
||||
@ -169,18 +195,6 @@ void DjiUser_StartTask(void const *argument)
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiCore_SetFirmwareVersion(firmwareVersion);
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set firmware version error");
|
||||
goto out;
|
||||
}
|
||||
|
||||
returnCode = DjiCore_SetSerialNumber("PSDK12345678XX");
|
||||
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("set serial number error");
|
||||
goto out;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MODULE_SAMPLE_POWER_MANAGEMENT_ON
|
||||
T_DjiTestApplyHighPowerHandler applyHighPowerHandler = {
|
||||
.pinInit = DjiTest_HighPowerApplyPinInit,
|
||||
@ -294,9 +308,13 @@ void DjiUser_StartTask(void const *argument)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MODULE_SAMPLE_POSITIONING_ON
|
||||
if ((aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M300_RTK ||
|
||||
if (((aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M300_RTK ||
|
||||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M350_RTK)
|
||||
&& aircraftInfoBaseInfo.mountPosition != DJI_MOUNT_POSITION_TYPE_EXTENSION_PORT) {
|
||||
&& aircraftInfoBaseInfo.mountPosition != DJI_MOUNT_POSITION_TYPE_EXTENSION_PORT)
|
||||
|| DJI_AIRCRAFT_TYPE_M4T == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4TD == aircraftInfoBaseInfo.aircraftType
|
||||
|| DJI_AIRCRAFT_TYPE_M4D == aircraftInfoBaseInfo.aircraftType
|
||||
) {
|
||||
if (DjiTest_PositioningStartService() != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
USER_LOG_ERROR("psdk positioning init error");
|
||||
}
|
||||
|
||||
@ -34,23 +34,23 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
#define CONFIG_MODULE_SAMPLE_POWER_MANAGEMENT_ON
|
||||
// #define CONFIG_MODULE_SAMPLE_POWER_MANAGEMENT_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_WIDGET_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_WIDGET_SPEAKER_ON
|
||||
// #define CONFIG_MODULE_SAMPLE_WIDGET_SPEAKER_ON
|
||||
|
||||
// #define CONFIG_MODULE_SAMPLE_DATA_TRANSMISSION_ON
|
||||
|
||||
// #define CONFIG_MODULE_SAMPLE_FC_SUBSCRIPTION_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_GIMBAL_EMU_ON
|
||||
// #define CONFIG_MODULE_SAMPLE_GIMBAL_EMU_ON
|
||||
|
||||
// #define CONFIG_MODULE_SAMPLE_CAMERA_ON
|
||||
|
||||
// #define CONFIG_MODULE_SAMPLE_XPORT_ON
|
||||
|
||||
#define CONFIG_MODULE_SAMPLE_UPGRADE_ON
|
||||
// #define CONFIG_MODULE_SAMPLE_UPGRADE_ON
|
||||
|
||||
// #define CONFIG_MODULE_SAMPLE_HMS_CUSTOMIZATION_ON
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@
|
||||
/* #define HAL_SRAM_MODULE_ENABLED */
|
||||
/* #define HAL_SDRAM_MODULE_ENABLED */
|
||||
/* #define HAL_HASH_MODULE_ENABLED */
|
||||
/* #define HAL_I2C_MODULE_ENABLED */
|
||||
#define HAL_I2C_MODULE_ENABLED
|
||||
/* #define HAL_I2S_MODULE_ENABLED */
|
||||
/* #define HAL_IWDG_MODULE_ENABLED */
|
||||
/* #define HAL_LTDC_MODULE_ENABLED */
|
||||
|
||||
@ -38,6 +38,18 @@
|
||||
/* Private constants ---------------------------------------------------------*/
|
||||
#define COMMUNICATION_UART_NUM UART_NUM_3
|
||||
|
||||
#define HAL_UART_USB_UART_FT232_VID (0x0403)
|
||||
#define HAL_UART_USB_UART_FT232_PID (0x6001)
|
||||
|
||||
#define HAL_UART_USB_UART_CP2102_VID (0x10C4)
|
||||
#define HAL_UART_USB_UART_CP2102_PID (0xEA60)
|
||||
|
||||
#define HAL_UART_USB_UART_VCOM_VID (0x2CA3)
|
||||
#define HAL_UART_USB_UART_VCOM_PID (0xF002)
|
||||
|
||||
#define HAL_UART_USB_UART_VID HAL_UART_USB_UART_FT232_VID
|
||||
#define HAL_UART_USB_UART_PID HAL_UART_USB_UART_FT232_PID
|
||||
|
||||
/* Private types -------------------------------------------------------------*/
|
||||
typedef enum {
|
||||
USER_UART_NUM0 = 0,
|
||||
@ -120,6 +132,20 @@ T_DjiReturnCode HalUart_GetStatus(E_DjiHalUartNum uartNum, T_DjiUartStatus *stat
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
T_DjiReturnCode HalUart_GetDeviceInfo(T_DjiHalUartDeviceInfo *deviceInfo)
|
||||
{
|
||||
|
||||
if (deviceInfo == NULL) {
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
deviceInfo->vid = HAL_UART_USB_UART_VID;
|
||||
deviceInfo->pid = HAL_UART_USB_UART_PID;
|
||||
|
||||
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Private functions definition-----------------------------------------------*/
|
||||
|
||||
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/
|
||||
|
||||
@ -30,7 +30,6 @@
|
||||
#define HAL_H
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
//#include "dji_platform.h"
|
||||
#include "stdint.h"
|
||||
#include "dji_platform.h"
|
||||
|
||||
@ -48,6 +47,7 @@ T_DjiReturnCode HalUart_DeInit(T_DjiUartHandle uartHandle);
|
||||
T_DjiReturnCode HalUart_WriteData(T_DjiUartHandle uartHandle, const uint8_t *buf, uint32_t len, uint32_t *realLen);
|
||||
T_DjiReturnCode HalUart_ReadData(T_DjiUartHandle uartHandle, uint8_t *buf, uint32_t len, uint32_t *realLen);
|
||||
T_DjiReturnCode HalUart_GetStatus(E_DjiHalUartNum uartNum, T_DjiUartStatus *status);
|
||||
T_DjiReturnCode HalUart_GetDeviceInfo(T_DjiHalUartDeviceInfo *deviceInfo);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -570,6 +570,11 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>hal_i2c.c</FileName>
|
||||
<FilePath>..\..\hal\hal_i2c.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>hal_uart.c</FileName>
|
||||
<FilePath>..\..\hal\hal_uart.c</FilePath>
|
||||
</File>
|
||||
@ -735,6 +740,16 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>stm32f4xx_hal_i2c.c</FileName>
|
||||
<FilePath>..\..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>stm32f4xx_hal_i2c_ex.c</FileName>
|
||||
<FilePath>..\..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_i2c_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>stm32f4xx_hal_pwr.c</FileName>
|
||||
<FilePath>..\..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c</FilePath>
|
||||
</File>
|
||||
@ -770,6 +785,11 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>stm32f4xx_ll_i2c.c</FileName>
|
||||
<FilePath>..\..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_i2c.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>1</FileType>
|
||||
<FileName>stm32f4xx_ll_usb.c</FileName>
|
||||
<FilePath>..\..\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_ll_usb.c</FilePath>
|
||||
</File>
|
||||
@ -915,6 +935,11 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>dji_cloud_api_by_websockt.h</FileName>
|
||||
<FilePath>..\..\..\..\..\..\..\psdk_lib\include\dji_cloud_api_by_websockt.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>dji_core.h</FileName>
|
||||
<FilePath>..\..\..\..\..\..\..\psdk_lib\include\dji_core.h</FilePath>
|
||||
</File>
|
||||
@ -935,6 +960,11 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>dji_fts.h</FileName>
|
||||
<FilePath>..\..\..\..\..\..\..\psdk_lib\include\dji_fts.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>dji_gimbal.h</FileName>
|
||||
<FilePath>..\..\..\..\..\..\..\psdk_lib\include\dji_gimbal.h</FilePath>
|
||||
</File>
|
||||
@ -990,6 +1020,16 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>dji_network_rtk.h</FileName>
|
||||
<FilePath>..\..\..\..\..\..\..\psdk_lib\include\dji_network_rtk.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>dji_open_ar.h</FileName>
|
||||
<FilePath>..\..\..\..\..\..\..\psdk_lib\include\dji_open_ar.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>dji_payload_camera.h</FileName>
|
||||
<FilePath>..\..\..\..\..\..\..\psdk_lib\include\dji_payload_camera.h</FilePath>
|
||||
</File>
|
||||
@ -1095,6 +1135,11 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>hal_i2c.h</FileName>
|
||||
<FilePath>..\..\hal\hal_i2c.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>hal_uart.h</FileName>
|
||||
<FilePath>..\..\hal\hal_uart.h</FilePath>
|
||||
</File>
|
||||
@ -1245,6 +1290,16 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>stm32f4xx_hal_i2c.h</FileName>
|
||||
<FilePath>..\..\drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>stm32f4xx_hal_i2c_ex.h</FileName>
|
||||
<FilePath>..\..\drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>stm32f4xx_hal_pwr.h</FileName>
|
||||
<FilePath>..\..\drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h</FilePath>
|
||||
</File>
|
||||
@ -1285,6 +1340,11 @@
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>stm32f4xx_ll_i2c.h</FileName>
|
||||
<FilePath>..\..\drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_i2c.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileType>5</FileType>
|
||||
<FileName>stm32f4xx_ll_usb.h</FileName>
|
||||
<FilePath>..\..\drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h</FilePath>
|
||||
</File>
|
||||
|
||||
Reference in New Issue
Block a user