2022-06-22 16:48:50 +08:00
/**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* @ file test_widget . c
* @ version V2 .0 .0
* @ date 2019 / 07 / 01
* @ brief
*
* @ copyright ( c ) 2018 - 2019 DJI . All rights reserved .
*
* All information contained herein is , and remains , the property of DJI .
* The intellectual and technical concepts contained herein are proprietary
* to DJI and may be covered by U . S . and foreign patents , patents in process ,
* and protected by trade secret or copyright law . Dissemination of this
* information , including but not limited to data and other proprietary
* material ( s ) incorporated within the information , in any form , is strictly
* prohibited without the express written consent of DJI .
*
* If you receive this source code without DJI ’ s authorization , you may not
* further disseminate the information , and you must immediately remove the
* source code and notify DJI of its removal . DJI reserves the right to pursue
* legal actions against you for any loss ( es ) or damage ( s ) caused by your
* failure to do so .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
/* Includes ------------------------------------------------------------------*/
# include "test_widget.h"
# include <psdk_widget.h>
# include <psdk_logger.h>
# include <utils/util_misc.h>
# include <psdk_platform.h>
# include <stdio.h>
//sbg
# include <stdlib.h>
# include <string.h>
# if !PSDK_ARCH_SYS_LINUX
# include "file_binary_array_list_en.h"
# endif
/* Private constants ---------------------------------------------------------*/
# define WIDGET_DIR_PATH_LEN_MAX (256)
# define WIDGET_TASK_STACK_SIZE (2048)
/* Private types -------------------------------------------------------------*/
/* Private functions declaration ---------------------------------------------*/
static void * PsdkTest_WidgetTask ( void * arg ) ;
static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue ( E_PsdkWidgetType widgetType , uint32_t index , int32_t value ,
void * userData ) ;
static T_PsdkReturnCode PsdkTestWidget_GetWidgetValue ( E_PsdkWidgetType widgetType , uint32_t index , int32_t * value ,
void * userData ) ;
static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue_StartRecord ( E_PsdkWidgetType widgetType , uint32_t index , int32_t value ,
void * userData ) ;
static void * PsdkTest_IrisRecordSystemChanged ( void * arg ) ;
/* Private values ------------------------------------------------------------*/
static T_PsdkTaskHandle s_widgetTestThread ;
static T_PsdkTaskHandle s_widgetSbgThread ;
static T_PsdkTaskHandle s_widgetXimeaThread ;
int SbgRecordCondition = 0 ;
static int s_sbgMagState = 0 ;
2023-05-24 16:27:43 +08:00
static int s_stateOfXimea = 100 ;
2022-06-22 16:48:50 +08:00
static int s_stateOfSbg = 0 ;
static int s_stateOfFile = 0 ;
2023-05-24 16:27:43 +08:00
char s_strUIMessage [ 100 ] = " " ;
2023-03-19 19:16:00 +08:00
static char * s_strStateOfSbg = " None " ;
static char * s_strSbgSatelliteCounter = " None " ;
2023-05-24 16:27:43 +08:00
static char * s_strSbgAccuracy = " None " ;
char XimeaFramerate [ 100 ] = " " ;
char XimeaExposeTime [ 100 ] = " " ;
char XimeaExposeMaxValue [ 100 ] = " " ;
2023-03-19 19:16:00 +08:00
static char * s_strSbgSolutionMode = " None " ;
static char * s_strStateOfXimea = " None " ;
char * s_strPitch = " None " ;
char * s_strRoll = " None " ;
char * s_strYaw = " None " ;
2022-06-22 16:48:50 +08:00
static int s_sockfd ;
static struct sockaddr_in s_server ;
# if PSDK_ARCH_SYS_LINUX
static bool s_isWidgetFileDirPathConfigured = false ;
static char s_widgetFileDirPath [ PSDK_FILE_PATH_SIZE_MAX ] = { 0 } ;
# endif
static const T_PsdkWidgetHandlerListItem s_widgetHandlerList [ ] = {
{ 0 , PSDK_WIDGET_TYPE_BUTTON , PsdkTestWidget_SetWidgetValue , PsdkTestWidget_GetWidgetValue , NULL } ,
{ 1 , PSDK_WIDGET_TYPE_BUTTON , PsdkTestWidget_SetWidgetValue , PsdkTestWidget_GetWidgetValue , NULL } ,
2022-12-06 14:55:42 +08:00
{ 2 , PSDK_WIDGET_TYPE_LIST , PsdkTestWidget_SetWidgetValue , PsdkTestWidget_GetWidgetValue , NULL } ,
{ 3 , PSDK_WIDGET_TYPE_SWITCH , PsdkTestWidget_SetWidgetValue , PsdkTestWidget_GetWidgetValue , NULL } ,
2022-06-22 16:48:50 +08:00
{ 4 , PSDK_WIDGET_TYPE_SCALE , PsdkTestWidget_SetWidgetValue , PsdkTestWidget_GetWidgetValue , NULL } ,
2022-12-06 14:55:42 +08:00
{ 5 , PSDK_WIDGET_TYPE_SWITCH , PsdkTestWidget_SetWidgetValue_StartRecord , PsdkTestWidget_GetWidgetValue , NULL } ,
{ 6 , PSDK_WIDGET_TYPE_INT_INPUT_BOX , PsdkTestWidget_SetWidgetValue_StartRecord , PsdkTestWidget_GetWidgetValue , NULL } ,
{ 7 , PSDK_WIDGET_TYPE_BUTTON , PsdkTestWidget_SetWidgetValue_StartRecord , PsdkTestWidget_GetWidgetValue , NULL } ,
2023-03-19 19:16:00 +08:00
{ 8 , PSDK_WIDGET_TYPE_INT_INPUT_BOX , PsdkTestWidget_SetWidgetValue_StartRecord , PsdkTestWidget_GetWidgetValue , NULL } ,
{ 9 , PSDK_WIDGET_TYPE_SWITCH , PsdkTestWidget_SetWidgetValue_StartRecord , PsdkTestWidget_GetWidgetValue , NULL } ,
{ 10 , PSDK_WIDGET_TYPE_LIST , PsdkTestWidget_SetWidgetValue_StartRecord , PsdkTestWidget_GetWidgetValue , NULL } , //PsdkTestWidget_SetWidgetValue
2022-06-22 16:48:50 +08:00
} ;
static char * s_widgetTypeNameArray [ ] = {
" Unknown " ,
" Button " ,
" Switch " ,
" Scale " ,
" List " ,
" Int input box "
} ;
static const uint32_t s_widgetHandlerListCount = sizeof ( s_widgetHandlerList ) / sizeof ( T_PsdkWidgetHandlerListItem ) ;
static int32_t s_widgetValueList [ sizeof ( s_widgetHandlerList ) / sizeof ( T_PsdkWidgetHandlerListItem ) ] = { 0 } ;
/* Exported functions definition ---------------------------------------------*/
T_PsdkReturnCode PsdkTest_WidgetInit ( void )
{
T_PsdkReturnCode psdkStat ;
//Step 1 : Init PSDK Widget
psdkStat = PsdkWidget_Init ( ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Psdk test widget init error, stat = 0x%08llX " , psdkStat ) ;
return psdkStat ;
}
# if PSDK_ARCH_SYS_LINUX
//Step 2 : Set UI Config (Linux environment)
//获取控件图像和UI配置文件所在文件夹
PsdkLogger_UserLogInfo ( " 验证是否定义了宏PSDK_ARCH_SYS_LINUX:是!-------------------------------------------------------------------------------------------------------------------------- " ) ;
char curFileDirPath [ WIDGET_DIR_PATH_LEN_MAX ] ;
char tempPath [ WIDGET_DIR_PATH_LEN_MAX ] ;
psdkStat = PsdkUserUtil_GetCurrentFileDirPath ( __FILE__ , WIDGET_DIR_PATH_LEN_MAX , curFileDirPath ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Get file current path error, stat = 0x%08llX " , psdkStat ) ;
return psdkStat ;
}
if ( s_isWidgetFileDirPathConfigured = = true ) {
snprintf ( tempPath , WIDGET_DIR_PATH_LEN_MAX , " %swidget_file/en_big_screen " , s_widgetFileDirPath ) ;
} else {
snprintf ( tempPath , WIDGET_DIR_PATH_LEN_MAX , " %swidget_file/en_big_screen " , curFileDirPath ) ;
}
//set default ui config path
psdkStat = PsdkWidget_RegDefaultUiConfigByDirPath ( tempPath ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Add default widget ui config error, stat = 0x%08llX " , psdkStat ) ;
return psdkStat ;
}
//set ui config for English language
//设置系统语言为英文时控件配置文件的路径
psdkStat = PsdkWidget_RegUiConfigByDirPath ( PSDK_AIRCRAFT_INFO_MOBILE_APP_LANGUAGE_ENGLISH ,
PSDK_AIRCRAFT_INFO_MOBILE_APP_SCREEN_TYPE_BIG_SCREEN ,
tempPath ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Add widget ui config error, stat = 0x%08llX " , psdkStat ) ;
return psdkStat ;
}
//set ui config for Chinese language
if ( s_isWidgetFileDirPathConfigured = = true ) {
snprintf ( tempPath , WIDGET_DIR_PATH_LEN_MAX , " %swidget_file/cn_big_screen " , s_widgetFileDirPath ) ;
} else {
snprintf ( tempPath , WIDGET_DIR_PATH_LEN_MAX , " %swidget_file/cn_big_screen " , curFileDirPath ) ;
}
psdkStat = PsdkWidget_RegUiConfigByDirPath ( PSDK_AIRCRAFT_INFO_MOBILE_APP_LANGUAGE_CHINESE ,
PSDK_AIRCRAFT_INFO_MOBILE_APP_SCREEN_TYPE_BIG_SCREEN ,
tempPath ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Add widget ui config error, stat = 0x%08llX " , psdkStat ) ;
return psdkStat ;
}
# else
//Step 2 : Set UI Config (RTOS environment)
T_PsdkWidgetBinaryArrayConfig enWidgetBinaryArrayConfig = {
. binaryArrayCount = g_EnBinaryArrayCount ,
. fileBinaryArrayList = g_EnFileBinaryArrayList
} ;
//set default ui config
psdkStat = PsdkWidget_RegDefaultUiConfigByBinaryArray ( & enWidgetBinaryArrayConfig ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Add default widget ui config error, stat = 0x%08llX " , psdkStat ) ;
return psdkStat ;
}
# endif
//Step 3 : Set widget handler list
psdkStat = PsdkWidget_RegHandlerList ( s_widgetHandlerList , s_widgetHandlerListCount ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Set widget handler list error, stat = 0x%08llX " , psdkStat ) ;
return psdkStat ;
}
//Step 4 : Run widget api sample task
if ( PsdkOsal_TaskCreate ( & s_widgetTestThread , PsdkTest_WidgetTask , " user_widget_task " , WIDGET_TASK_STACK_SIZE ,
NULL ) ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Psdk widget test task create error. " ) ;
return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN ;
}
//Step 5 : Run ximea task
if ( PsdkOsal_TaskCreate ( & s_widgetXimeaThread , PsdkTest_IrisRecordSystemChanged , " ximea " , WIDGET_TASK_STACK_SIZE ,
NULL ) ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Psdk widget test task(ximea) create error. " ) ;
return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN ;
}
/* tc-----------------------------------------------*/
struct hostent * he ;
he = gethostbyname ( " 127.0.0.1 " ) ;
s_sockfd = socket ( AF_INET , SOCK_DGRAM , 0 ) ;
bzero ( & s_server , sizeof ( s_server ) ) ;
s_server . sin_family = AF_INET ;
s_server . sin_port = htons ( PORT ) ;
s_server . sin_addr = * ( ( struct in_addr * ) he - > h_addr ) ;
/* tc-----------------------------------------------*/
return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ;
}
# if PSDK_ARCH_SYS_LINUX
T_PsdkReturnCode PsdkTest_WidgetSetConfigFilePath ( const char * path )
{
memset ( s_widgetFileDirPath , 0 , sizeof ( s_widgetFileDirPath ) ) ;
memcpy ( s_widgetFileDirPath , path , USER_UTIL_MIN ( strlen ( path ) , sizeof ( s_widgetFileDirPath ) - 1 ) ) ;
s_isWidgetFileDirPathConfigured = true ;
return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ;
}
# endif
# 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-----------------------------------------------*/
//在DJI pilot的浮窗上显示系统时间
2023-05-24 16:27:43 +08:00
int messageTimeCounter = 0 ;
int messageTimespan = 10 ;
int XimeaAirborneSystemSurvival_Counter = 1 ;
int ximeaAirborneSystemSurvivalTime = 0 ;
int ximeaAirborneSystemSurvivalTime_Temp = 0 ;
2022-06-22 16:48:50 +08:00
static void * PsdkTest_WidgetTask ( void * arg )
{
char message [ PSDK_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN ] ;
uint32_t sysTimeMs = 0 ;
T_PsdkReturnCode psdkStat ;
USER_UTIL_UNUSED ( arg ) ;
2023-05-24 16:27:43 +08:00
2022-06-22 16:48:50 +08:00
while ( 1 ) {
psdkStat = PsdkOsal_GetTimeMs ( & sysTimeMs ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Get system time ms error, stat = 0x%08llX " , psdkStat ) ;
}
//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);
2023-05-24 16:27:43 +08:00
snprintf ( message , PSDK_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN , " %s \n 相机: %s; 惯导: %s; \n 卫星: %s; 精度: %s; \n 帧率: %s;曝光: %s;max: %s; \n P: %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 ) ;
2022-06-22 16:48:50 +08:00
psdkStat = PsdkWidgetFloatingWindow_ShowMessage ( message ) ;
if ( psdkStat ! = PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ) {
PsdkLogger_UserLogError ( " Floating window show message error, stat = 0x%08llX " , psdkStat ) ;
}
2023-05-24 16:27:43 +08:00
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++;
// }
2022-06-22 16:48:50 +08:00
PsdkOsal_TaskSleepMs ( 1000 ) ;
}
}
static void * PsdkTest_IrisRecordSystemChanged ( void * arg ) //
{
// FILE * fp;
// char buffer[80];
// fp = popen("/home/iris-xport/cpp_qtcreator/ximeaImageRecorder-Release/ximeaImageRecorder", "r");ss
// fgets(buffer, sizeof(buffer), fp);
// printf("%s", buffer);
// pclose(fp);
int sockfd ;
struct sockaddr_in server ;
struct sockaddr_in client ;
socklen_t addrlen ;
int num ;
char buf [ MAXDATASIZE ] ;
if ( ( sockfd = socket ( AF_INET , SOCK_DGRAM , 0 ) ) = = - 1 )
{
perror ( " Creatingsocket failed. " ) ;
}
bzero ( & server , sizeof ( server ) ) ;
server . sin_family = AF_INET ;
server . sin_port = htons ( PORT + 1 ) ;
server . sin_addr . s_addr = htonl ( INADDR_ANY ) ;
if ( bind ( sockfd , ( struct sockaddr * ) & server , sizeof ( server ) ) = = - 1 )
{
perror ( " Bind()error. " ) ;
}
addrlen = sizeof ( client ) ;
while ( 1 )
{
//printf("PsdkTest_IrisRecordSystemChanged: record system status change! 8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\n");
num = recvfrom ( sockfd , buf , MAXDATASIZE , 0 , ( struct sockaddr * ) & client , & addrlen ) ;
if ( num < 0 )
{
perror ( " recvfrom() error \n " ) ;
continue ;
}
buf [ num ] = ' \0 ' ;
printf ( " You got a message (%s) from client. \n " , buf ) ;
//printf("You got a message (%s%) from client.\nIt's ip is%s, port is %d.\n",buf,inet_ntoa(client.sin_addr),htons(client.sin_port));
2022-12-26 17:20:31 +08:00
char * result [ 3 ] ;
2022-06-22 16:48:50 +08:00
result [ 0 ] = strtok ( buf , " , " ) ;
result [ 1 ] = strtok ( NULL , " , " ) ;
2022-12-26 17:20:31 +08:00
result [ 2 ] = strtok ( NULL , " , " ) ;
// printf("result[0]: %s\n", result[0]);
// printf("result[1]: %s\n\n", result[1]);
// printf("result[2]: %s\n\n", result[2]);
2022-06-22 16:48:50 +08:00
if ( strcmp ( result [ 0 ] , " sbg " ) = = 0 )
{
s_stateOfSbg = atoi ( result [ 1 ] ) ;
printf ( " sbg的状态为: %d \n \n " , atoi ( result [ 1 ] ) ) ;
switch ( s_stateOfSbg )
{
case 0 :
s_strStateOfSbg = " 未打开 " ;
break ;
case 1 :
s_strStateOfSbg = " 波特率设置失败 " ;
break ;
case 2 :
s_strStateOfSbg = " 打开成功 " ;
break ;
case 3 :
s_strStateOfSbg = " 采集中 " ;
break ;
default :
break ;
}
}
else if ( strcmp ( result [ 0 ] , " Accuracy " ) = = 0 )
{
2022-12-26 17:20:31 +08:00
// printf("惯导定位精度为: %s\n\n", result[1]);
2022-06-22 16:48:50 +08:00
s_strSbgAccuracy = result [ 1 ] ;
2022-12-26 17:20:31 +08:00
s_strSbgSatelliteCounter = result [ 2 ] ;
2022-06-22 16:48:50 +08:00
2023-05-24 16:27:43 +08:00
ximeaAirborneSystemSurvivalTime + + ;
2022-06-22 16:48:50 +08:00
// s_sbgMagState = atoi(result[1]);
// switch (s_sbgMagState)
// {
// case 0:
// s_strSbgAccuracy="false";
// break;
// case 1:
// s_strSbgAccuracy="true";
// break;
// default:
// break;
// }
}
else if ( strcmp ( result [ 0 ] , " SolutionMode " ) = = 0 )
{
2022-11-21 12:14:27 +08:00
// s_sbgMagState = atoi(result[1]);
//
// switch (s_sbgMagState)
// {
// case 0:
// s_strSbgSolutionMode="UNINITIALIZED";
// break;
// case 1:
// s_strSbgSolutionMode="VERTICAL_GYRO";
// break;
// case 2:
// s_strSbgSolutionMode="AHRS";
// break;
// case 3:
// s_strSbgSolutionMode="NAV_VELOCITY";
// break;
// case 4:
// s_strSbgSolutionMode="NAV_POSITION";
// break;
//
// default:
// break;
// }
2022-06-22 16:48:50 +08:00
}
else if ( strcmp ( result [ 0 ] , " ximea " ) = = 0 )
{
s_stateOfXimea = atoi ( result [ 1 ] ) ;
printf ( " ximea的状态为: %d \n \n " , atoi ( result [ 1 ] ) ) ;
2022-06-22 19:59:47 +08:00
switch ( s_stateOfXimea ) //0-61: ximea官方错误代码; 99: 发生的ximea官方错误代码, 没有处理; 100: 未打开; 101: 打开; 102: 设置帧率; 103: 自动曝光; 104: 正在采集;
2022-06-22 16:48:50 +08:00
{
2022-06-22 19:59:47 +08:00
case 57 :
s_strStateOfXimea = " 相机被占用 " ;
break ;
case 99 :
s_strStateOfXimea = " 未处理错误,错误码见日志 " ;
break ;
case 100 :
2022-06-22 16:48:50 +08:00
s_strStateOfXimea = " 未打开 " ;
break ;
2022-06-22 19:59:47 +08:00
case 101 :
2022-06-22 16:48:50 +08:00
s_strStateOfXimea = " 打开成功 " ;
2023-05-24 16:27:43 +08:00
strcpy ( s_strUIMessage , " 系统打开成功! " ) ;
messageTimeCounter = 0 ;
messageTimespan = 20 ;
2022-06-22 16:48:50 +08:00
break ;
2022-06-22 19:59:47 +08:00
case 102 :
2023-05-24 16:27:43 +08:00
s_strStateOfXimea = " 帧率已设置 " ;
2022-06-22 16:48:50 +08:00
break ;
2022-06-22 19:59:47 +08:00
case 103 :
2023-05-24 16:27:43 +08:00
s_strStateOfXimea = " 曝光完成 " ;
2022-06-22 16:48:50 +08:00
break ;
2022-06-22 19:59:47 +08:00
case 104 :
2022-06-22 16:48:50 +08:00
s_strStateOfXimea = " 正在采集 " ;
break ;
default :
break ;
}
}
2023-05-24 16:27:43 +08:00
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 ;
}
2022-06-22 16:48:50 +08:00
}
}
# ifndef __CC_ARM
# pragma GCC diagnostic pop
# endif
static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue ( E_PsdkWidgetType widgetType , uint32_t index , int32_t value ,
void * userData )
{
USER_UTIL_UNUSED ( userData ) ;
PsdkLogger_UserLogInfo ( " Set widget value, widgetType = %s, widgetIndex = %d ,widgetValue = %d " ,
s_widgetTypeNameArray [ widgetType ] , index , value ) ;
s_widgetValueList [ index ] = value ;
return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ;
}
static T_PsdkReturnCode PsdkTestWidget_GetWidgetValue ( E_PsdkWidgetType widgetType , uint32_t index , int32_t * value ,
void * userData )
{
USER_UTIL_UNUSED ( userData ) ;
USER_UTIL_UNUSED ( widgetType ) ;
* value = s_widgetValueList [ index ] ;
return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ;
}
2023-05-24 16:27:43 +08:00
int frameRateGlobel = 0 ;
2023-06-11 18:22:00 +08:00
int systemON_Control = 0 ;
2022-06-22 16:48:50 +08:00
static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue_StartRecord ( E_PsdkWidgetType widgetType , uint32_t index , int32_t value ,
void * userData )
{
USER_UTIL_UNUSED ( userData ) ;
PsdkLogger_UserLogInfo ( " Set widget value, widgetType = %s, widgetIndex = %d ,widgetValue = %d " ,
s_widgetTypeNameArray [ widgetType ] , index , value ) ;
s_widgetValueList [ index ] = value ;
switch ( index )
{
2022-12-06 14:55:42 +08:00
case 5 : //系统启动关闭
2022-06-22 16:48:50 +08:00
if ( value = = 0 ) //系统关闭
{
char * command = " 2 " ;
sendto ( s_sockfd , command , strlen ( command ) , 0 , ( struct sockaddr * ) & s_server , sizeof ( s_server ) ) ;
}
else if ( value = = 1 ) //系统启动
{
2023-06-11 18:22:00 +08:00
systemON_Control + + ;
2023-05-24 16:27:43 +08:00
2023-06-11 18:22:00 +08:00
if ( systemON_Control > = 2 )
{
strcpy ( s_strUIMessage , " 请重启300TC! " ) ;
messageTimeCounter = 0 ;
messageTimespan = 1000 ;
}
else
{
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 ) ) ;
}
2022-06-22 16:48:50 +08:00
}
break ;
2022-12-06 14:55:42 +08:00
case 6 : //设置帧率
2022-06-22 16:48:50 +08:00
{
2023-05-24 16:27:43 +08:00
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 ;
2022-12-06 14:55:42 +08:00
char command [ 50 ] = " 5, " ;
char framerate [ 20 ] ;
sprintf ( framerate , " %d " , value ) ;
strcat ( command , framerate ) ;
sendto ( s_sockfd , command , strlen ( command ) , 0 , ( struct sockaddr * ) & s_server , sizeof ( s_server ) ) ;
break ;
2022-06-22 16:48:50 +08:00
}
2022-12-06 14:55:42 +08:00
case 7 : //自动曝光
2022-06-22 16:48:50 +08:00
if ( value = = 0 )
{
;
}
else if ( value = = 1 )
{
2023-05-24 16:27:43 +08:00
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 ;
2022-06-22 16:48:50 +08:00
char * command = " 6 " ;
sendto ( s_sockfd , command , strlen ( command ) , 0 , ( struct sockaddr * ) & s_server , sizeof ( s_server ) ) ;
}
break ;
2023-03-19 19:16:00 +08:00
case 8 : //手动设置曝光时间
{
2023-05-24 16:27:43 +08:00
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 ;
}
//
2023-03-19 19:16:00 +08:00
char command [ 50 ] = " 7, " ;
char exposureTime [ 20 ] ;
2023-05-24 16:27:43 +08:00
sprintf ( exposureTime , " %d " , ( value ) ) ;
2023-03-19 19:16:00 +08:00
strcat ( command , exposureTime ) ;
sendto ( s_sockfd , command , strlen ( command ) , 0 , ( struct sockaddr * ) & s_server , sizeof ( s_server ) ) ;
2023-05-24 16:27:43 +08:00
2023-03-19 19:16:00 +08:00
break ;
}
case 9 :
2022-06-22 16:48:50 +08:00
if ( value = = 0 ) //停止采集
{
char * command = " 4 " ;
sendto ( s_sockfd , command , strlen ( command ) , 0 , ( struct sockaddr * ) & s_server , sizeof ( s_server ) ) ;
}
else if ( value = = 1 ) //开始采集
{
2023-05-24 16:27:43 +08:00
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 ;
}
2022-06-22 16:48:50 +08:00
char * command = " 3 " ;
sendto ( s_sockfd , command , strlen ( command ) , 0 , ( struct sockaddr * ) & s_server , sizeof ( s_server ) ) ;
}
break ;
2023-03-19 19:16:00 +08:00
case 10 :
if ( value = = 0 ) //等待指令
2022-06-22 16:48:50 +08:00
{
}
2023-06-11 19:49:14 +08:00
if ( value = = 1 )
2022-06-22 16:48:50 +08:00
{
system ( " reboot " ) ;
}
2023-06-11 19:49:14 +08:00
else if ( value = = 2 )
2022-06-22 16:48:50 +08:00
{
system ( " shutdown now " ) ;
}
2023-06-11 19:49:14 +08:00
else if ( value = = 3 )
2023-06-11 18:22:00 +08:00
{
2023-06-11 19:06:04 +08:00
system ( " /home/300tc/projects/udpClient/udpClient 127.0.0.1 9,1 " ) ;
2023-06-11 18:22:00 +08:00
}
2023-06-11 19:49:14 +08:00
else if ( value = = 4 )
2023-06-11 18:22:00 +08:00
{
2023-06-11 19:06:04 +08:00
system ( " /home/300tc/projects/udpClient/udpClient 127.0.0.1 9,0 " ) ;
2023-06-11 18:22:00 +08:00
}
2023-06-11 19:49:14 +08:00
else if ( value = = 5 )
{
strcpy ( s_strUIMessage , " 系统正在更新,稍后会自动重启! " ) ;
messageTimeCounter = 0 ;
messageTimespan = 10000 ;
system ( " /home/pi/tc_ShellScripts/update0.sh &> /media/nvme/300TC/update/log " ) ;
}
2022-06-22 16:48:50 +08:00
break ;
default :
break ;
}
return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS ;
}
/****************** (C) COPYRIGHT DJI Innovations *****END OF FILE****/