Compare commits
9 Commits
37cd557a25
...
master
Author | SHA1 | Date | |
---|---|---|---|
66c3d0709e | |||
f370231979 | |||
610a384301 | |||
2ef8afc890 | |||
cc61123351 | |||
a8838b8949 | |||
f21576ea81 | |||
bde594832e | |||
c7b7298bbc |
@ -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;
|
||||
|
@ -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),
|
||||
×tamp);
|
||||
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),
|
||||
×tamp);
|
||||
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位:21923(2: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
|
||||
|
@ -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
|
||||
|
@ -73,14 +73,28 @@ 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="未打开";
|
||||
//0:ximeaAirborneSystem系统未就绪,不可启动;1:ximeaAirborneSystem系统就绪,可以启动;
|
||||
//2:ximeaAirborneSystem系统正在启动;3:ximeaAirborneSystem系统启动成功;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]=" ";
|
||||
char spectralBin[100]="None";
|
||||
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 +113,10 @@ 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
|
||||
{11, PSDK_WIDGET_TYPE_LIST, PsdkTestWidget_SetWidgetValue_StartRecord, PsdkTestWidget_GetWidgetValue, NULL},
|
||||
};
|
||||
|
||||
static char *s_widgetTypeNameArray[] = {
|
||||
@ -252,6 +268,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 +282,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 +291,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光谱bin: %s;\n",
|
||||
s_strUIMessage, s_strStateOfXimea, s_strStateOfSbg, s_strSbgSatelliteCounter, s_strSbgAccuracy, XimeaFramerate, XimeaExposeTime, XimeaExposeMaxValue, s_strPitch, s_strRoll, s_strYaw, spectralBin);
|
||||
|
||||
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 +380,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 +399,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 +425,7 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
|
||||
break;
|
||||
case 3:
|
||||
s_strStateOfSbg="采集中";
|
||||
systemON_Control = 3;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -361,9 +434,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 +490,50 @@ static void *PsdkTest_IrisRecordSystemChanged(void *arg)//
|
||||
|
||||
switch (s_stateOfXimea)//0-61:ximea官方错误代码;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 +543,30 @@ 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;
|
||||
}
|
||||
else if (strcmp(result[0],"bin") == 0)
|
||||
{
|
||||
int spectralBin_tm = atoi(result[2]);
|
||||
sprintf(spectralBin,"%d",spectralBin_tm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -472,6 +598,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 +613,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 +719,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 +809,81 @@ 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;
|
||||
case 11:
|
||||
if (value==0)//等待指令
|
||||
{
|
||||
}
|
||||
if (value==1)
|
||||
{
|
||||
system("sudo sed -i 's/spectralBin =.*/spectralBin = 1;/g' /media/nvme/300TC/config/ximea.cfg");
|
||||
}
|
||||
else if (value==2)
|
||||
{
|
||||
system("sudo sed -i 's/spectralBin =.*/spectralBin = 2;/g' /media/nvme/300TC/config/ximea.cfg");
|
||||
}
|
||||
|
||||
strcpy(s_strUIMessage,"请重新上电!");
|
||||
messageTimeCounter = 0;
|
||||
messageTimespan = 10000;
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -92,25 +92,53 @@
|
||||
},
|
||||
{
|
||||
"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": "更新"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"widget_index": 11,
|
||||
"widget_type": "list",
|
||||
"widget_name": "bin",
|
||||
"list_item": [
|
||||
{
|
||||
"item_name": "等待指令"
|
||||
},
|
||||
{
|
||||
"item_name": "光谱1"
|
||||
},
|
||||
{
|
||||
"item_name": "光谱2"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -92,25 +92,53 @@
|
||||
},
|
||||
{
|
||||
"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": "更新"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"widget_index": 11,
|
||||
"widget_type": "list",
|
||||
"widget_name": "bin",
|
||||
"list_item": [
|
||||
{
|
||||
"item_name": "等待指令"
|
||||
},
|
||||
{
|
||||
"item_name": "光谱1"
|
||||
},
|
||||
{
|
||||
"item_name": "光谱2"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,7 @@
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "psdk_typedef.h"
|
||||
#include "psdk_xport.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -398,7 +398,7 @@ int main(void)
|
||||
}
|
||||
|
||||
//设置负载设备的别称
|
||||
if (PsdkProductInfo_SetAlias("300TC") != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
if (PsdkProductInfo_SetAlias("300TC_2.31.35.21") != PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
||||
PsdkLogger_UserLogError("set product alias error.");
|
||||
return PSDK_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
||||
}
|
||||
|
@ -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 -------------------------------------------------------------*/
|
||||
|
Reference in New Issue
Block a user