From f21576ea817dfad0ad2d295b37aa60e7f052bad9 Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Wed, 24 May 2023 16:27:43 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=A7=A3=E5=86=B3=E9=A3=9E=E6=9C=BA=E5=8A=A0?= =?UTF-8?q?=E9=80=9F=E5=90=8E=EF=BC=8C=E4=BA=91=E5=8F=B0=E4=BF=AF=E4=BB=B0?= =?UTF-8?q?=E8=A7=92=E5=BA=A6=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98=EF=BC=9B?= =?UTF-8?q?=202.=E5=B0=86=E6=9B=9D=E5=85=89=E6=97=B6=E9=97=B4=E5=92=8C?= =?UTF-8?q?=E6=9B=9D=E5=85=89=E6=97=B6=E9=82=A3=E4=B8=80=E5=B8=A7=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84=E6=9C=80=E5=A4=A7=E5=80=BC=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=9C=A8=E6=B5=AE=E7=AA=97=E4=B8=8A=EF=BC=9B=203.=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=B5=AE=E7=AA=97=E6=98=BE=E7=A4=BA=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E5=86=85=E5=AE=B9=E5=AF=86=E5=BA=A6=E6=8F=90?= =?UTF-8?q?=E9=AB=98=EF=BC=8C=E4=B8=8D=E9=9C=80=E8=A6=81=E4=B8=8B=E6=BB=91?= =?UTF-8?q?=E6=B5=AE=E7=AA=97=E5=B0=B1=E8=83=BD=E7=9C=8B=E8=A7=81=E6=89=80?= =?UTF-8?q?=E6=9C=89=E4=BF=A1=E6=81=AF=EF=BC=9B=204.=E6=B5=AE=E7=AA=97?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E8=A1=8C=E4=B8=BA=E6=BB=9A=E5=8A=A8=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=8C=BA=E5=9F=9F=EF=BC=9B=205.=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=EF=BC=9B=206.=E5=88=A4=E6=96=ADximeaAirborne?= =?UTF-8?q?System=E7=B3=BB=E7=BB=9F=E6=98=AF=E5=90=A6=E5=AD=98=E6=B4=BB?= =?UTF-8?q?=EF=BC=9A=E6=B5=8B=E5=87=BA=E6=9C=89bug=EF=BC=8C=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81=E5=B7=B2=E7=BB=8F=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E6=8E=89=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../camera_media_emu/test_payload_cam_media.c | 10 +- sample/api_sample/widget/test_widget.c | 215 +++++++++++++++++- sample/api_sample/xport/test_xport.c | 4 +- 3 files changed, 215 insertions(+), 14 deletions(-) diff --git a/sample/api_sample/camera_media_emu/test_payload_cam_media.c b/sample/api_sample/camera_media_emu/test_payload_cam_media.c index a747e7e..eff49b0 100644 --- a/sample/api_sample/camera_media_emu/test_payload_cam_media.c +++ b/sample/api_sample/camera_media_emu/test_payload_cam_media.c @@ -201,11 +201,11 @@ T_PsdkReturnCode PsdkTest_CameraMediaInit(void) } //创建线程执行用户自定义函数!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - if (PsdkOsal_TaskCreate(&s_userSendVideoThread, UserCameraMedia_SendVideoTask, "user_camera_media_task", 2048, - NULL) != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { - PsdkLogger_UserLogError("user send video task create error."); - return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; - } +// if (PsdkOsal_TaskCreate(&s_userSendVideoThread, UserCameraMedia_SendVideoTask, "user_camera_media_task", 2048, +// NULL) != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { +// PsdkLogger_UserLogError("user send video task create error."); +// return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; +// } return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS; } diff --git a/sample/api_sample/widget/test_widget.c b/sample/api_sample/widget/test_widget.c index cf5aab2..f44fa8a 100644 --- a/sample/api_sample/widget/test_widget.c +++ b/sample/api_sample/widget/test_widget.c @@ -73,13 +73,17 @@ static T_PsdkTaskHandle s_widgetXimeaThread; int SbgRecordCondition=0; static int s_sbgMagState=0; -static int s_stateOfXimea=0; +static int s_stateOfXimea=100; static int s_stateOfSbg=0; static int s_stateOfFile=0; +char s_strUIMessage[100]=" "; static char * s_strStateOfSbg="None"; -static char * s_strSbgAccuracy="None"; static char * s_strSbgSatelliteCounter="None"; +static char * s_strSbgAccuracy="None"; +char XimeaFramerate[100]=" "; +char XimeaExposeTime[100]=" "; +char XimeaExposeMaxValue[100]=" "; static char * s_strSbgSolutionMode="None"; static char * s_strStateOfXimea="None"; @@ -258,6 +262,12 @@ T_PsdkReturnCode PsdkTest_WidgetSetConfigFilePath(const char *path) /* Private functions definition-----------------------------------------------*/ //在DJI pilot的浮窗上显示系统时间 +int messageTimeCounter = 0; +int messageTimespan = 10; + +int XimeaAirborneSystemSurvival_Counter = 1; +int ximeaAirborneSystemSurvivalTime = 0; +int ximeaAirborneSystemSurvivalTime_Temp = 0; static void *PsdkTest_WidgetTask(void *arg) { char message[PSDK_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN]; @@ -266,6 +276,7 @@ static void *PsdkTest_WidgetTask(void *arg) USER_UTIL_UNUSED(arg); + while (1) { psdkStat = PsdkOsal_GetTimeMs(&sysTimeMs); if (psdkStat != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { @@ -274,14 +285,40 @@ static void *PsdkTest_WidgetTask(void *arg) //snprintf(message, PSDK_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN, "System time: %u ms;\nMAG: %d;\nIMAGER: %d;\nIMU: %d;\nFile: %d;\n", sysTimeMs, s_sbgMagState, s_stateOfXimea, s_stateOfSbg, s_stateOfFile); - snprintf(message, PSDK_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN, "System time: %u ms;\n光谱仪: %s;\n惯导: %s;\n精度: %s;\n卫星: %s;\npitch: %s;\nroll: %s;\nyaw: %s;\n", - sysTimeMs, s_strStateOfXimea, s_strStateOfSbg, s_strSbgAccuracy, s_strSbgSatelliteCounter, s_strPitch, s_strRoll, s_strYaw); + snprintf(message, PSDK_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN, "%s\n相机: %s; 惯导: %s;\n卫星: %s; 精度: %s;\n帧率: %s;曝光: %s;max: %s;\nP: %s; R: %s; Y: %s;\n", + s_strUIMessage, s_strStateOfXimea, s_strStateOfSbg, s_strSbgSatelliteCounter, s_strSbgAccuracy, XimeaFramerate, XimeaExposeTime, XimeaExposeMaxValue, s_strPitch, s_strRoll, s_strYaw); psdkStat = PsdkWidgetFloatingWindow_ShowMessage(message); if (psdkStat != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { PsdkLogger_UserLogError("Floating window show message error, stat = 0x%08llX", psdkStat); } + messageTimeCounter++; + + if (messageTimeCounter % messageTimespan == 0) + { + strcpy(s_strUIMessage," "); + } + + //判断ximeaAirborneSystem系统是否存活 +// if(ximeaAirborneSystemSurvivalTime > 10) +// { +// if (XimeaAirborneSystemSurvival_Counter % 10 ==0) +// { +// if (ximeaAirborneSystemSurvivalTime - ximeaAirborneSystemSurvivalTime_Temp == 0) +// { +// strcpy(s_strUIMessage,"采集系统无响应,请重启!"); +// messageTimeCounter = 0; +// messageTimespan = 10; +// } +// +// XimeaAirborneSystemSurvival_Counter = 1; +// ximeaAirborneSystemSurvivalTime_Temp = ximeaAirborneSystemSurvivalTime; +// } +// +// XimeaAirborneSystemSurvival_Counter++; +// } + PsdkOsal_TaskSleepMs(1000); } } @@ -378,6 +415,8 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)// s_strSbgAccuracy=result[1]; s_strSbgSatelliteCounter=result[2]; + ximeaAirborneSystemSurvivalTime++; + // s_sbgMagState = atoi(result[1]); @@ -439,12 +478,17 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)// break; case 101: s_strStateOfXimea="打开成功"; + + strcpy(s_strUIMessage,"系统打开成功!"); + messageTimeCounter = 0; + messageTimespan = 20; + break; case 102: - s_strStateOfXimea="帧率设置完成"; + s_strStateOfXimea="帧率已设置"; break; case 103: - s_strStateOfXimea="设置曝光完成"; + s_strStateOfXimea="曝光完成"; break; case 104: s_strStateOfXimea="正在采集"; @@ -454,6 +498,25 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)// break; } } + else if (strcmp(result[0],"XimeaAutoExpose") == 0) + { + strcpy(XimeaExposeMaxValue, result[1]); + strcpy(XimeaExposeTime, result[2]); + + strcpy(s_strUIMessage,"曝光时间设置成功!"); + messageTimeCounter = 0; + messageTimespan = 10; + } + else if (strcmp(result[0],"XimeaFrameRate") == 0) + { + int tmp = atoi(result[1]); + sprintf(XimeaFramerate,"%d",tmp); +// strcpy(XimeaFramerate,result[1]); + + strcpy(s_strUIMessage,"帧率设置成功!"); + messageTimeCounter = 0; + messageTimespan = 10; + } } } @@ -485,6 +548,7 @@ static T_PsdkReturnCode PsdkTestWidget_GetWidgetValue(E_PsdkWidgetType widgetTyp return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS; } +int frameRateGlobel = 0; static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_PsdkWidgetType widgetType, uint32_t index, int32_t value, void *userData) { @@ -504,12 +568,55 @@ static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_PsdkWidgetTy } else if (value==1)//系统启动 { + strcpy(s_strUIMessage,"系统启动中,超过60s未成功,请重新启动系统!"); + messageTimeCounter = 0; + messageTimespan = 1000; + char* command = "1"; sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server)); } break; case 6://设置帧率 { + if (s_stateOfXimea < 101) + { + strcpy(s_strUIMessage,"请先启动系统!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + else if (s_stateOfXimea > 103) + { + strcpy(s_strUIMessage,"相机采集中,此操作无效!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + + + // 控制帧率范围 + if(value > 150) + { + strcpy(s_strUIMessage,"帧率不可超过150!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + else if(value == 0) + { + strcpy(s_strUIMessage,"帧率无效!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + + // + frameRateGlobel = value; + char command[50] = "5,"; char framerate[20]; sprintf(framerate,"%d",value); @@ -524,17 +631,86 @@ static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_PsdkWidgetTy } else if (value==1) { + if (s_stateOfXimea < 101) + { + strcpy(s_strUIMessage,"请先启动系统!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + else if (s_stateOfXimea > 103) + { + strcpy(s_strUIMessage,"相机采集中,此操作无效!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + + strcpy(s_strUIMessage,"正在自动曝光,请稍等!"); + messageTimeCounter = 0; + messageTimespan = 1000; + char* command = "6"; sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server)); } break; case 8://手动设置曝光时间 { + if (s_stateOfXimea < 101) + { + strcpy(s_strUIMessage,"请先启动系统!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + else if (s_stateOfXimea > 103) + { + strcpy(s_strUIMessage,"相机采集中,此操作无效!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + + //曝光时间有效性判断 + if(frameRateGlobel == 0) + { + strcpy(s_strUIMessage,"请先设置帧率!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + + float maxExposureTime = 1 / (float)frameRateGlobel * 1000;//单位是ms + + if(value > maxExposureTime) + { + strcpy(s_strUIMessage,"曝光时间超过上限,无效!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + else if(value == 0) + { + strcpy(s_strUIMessage,"曝光时间无效!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + + // char command[50] = "7,"; char exposureTime[20]; - sprintf(exposureTime,"%d",value); + sprintf(exposureTime,"%d",(value)); strcat(command,exposureTime); sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server)); + break; } case 9: @@ -545,6 +721,31 @@ static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_PsdkWidgetTy } else if (value==1)//开始采集 { + if (s_stateOfXimea < 101) + { + strcpy(s_strUIMessage,"请先启动系统!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + else if (s_stateOfXimea == 101) + { + strcpy(s_strUIMessage,"请先设置帧率!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + else if (s_stateOfXimea == 102) + { + strcpy(s_strUIMessage,"请先设置曝光时间!"); + messageTimeCounter = 0; + messageTimespan = 10; + + break; + } + char* command = "3"; sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server)); } diff --git a/sample/api_sample/xport/test_xport.c b/sample/api_sample/xport/test_xport.c index 5b6eed7..e346ea7 100644 --- a/sample/api_sample/xport/test_xport.c +++ b/sample/api_sample/xport/test_xport.c @@ -99,7 +99,7 @@ T_PsdkReturnCode PsdkTest_XPortInit(void) //设置俯仰轴关节角(JOINT_ANGLE)限位 limitAngle.upperLimit = 300; - limitAngle.lowerLimit = -1000; + limitAngle.lowerLimit = -1200; psdkStat = PsdkXPort_SetLimitAngleSync(PSDK_XPORT_LIMIT_ANGLE_CATEGORY_PITCH_JOINT_ANGLE, limitAngle); if (psdkStat != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { PsdkLogger_UserLogError("set pitch joint angle limit angle for XPort error: 0x%08llX.", psdkStat); @@ -107,7 +107,7 @@ T_PsdkReturnCode PsdkTest_XPortInit(void) } //设置俯仰轴欧拉角(EULER_ANGLE)限位 limitAngle.upperLimit = 300; - limitAngle.lowerLimit = -800; + limitAngle.lowerLimit = -1200; psdkStat = PsdkXPort_SetLimitAngleSync(PSDK_XPORT_LIMIT_ANGLE_CATEGORY_PITCH_EULER_ANGLE, limitAngle); if (psdkStat != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { PsdkLogger_UserLogError("set pitch euler angle limit angle for XPort error: 0x%08llX.", psdkStat);