modify:

1. 删掉文本输入框,hz改为赫兹;
2. 曝光时间超过最大值后,设置为最大值:psdk取消曝光时间检测,让ximeaAirborneSystem设置曝光时间的最大值;
5. bin修改后,自动杀掉程序;
3. 去掉采集流程控制:高光谱采集提示请先设置曝光时间;
4. 去掉帧率完成和曝光完成,只保留连接成功;
This commit is contained in:
tangchao0503
2023-09-01 15:27:45 +08:00
parent 47153346cd
commit 23153193a6
3 changed files with 77 additions and 261 deletions

View File

@ -54,6 +54,7 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
static void *PsdkTest_IrisRecordSystemChanged(void *arg); static void *PsdkTest_IrisRecordSystemChanged(void *arg);
static void extractSpectralBinAndBandnumber(bool isModifyBin); static void extractSpectralBinAndBandnumber(bool isModifyBin);
static void closeXimeaRecordSystem();
/* Private values ------------------------------------------------------------*/ /* Private values ------------------------------------------------------------*/
static T_DjiTaskHandle s_widgetTestThread; static T_DjiTaskHandle s_widgetTestThread;
@ -84,6 +85,7 @@ static char * s_strSbgAccuracy=" ";
char XimeaFramerate[100]=" "; char XimeaFramerate[100]=" ";
int framerate = 0; int framerate = 0;
char XimeaExposeTime[100]=" "; char XimeaExposeTime[100]=" ";
int exposeTimeInt = 0;
char XimeaExposeMaxValue[100]=" "; char XimeaExposeMaxValue[100]=" ";
char s_spectralBin[100]=" "; char s_spectralBin[100]=" ";
int spectralBinInt = 0; int spectralBinInt = 0;
@ -285,18 +287,24 @@ static void *DjiTest_WidgetTask(void *arg)
T_DjiReturnCode djiStat; T_DjiReturnCode djiStat;
T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler(); T_DjiOsalHandler *osalHandler = DjiPlatform_GetOsalHandler();
extractSpectralBinAndBandnumber(false);
USER_UTIL_UNUSED(arg); USER_UTIL_UNUSED(arg);
while (1) { while (1)
{
s_widgetValueList[6] = framerate;
s_widgetValueList[8] = exposeTimeInt;
if (systemON_Control == 4)
{
s_widgetValueList[5] = 0;
}
djiStat = osalHandler->GetTimeMs(&sysTimeMs); djiStat = osalHandler->GetTimeMs(&sysTimeMs);
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Get system time ms error, stat = 0x%08llX", djiStat); USER_LOG_ERROR("Get system time ms error, stat = 0x%08llX", djiStat);
} }
#ifndef USER_FIRMWARE_MAJOR_VERSION #ifndef USER_FIRMWARE_MAJOR_VERSION
snprintf(message, DJI_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光谱bin: %s;\n时间: %s min; 空间: %s G;\n", snprintf(message, DJI_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光谱bin: %s \n时间: %s min 空间: %s G\n",
s_strUIMessage, s_strStateOfXimea, s_strStateOfSbg, s_strSbgSatelliteCounter, s_strSbgSolutionMode, XimeaFramerate, XimeaExposeTime, XimeaExposeMaxValue, s_strPitch, s_strRoll, s_strYaw, s_spectralBin, s_remainingTime, s_remainingSpace); s_strUIMessage, s_strStateOfXimea, s_strStateOfSbg, s_strSbgSatelliteCounter, s_strSbgSolutionMode, XimeaFramerate, XimeaExposeTime, XimeaExposeMaxValue, s_strPitch, s_strRoll, s_strYaw, s_spectralBin, s_remainingTime, s_remainingSpace);
#else #else
snprintf(message, DJI_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN, snprintf(message, DJI_WIDGET_FLOATING_WINDOW_MSG_MAX_LEN,
@ -367,6 +375,8 @@ static void *DjiTest_WidgetTask(void *arg)
// 关闭文件指针 // 关闭文件指针
pclose(fp); pclose(fp);
extractSpectralBinAndBandnumber(false);
//判断ximeaAirborneSystem系统是否存活 //判断ximeaAirborneSystem系统是否存活
// if(ximeaAirborneSystemSurvivalTime > 10) // if(ximeaAirborneSystemSurvivalTime > 10)
@ -467,7 +477,7 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
case 0: case 0:
s_strStateOfSbg="未打开"; s_strStateOfSbg="未打开";
if (systemON_Control == 0 || systemON_Control == 4) if (systemON_Control == 0 || systemON_Control == 3 || systemON_Control == 4)
{ {
strcpy(s_strUIMessage,"系统已就绪!"); strcpy(s_strUIMessage,"系统已就绪!");
messageTimeCounter = 0; messageTimeCounter = 0;
@ -476,13 +486,6 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
systemON_Control = 1;//ximeaAirborneSystem系统一启动就会发送此信息 → 代表采集系统就绪; systemON_Control = 1;//ximeaAirborneSystem系统一启动就会发送此信息 → 代表采集系统就绪;
} }
if (systemON_Control == 3)
{
strcpy(s_strUIMessage,"数据量过大,采集系统已经停止,请重新上电!");
messageTimeCounter = 0;
messageTimespan = 1000;
}
break; break;
case 1: case 1:
s_strStateOfSbg="波特率设置失败"; s_strStateOfSbg="波特率设置失败";
@ -531,19 +534,19 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
switch (s_sbgMagState) switch (s_sbgMagState)
{ {
case 0: case 0:
s_strSbgSolutionMode="UNINITI";//UNINITIALIZED s_strSbgSolutionMode="dis_UNINIT";//UNINITIALIZED
break; break;
case 1: case 1:
s_strSbgSolutionMode="GYRO";//VERTICAL_GYRO s_strSbgSolutionMode="dis_GYRO";//VERTICAL_GYRO
break; break;
case 2: case 2:
s_strSbgSolutionMode="AHRS"; s_strSbgSolutionMode="dis_AHRS";
break; break;
case 3: case 3:
s_strSbgSolutionMode="VELOCITY";//NAV_VELOCITY s_strSbgSolutionMode="dis_VELOCITY";//NAV_VELOCITY
break; break;
case 4: case 4:
s_strSbgSolutionMode="FULL";//NAV_POSITION s_strSbgSolutionMode="en_FULL";//NAV_POSITION
break; break;
default: default:
@ -586,10 +589,10 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
messageTimespan = 200; messageTimespan = 200;
break; break;
case 100: case 100:
s_strStateOfXimea="打开"; s_strStateOfXimea="连接";
break; break;
case 101: case 101:
s_strStateOfXimea="打开成功"; s_strStateOfXimea="连接成功";
strcpy(s_strUIMessage,"系统启动成功!"); strcpy(s_strUIMessage,"系统启动成功!");
messageTimeCounter = 0; messageTimeCounter = 0;
@ -597,10 +600,10 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
break; break;
case 102: case 102:
s_strStateOfXimea="帧率完成"; s_strStateOfXimea="连接成功";
break; break;
case 103: case 103:
s_strStateOfXimea="曝光完成"; s_strStateOfXimea="连接成功";
break; break;
case 104: case 104:
s_strStateOfXimea="采集中"; s_strStateOfXimea="采集中";
@ -614,9 +617,9 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
{ {
strcpy(XimeaExposeMaxValue, result[1]); strcpy(XimeaExposeMaxValue, result[1]);
int exposeTimeTmp = atoi(result[2]); exposeTimeInt = atoi(result[2]);
sprintf(XimeaExposeTime,"%d",exposeTimeTmp); sprintf(XimeaExposeTime,"%d",exposeTimeInt);
s_widgetValueList[8] = exposeTimeTmp; s_widgetValueList[8] = exposeTimeInt;
strcpy(s_strUIMessage,"曝光时间设置成功!"); strcpy(s_strUIMessage,"曝光时间设置成功!");
messageTimeCounter = 0; messageTimeCounter = 0;
@ -667,7 +670,6 @@ static T_DjiReturnCode DjiTestWidget_GetWidgetValue(E_DjiWidgetType widgetType,
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS; return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
} }
int frameRateGlobel = 0;
static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType widgetType, uint32_t index, int32_t value, static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType widgetType, uint32_t index, int32_t value,
void *userData) void *userData)
{ {
@ -675,6 +677,7 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
USER_LOG_INFO("Set widget value, widgetType = %s, widgetIndex = %d ,widgetValue = %d", USER_LOG_INFO("Set widget value, widgetType = %s, widgetIndex = %d ,widgetValue = %d",
s_widgetTypeNameArray[widgetType], index, value); s_widgetTypeNameArray[widgetType], index, value);
int32_t valueTmp = s_widgetValueList[index];
s_widgetValueList[index] = value; s_widgetValueList[index] = value;
switch (index) switch (index)
@ -685,7 +688,7 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
printf("systemON_Control的值为%d\n", systemON_Control); printf("systemON_Control的值为%d\n", systemON_Control);
if (0 <= systemON_Control && systemON_Control <= 4) if (0 <= systemON_Control && systemON_Control <= 4)
{ {
strcpy(s_strUIMessage,"系统已经关闭!"); strcpy(s_strUIMessage,"系统正在关闭!");
messageTimeCounter = 0; messageTimeCounter = 0;
messageTimespan = 1000; messageTimespan = 1000;
@ -700,25 +703,7 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
// printf("命令行指令为:%s\n",commandtmp); // printf("命令行指令为:%s\n",commandtmp);
// system(commandtmp); // system(commandtmp);
FILE *fp; closeXimeaRecordSystem();
fp = popen("kill $(ps aux | grep ximeaAirborneSystem | grep -v grep | awk \'{print $2}\')", "r");
if (fp == NULL)
{
perror("popen");
}
s_strStateOfXimea=" ";
s_strStateOfSbg=" ";
s_strSbgSatelliteCounter=" ";
s_strSbgSolutionMode=" ";
sprintf(XimeaFramerate,"%s"," ");
sprintf(XimeaExposeTime,"%s"," ");
sprintf(XimeaExposeMaxValue,"%s"," ");
sprintf(s_spectralBin,"%s"," ");
s_remainingTime=" ";
s_widgetValueList[6] = 0;
s_widgetValueList[8] = 0;
} }
} }
else if (value==1)//系统启动 else if (value==1)//系统启动
@ -763,6 +748,13 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
messageTimeCounter = 0; messageTimeCounter = 0;
messageTimespan = 10; messageTimespan = 10;
// printf("index-------:%d\n", index);
// printf("valueTmp-------:%d\n", valueTmp);
//下面的代码没有作用无法恢复界面的值为默认值valueTmp
// DjiTestWidget_SetWidgetValue(widgetType, index, valueTmp, userData);
// s_widgetValueList[index] = valueTmp;
break; break;
} }
else if (s_stateOfXimea > 103) else if (s_stateOfXimea > 103)
@ -794,12 +786,10 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
} }
// //
frameRateGlobel = value;
char command[50] = "5,"; char command[50] = "5,";
char framerate[20]; char framerate_str[20];
sprintf(framerate,"%d",value); sprintf(framerate_str,"%d",value);
strcat(command,framerate); strcat(command,framerate_str);
sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server)); sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server));
break; break;
} }
@ -855,24 +845,13 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
} }
//曝光时间有效性判断 //曝光时间有效性判断
if(frameRateGlobel == 0) float maxExposureTime = 1 / (float)framerate * 1000;//单位是ms
{
strcpy(s_strUIMessage,"请先设置帧率!");
messageTimeCounter = 0;
messageTimespan = 10;
break;
}
float maxExposureTime = 1 / (float)frameRateGlobel * 1000;//单位是ms
if(value > maxExposureTime) if(value > maxExposureTime)
{ {
strcpy(s_strUIMessage,"曝光时间超过上限,无效"); strcpy(s_strUIMessage,"曝光时间已设置为最大");
messageTimeCounter = 0; messageTimeCounter = 0;
messageTimespan = 10; messageTimespan = 10;
break;
} }
else if(value == 0) else if(value == 0)
{ {
@ -908,22 +887,6 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
break; 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"; char* command = "3";
sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server)); sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server));
@ -970,10 +933,11 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
{ {
system("sudo sed -i 's/spectralBin =.*/spectralBin = 2;/g' /media/nvme/300TC/config/ximea.cfg"); system("sudo sed -i 's/spectralBin =.*/spectralBin = 2;/g' /media/nvme/300TC/config/ximea.cfg");
} }
closeXimeaRecordSystem();
extractSpectralBinAndBandnumber(true); extractSpectralBinAndBandnumber(true);
strcpy(s_strUIMessage,"重新上电"); strcpy(s_strUIMessage,"等待采集系统重启");
messageTimeCounter = 0; messageTimeCounter = 0;
messageTimespan = 10000; messageTimespan = 10000;
@ -985,6 +949,34 @@ static T_DjiReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_DjiWidgetType
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS; return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
} }
static void closeXimeaRecordSystem()
{
FILE *fp;
fp = popen("kill $(ps aux | grep ximeaAirborneSystem | grep -v grep | awk \'{print $2}\')", "r");
if (fp == NULL)
{
perror("popen");
}
s_strStateOfXimea=" ";
s_strStateOfSbg=" ";
s_strSbgSatelliteCounter=" ";
s_strSbgSolutionMode=" ";
sprintf(XimeaFramerate,"%s"," ");
sprintf(XimeaExposeTime,"%s"," ");
sprintf(XimeaExposeMaxValue,"%s"," ");
sprintf(s_spectralBin,"%s"," ");
s_remainingTime=" ";
s_widgetValueList[5] = 0;
// s_widgetValueList[6] = 0;
// s_widgetValueList[8] = 0;
framerate = 0;
exposeTimeInt = 0;
system("sudo gpio write 10 0");
}
static void extractSpectralBinAndBandnumber(bool isModifyBin) static void extractSpectralBinAndBandnumber(bool isModifyBin)
{ {
unsigned long long spectralBin, height; unsigned long long spectralBin, height;
@ -1029,17 +1021,7 @@ static void extractSpectralBinAndBandnumber(bool isModifyBin)
pclose(fp); pclose(fp);
} }
char command[256]; s_widgetValueList[11] = spectralBin;
memset(command, 0, sizeof(command));
sprintf(command,"sudo sed -i 's/.*bin.*/ \"widget_name\": \"bin%d_%d\",/g' %s", spectralBin, height, jsonPathCn);
// printf("command: %s", command);
system(command);
memset(command, 0, sizeof(command));
sprintf(command,"sudo sed -i 's/.*bin.*/ \"widget_name\": \"bin%d_%d\",/g' %s", spectralBin, height, jsonPathEn);
// printf("command: %s", command);
system(command);
if (!isModifyBin) if (!isModifyBin)
{ {

View File

@ -8,96 +8,13 @@
"is_enable": true "is_enable": true
}, },
"speaker": { "speaker": {
"is_enable_tts": true, "is_enable_tts": false,
"is_enable_voice": false "is_enable_voice": false
}, },
"widget_list": [ "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
}
},
{
"widget_index": 4,
"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
}
}
] ]
}, },
"config_interface": { "config_interface": {
"text_input_box": {
"widget_name": "文本输入框",
"placeholder_text": "请输入消息",
"is_enable": true
},
"widget_list": [ "widget_list": [
{ {
"widget_index": 5, "widget_index": 5,
@ -108,7 +25,7 @@
"widget_index": 6, "widget_index": 6,
"widget_type": "int_input_box", "widget_type": "int_input_box",
"widget_name": "帧率", "widget_name": "帧率",
"int_input_box_hint": "单位:hz" "int_input_box_hint": "单位:赫兹"
}, },
{ {
"widget_index": 7, "widget_index": 7,

View File

@ -8,96 +8,13 @@
"is_enable": true "is_enable": true
}, },
"speaker": { "speaker": {
"is_enable_tts": true, "is_enable_tts": false,
"is_enable_voice": false "is_enable_voice": false
}, },
"widget_list": [ "widget_list": [
{
"widget_index": 0,
"widget_type": "button",
"widget_name": "Button",
"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",
"list_item": [
{
"item_name": "Item_1",
"icon_file_set": {
"icon_file_name_selected": "icon_list_item1.png",
"icon_file_name_unselected": "icon_list_item1.png"
}
},
{
"item_name": "Item_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": "Switch",
"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": "Scale",
"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
}
},
{
"widget_index": 4,
"widget_type": "button",
"widget_name": "Button",
"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
}
}
] ]
}, },
"config_interface": { "config_interface": {
"text_input_box": {
"widget_name": "TextInputBox",
"placeholder_text": "Please input message",
"is_enable": true
},
"widget_list": [ "widget_list": [
{ {
"widget_index": 5, "widget_index": 5,
@ -108,7 +25,7 @@
"widget_index": 6, "widget_index": 6,
"widget_type": "int_input_box", "widget_type": "int_input_box",
"widget_name": "帧率", "widget_name": "帧率",
"int_input_box_hint": "单位:hz" "int_input_box_hint": "单位:赫兹"
}, },
{ {
"widget_index": 7, "widget_index": 7,