Compare commits

8 Commits

Author SHA1 Message Date
f370231979 版本号:2.30.34.20
1. 添加ximea错误代码反馈:10、11;
2. 系统启动错误控制;
2023-06-26 19:14:31 +08:00
610a384301 调整界面顺序 2023-06-11 19:49:14 +08:00
2ef8afc890 udpClient路径更改 2023-06-11 19:06:04 +08:00
cc61123351 用户通过软件包更新300tc软件 2023-06-11 18:42:06 +08:00
a8838b8949 1. 禁止第二次启动系统,避免相机报错;
2. 添加界面上的测试采集功能;
2023-06-11 18:22:00 +08:00
f21576ea81 1.解决飞机加速后,云台俯仰角度异常问题;
2.将曝光时间和曝光时那一帧数据的最大值显示在浮窗上;
3.优化浮窗显示内容,将内容密度提高,不需要下滑浮窗就能看见所有信息;
4.浮窗第一行为滚动显示区域;
5.错误控制;
6.判断ximeaAirborneSystem系统是否存活:测出有bug,相关代码已经注释掉;
2023-05-24 16:27:43 +08:00
bde594832e 1、修改界面:显示xport的姿态角(pitch、roll、yaw);
2、linux修改了时区后(timedatectl set-timezone "Asia/Shanghai"),psdk同步飞机的时间到nanopi需要+8hour;
3、m300遥控器界面添加手动设置曝光时间;
2023-03-19 19:16:00 +08:00
c7b7298bbc 1. 订阅psdk中的gps日期和时间(格林威治时间),并转换为北京时间,通过date -s命令设置linux系统时间为北京时间;
2. 修改界面,显示sbg惯导卫星颗数;
2022-12-26 17:20:31 +08:00
10 changed files with 613 additions and 39 deletions

View File

@ -201,7 +201,7 @@ T_PsdkReturnCode PsdkTest_CameraMediaInit(void)
}
//创建线程执行用户自定义函数!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// if (PsdkOsal_TaskCreate(&s_userSendVideoThread, UserCameraMedia_SendVideoTask_tc, "user_camera_media_task", 2048,
// 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;

View File

@ -42,6 +42,8 @@
static void *UserDataSubscription_Task(void *arg);
static T_PsdkReturnCode PsdkTest_DataSubscriptionReceiveQuaternionCallback(const uint8_t *data, uint16_t dataSize,
const T_PsdkDataSubscriptiontTimestamp *timestamp);
static char* uitoa(unsigned int n, char *s);
static int GMT_toLocalTime(unsigned long gmt_time,unsigned int* year,unsigned int* month,unsigned int* day,unsigned int* hour,unsigned int* minute,unsigned int* sec);
/* Private variables ---------------------------------------------------------*/
static T_PsdkTaskHandle s_userDataSubscriptionThread;
@ -81,6 +83,22 @@ T_PsdkReturnCode PsdkTest_DataSubscriptionInit(void)
return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
//订阅gps日期
//要先订阅消息(PsdkDataSubscription_RegTopicSync),才能获取消息(PsdkDataSubscription_GetValueOfTopicWithTimestamp)
psdkStat = PsdkDataSubscription_RegTopicSync(PSDK_DATA_SUBSCRIPTION_TOPIC_GPS_DATE, 1,NULL);
if (psdkStat != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
PsdkLogger_UserLogError("Subscribe topic QUATERNION error.");
return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
//订阅gps时间
//要先订阅消息(PsdkDataSubscription_RegTopicSync),才能获取消息(PsdkDataSubscription_GetValueOfTopicWithTimestamp)
psdkStat = PsdkDataSubscription_RegTopicSync(PSDK_DATA_SUBSCRIPTION_TOPIC_GPS_TIME, 1,NULL);
if (psdkStat != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
PsdkLogger_UserLogError("Subscribe topic QUATERNION error.");
return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
//创建用户任务
//要先订阅消息(PsdkDataSubscription_RegTopicSync),才能获取消息(PsdkDataSubscription_GetValueOfTopicWithTimestamp)
if (PsdkOsal_TaskCreate(&s_userDataSubscriptionThread, UserDataSubscription_Task, "user_subscription_task",
@ -107,9 +125,13 @@ static void *UserDataSubscription_Task(void *arg)
T_PsdkDataSubscriptionVelocity velocity = {0};
T_PsdkDataSubscriptiontTimestamp timestamp = {0};
T_PsdkDataSubscriptionGpsPosition gpsPosition = {0};
T_PsdkDataSubscriptionGpsDate gpsDate={0};
T_PsdkDataSubscriptionGpsTime gpsTime={0};
USER_UTIL_UNUSED(arg);
int counter = 0;
bool isGetGpsDate_time = true;
while (1) {
PsdkOsal_TaskSleepMs(1000 / DATA_SUBSCRIPTION_TASK_FREQ);
@ -147,9 +169,191 @@ static void *UserDataSubscription_Task(void *arg)
} else {
PsdkLogger_UserLogDebug("gps position: x %d y %d z %d.", gpsPosition.x, gpsPosition.y, gpsPosition.z);
}//PsdkLogger_UserLogInfo
psdkStat = PsdkDataSubscription_GetValueOfTopicWithTimestamp(PSDK_DATA_SUBSCRIPTION_TOPIC_GPS_DATE,
(uint8_t *) &gpsDate,
sizeof(T_PsdkDataSubscriptionGpsDate),
&timestamp);
if (psdkStat != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
PsdkLogger_UserLogError("get value of topic gps DATE error.");
isGetGpsDate_time = false;
} else {
PsdkLogger_UserLogDebug("timestamp: millisecond %u microsecond %u.", timestamp.millisecond,
timestamp.microsecond);
PsdkLogger_UserLogDebug("gps DATE: %d.", gpsDate);
}//PsdkLogger_UserLogInfo
psdkStat = PsdkDataSubscription_GetValueOfTopicWithTimestamp(PSDK_DATA_SUBSCRIPTION_TOPIC_GPS_TIME,
(uint8_t *) &gpsTime,
sizeof(T_PsdkDataSubscriptionGpsTime),
&timestamp);
if (psdkStat != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
PsdkLogger_UserLogError("get value of topic gps TIME error.");
isGetGpsDate_time = false;
} else {
PsdkLogger_UserLogDebug("gps TIME: %d.", gpsTime);
}//PsdkLogger_UserLogInfo
if(counter>1 &&counter<10 && isGetGpsDate_time)//避免dji的bug第一次获取的gpsDate和gpsTime都为0
{
printf("开始设置时间\n");
system('date');
char *gpsDate_str = (char *)malloc(sizeof(char)*50);
char *gpsTime_str = (char *)malloc(sizeof(char)*20);
uitoa(gpsDate,gpsDate_str);
uitoa(gpsTime,gpsTime_str);
strcat(gpsDate_str, gpsTime_str);
// printf("pingjie----------------------------------------------:%s\n",gpsDate_str);
char *year = (char *)malloc(sizeof(char)*10);
char *mon = (char *)malloc(sizeof(char)*10);
char *mday = (char *)malloc(sizeof(char)*10);
char *hour = (char *)malloc(sizeof(char)*10);
char *min = (char *)malloc(sizeof(char)*10);
char *sec = (char *)malloc(sizeof(char)*10);
strncpy(year, gpsDate_str, 4);
strncpy(mon, gpsDate_str+4, 2);
strncpy(mday, gpsDate_str+6, 2);
if(gpsTime >= 100000)//dji时间格式为hhmmss但是当时间小于上午10点时小时位hh只有1位219232:19:23
{
strncpy(hour, gpsTime_str, 2);
strncpy(min, gpsTime_str+2, 2);
strncpy(sec, gpsTime_str+4, 2);
}
else
{
strncpy(hour, gpsTime_str, 1);
strncpy(min, gpsTime_str+1, 2);
strncpy(sec, gpsTime_str+3, 2);
}
// printf("year:%s\n",year);
// printf("mon:%s\n",mon);
// printf("mday:%s\n",mday);
// printf("hour:%s\n",hour);
// printf("min:%s\n",min);
// printf("sec:%s\n",sec);
struct tm info;
info.tm_year = atoi(year) - 1900;;
info.tm_mon = atoi(mon) - 1;
info.tm_mday = atoi(mday);
info.tm_hour = atoi(hour) + 8;
info.tm_min = atoi(min);
info.tm_sec = atoi(sec);
info.tm_isdst = -1;
int gmt_time = mktime(&info);
LocalTimeInfo LocalTime;
GMT_toLocalTime(gmt_time,&LocalTime.year,&LocalTime.month,&LocalTime.day,&LocalTime.hour,&LocalTime.minute,&LocalTime.second);
// printf("MyLocalTime=%d-%d-%d %d:%d:%d\n",LocalTime.year,LocalTime.month,LocalTime.day,LocalTime.hour,LocalTime.minute,LocalTime.second);
char *timeParam = (char *)malloc(sizeof(char)*500);
sprintf(timeParam,"%d-%d-%d %d:%d:%d",LocalTime.year,LocalTime.month,LocalTime.day,LocalTime.hour,LocalTime.minute,LocalTime.second);
// printf("----------: %s",timeParam);
char *command = (char *)malloc(sizeof(char)*100);
strcat(command, "date -s \"");
strcat(command, timeParam);
strcat(command, "\"");
// printf("command---:%s\n",command);
system(command);
}
counter++;
}
}
char* uitoa(unsigned int n, char *s)
{
int i, j;
i = 0;
char buf[20];
memset(buf, 0, sizeof(buf));
do{
buf[i++] = n % 10 + '0';//取下一个数字
} while ((n /= 10)>0);//删除该数字
i -= 1;
for (j = 0; i >= 0; j++, i--)//生成的数字是逆序的,所以要逆序输出
s[j] = buf[i];
s[j] = '\0';
return s;
}
/*格林威治时间就是1970年01月01日00时00分00秒起至现在的总秒数*/
/*通过格林威治时间,计算本地时间*/
int GMT_toLocalTime(unsigned long gmt_time,unsigned int* year,unsigned int* month,unsigned int* day,unsigned int* hour,unsigned int* minute,unsigned int* sec)
{
int TIME_ZONE = 8;
unsigned long gmtTime = gmt_time + TIME_ZONE * 60 * 60;
int leap_years = 0;
int month_days[] = {31, 28, 31,30,31, 30,31,31, 30,31,30,31};
int i =0;
int days;
*sec = (int)(gmtTime%60);//秒钟数
gmtTime = gmtTime/60;//总共有多少分钟
*minute = (int)(gmtTime%60);
gmtTime = gmtTime/60;//总共有多少小时
*hour = (int)(gmtTime%24);
gmtTime = gmtTime/24;//总共有多少天
//去掉小时分钟秒钟后,转换成从公元元年开始到现在的天数
//不包括今天
gmtTime += 719162;
// 首先不考虑闰年计算年份和天数
// 计算年份
*year = (int)(gmtTime/365);
// days = 从公元元年开始到year的闰年个数 + 当前年份已经度过的天数除以365后的余数
days = (int)(gmtTime%365);
while(1)
{
//总共有多少个闰年,天数要相应的减去这些天数
leap_years = (*year)/4 - (*year)/100; //计算普通闰年
leap_years += (*year)/400; //加上世纪闰年
if(days < leap_years)
{
days+=365;
(*year)--;
}else break;
}
days -= leap_years;
(*year)++;
days++;
//计算今年总共度过了多少秒
if(((*year)%4 == 0 && (*year) % 100!=0) || (*year)%400==0) month_days[1] = 29;//今年是闰年,修改二月份为29天
*month = 1;
for(i=0;i<12;i++)
{
if(days <= month_days[i])
{
break;
}
else
{
days -=month_days[i];
(*month)++;
}
}
*day =days;
return 0;
}
#ifndef __CC_ARM
#pragma GCC diagnostic pop
#endif

View File

@ -33,6 +33,20 @@
#include "psdk_typedef.h"
#include "psdk_data_subscription.h"
#include <malloc.h>
#include <stdlib.h>
#include <time.h>
typedef struct LocalTimeInformation
{
unsigned int year;
unsigned int month;
unsigned int day;
unsigned int hour;
unsigned int minute;
unsigned int second;
}LocalTimeInfo;
#ifdef __cplusplus
extern "C" {
#endif

View File

@ -73,14 +73,27 @@ 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;
static char * s_strStateOfSbg="未打开";
static char * s_strSbgAccuracy="1000";
static char * s_strSbgSolutionMode="UNINITIALIZED";
static char * s_strStateOfXimea="未打开";
//0ximeaAirborneSystem系统未就绪不可启动1ximeaAirborneSystem系统就绪可以启动
//2ximeaAirborneSystem系统正在启动3ximeaAirborneSystem系统启动成功4系统已经关闭并且不能再次启动
int systemON_Control = 0;
char s_strUIMessage[100]=" ";
static char * s_strStateOfSbg="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";
char * s_strPitch="None";
char * s_strRoll="None";
char * s_strYaw="None";
static int s_sockfd;
static struct sockaddr_in s_server;
@ -99,8 +112,9 @@ static const T_PsdkWidgetHandlerListItem s_widgetHandlerList[] = {
{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},
{8, PSDK_WIDGET_TYPE_SWITCH, PsdkTestWidget_SetWidgetValue_StartRecord, PsdkTestWidget_GetWidgetValue, NULL},
{9, PSDK_WIDGET_TYPE_LIST, PsdkTestWidget_SetWidgetValue_StartRecord, PsdkTestWidget_GetWidgetValue, NULL},//PsdkTestWidget_SetWidgetValue
{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
};
static char *s_widgetTypeNameArray[] = {
@ -252,6 +266,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];
@ -260,6 +280,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) {
@ -268,13 +289,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", sysTimeMs, s_strStateOfXimea, s_strStateOfSbg, s_strSbgAccuracy);
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);
}
}
@ -330,9 +378,14 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
//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));
char * result[2];
char * result[3];
result[0] = strtok( buf, "," );
result[1] = strtok( NULL, "," );
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]);
if (strcmp(result[0],"sbg") == 0)
@ -344,6 +397,23 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
{
case 0:
s_strStateOfSbg="未打开";
if (systemON_Control == 0)
{
strcpy(s_strUIMessage,"系统已就绪!");
messageTimeCounter = 0;
messageTimespan = 1000;
systemON_Control = 1;//ximeaAirborneSystem系统一启动就会发送此信息 → 代表采集系统就绪;
}
if (systemON_Control == 3)
{
strcpy(s_strUIMessage,"采集系统崩溃,请重启并联系技术工程师!");
messageTimeCounter = 0;
messageTimespan = 1000;
}
break;
case 1:
s_strStateOfSbg="波特率设置失败";
@ -353,6 +423,7 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
break;
case 3:
s_strStateOfSbg="采集中";
systemON_Control = 3;
break;
default:
@ -361,9 +432,12 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
}
else if (strcmp(result[0],"Accuracy") == 0)
{
// printf("惯导定位精度为: %s\n\n", result[1]);
s_strSbgAccuracy=result[1];
s_strSbgSatelliteCounter=result[2];
ximeaAirborneSystemSurvivalTime++;
// s_sbgMagState = atoi(result[1]);
@ -414,24 +488,50 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
switch (s_stateOfXimea)//0-61ximea官方错误代码99发生的ximea官方错误代码没有处理100未打开101打开102设置帧率103自动曝光104正在采集
{
case 10:
s_strStateOfXimea="10";
strcpy(s_strUIMessage,"相机timeout请重启");
messageTimeCounter = 0;
messageTimespan = 200;
break;
case 11:
s_strStateOfXimea="11";
strcpy(s_strUIMessage,"相机Invalid arguments supplied");
messageTimeCounter = 0;
messageTimespan = 200;
break;
case 57:
s_strStateOfXimea="相机被占用";
s_strStateOfXimea="57";
strcpy(s_strUIMessage,"相机被占用!");
messageTimeCounter = 0;
messageTimespan = 200;
break;
case 99:
s_strStateOfXimea="未处理错误,错误码见日志";
break;
s_strStateOfXimea="99";
strcpy(s_strUIMessage,"相机异常,错误码见日志!");
messageTimeCounter = 0;
messageTimespan = 200;
break;
case 100:
s_strStateOfXimea="未打开";
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="正在采集";
@ -441,6 +541,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;
}
}
}
@ -472,6 +591,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)
{
@ -486,17 +606,98 @@ static T_PsdkReturnCode PsdkTestWidget_SetWidgetValue_StartRecord(E_PsdkWidgetTy
case 5://系统启动关闭
if (value==0)//系统关闭
{
char* command = "2";
sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server));
if (systemON_Control == 3)
{
strcpy(s_strUIMessage,"系统已经关闭!");
messageTimeCounter = 0;
messageTimespan = 1000;
char* command = "2";
sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server));
systemON_Control = 4;
}
}
else if (value==1)//系统启动
{
char* command = "1";
sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server));
if (systemON_Control == 0)
{
strcpy(s_strUIMessage,"请等待系统初始化!");
messageTimeCounter = 0;
messageTimespan = 1000;
}
else if (systemON_Control == 1)
{
strcpy(s_strUIMessage,"系统启动中,请等待!");
messageTimeCounter = 0;
messageTimespan = 1000;
char* command = "1";
sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server));
systemON_Control = 2;
}
else if (systemON_Control == 2)
{
strcpy(s_strUIMessage,"系统启动中,请等待!");
messageTimeCounter = 0;
messageTimespan = 1000;
}
else if (systemON_Control == 3)
{
strcpy(s_strUIMessage,"系统已经启动!");
messageTimeCounter = 0;
messageTimespan = 1000;
}
else if (systemON_Control == 4)
{
strcpy(s_strUIMessage,"相机占用,请重新上电!");
messageTimeCounter = 0;
messageTimespan = 1000;
}
}
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);
@ -511,11 +712,89 @@ 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:
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));
strcat(command,exposureTime);
sendto(s_sockfd, command,strlen(command),0,(struct sockaddr *)&s_server,sizeof(s_server));
break;
}
case 9:
if (value==0)//停止采集
{
char* command = "4";
@ -523,25 +802,63 @@ 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));
}
break;
case 9:
if (value==0)//无操作
case 10:
if (value==0)//等待指令
{
}
if (value==1)
{
}
else if (value==2)//重启电脑
{
system("reboot");
}
else if (value==3)//关机
else if (value==2)
{
system("shutdown now");
}
else if (value==3)
{
system("/home/300tc/projects/udpClient/udpClient 127.0.0.1 9,1");
}
else if (value==4)
{
system("/home/300tc/projects/udpClient/udpClient 127.0.0.1 9,0");
}
else if (value==5)
{
strcpy(s_strUIMessage,"系统正在更新,稍后会自动重启!");
messageTimeCounter = 0;
messageTimespan = 10000;
system("/home/pi/tc_ShellScripts/update0.sh &> /media/nvme/300TC/update/log");
}
break;
default:
break;

View File

@ -92,25 +92,37 @@
},
{
"widget_index": 8,
"widget_type": "int_input_box",
"widget_name": "曝光时间",
"int_input_box_hint": "unit:ms"
},
{
"widget_index": 9,
"widget_type": "switch",
"widget_name": "开始采集"
},
{
"widget_index": 9,
"widget_index": 10,
"widget_type": "list",
"widget_name": "系统指令",
"list_item": [
{
"item_name": "等待指令"
},
{
"item_name": "无"
},
{
"item_name": "重启电脑"
},
{
"item_name": "关机"
},
{
"item_name": "测试采集"
},
{
"item_name": "停止采集"
},
{
"item_name": "更新"
}
]
}

View File

@ -92,25 +92,37 @@
},
{
"widget_index": 8,
"widget_type": "int_input_box",
"widget_name": "曝光时间",
"int_input_box_hint": "unit:ms"
},
{
"widget_index": 9,
"widget_type": "switch",
"widget_name": "开始采集"
},
{
"widget_index": 9,
"widget_index": 10,
"widget_type": "list",
"widget_name": "列表_10",
"list_item": [
{
"item_name": "等待指令"
},
{
"item_name": "无"
},
{
"item_name": "重启电脑"
},
{
"item_name": "关机"
},
{
"item_name": "测试采集"
},
{
"item_name": "停止采集"
},
{
"item_name": "更新"
}
]
}

View File

@ -53,6 +53,10 @@ static T_PsdkGimbalSystemState s_userXPortSystemState = {0};
static bool s_isUserXPortInited = false;
static bool s_isUserXPortSystemStateVaild = false;
extern char * s_strPitch;
extern char * s_strRoll;
extern char * s_strYaw;
/* Exported functions definition ---------------------------------------------*/
T_PsdkReturnCode PsdkTest_XPortInit(void)
{
@ -95,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);
@ -103,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);
@ -349,12 +353,22 @@ static T_PsdkReturnCode ReceiveXPortSystemState(T_PsdkGimbalSystemState systemSt
return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
char * pitchTmp[10];
char * rollTmp[10];
char * yawTmp[10];
static T_PsdkReturnCode ReceiveXPortAttitudeInformation(T_PsdkGimbalAttitudeInformation attitudeInformation)
{
PsdkLogger_UserLogDebug("receive XPort attitude information:");
PsdkLogger_UserLogDebug("XPort attitude: pitch %d, roll %d, yaw %d.", attitudeInformation.attitude.pitch,
attitudeInformation.attitude.roll, attitudeInformation.attitude.yaw);
sprintf(pitchTmp, "%d", attitudeInformation.attitude.pitch);
sprintf(rollTmp, "%d", attitudeInformation.attitude.roll);
sprintf(yawTmp, "%d", attitudeInformation.attitude.yaw);
s_strPitch = pitchTmp;
s_strRoll = rollTmp;
s_strYaw = yawTmp;
return PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

View File

@ -32,6 +32,7 @@
/* Includes ------------------------------------------------------------------*/
#include "psdk_typedef.h"
#include "psdk_xport.h"
#include <stdio.h>
#ifdef __cplusplus
extern "C" {

View File

@ -398,7 +398,7 @@ int main(void)
}
//设置负载设备的别称
if (PsdkProductInfo_SetAlias("300TC") != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
if (PsdkProductInfo_SetAlias("300TC_2.30.34.20") != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
PsdkLogger_UserLogError("set product alias error.");
return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}

View File

@ -32,7 +32,7 @@
#include "psdk_logger.h"
/* Private constants ---------------------------------------------------------*/
#define LINUX_NETWORK_DEV "eth0"//enx00e04c360a7d
#define LINUX_NETWORK_DEV "eth1"//enx00e04c360a7d
#define LINUX_CMD_STR_MAX_SIZE (128)
/* Private types -------------------------------------------------------------*/