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