Compare commits

...

4 Commits

Author SHA1 Message Date
xin
c0f974fd4c 添加打包脚本 package.sh
用于构建项目并打包成 deb 文件
2026-03-04 15:08:52 +08:00
xin
c2cad64f17 M350b版本 2026-03-04 10:24:11 +08:00
xin
e7cd1e93a6 优化气体传感器数据解析和消息传递
- 使用union解析CO2/H2O数据,解决大小端问题
- 添加LINECOMMEND/LINEDATASHOW消息类型区分
- 添加WorkingState/SavingDate原子变量
- 修正气体传感器部分逻辑
2026-03-04 10:22:51 +08:00
xin
82608bfa0a 整合GPS同步并修复UI刷新bug
- 将InitSystemParams功能整合到SetupSubscriptions中
- 修复Widget_M300RTK运算符错误(&改为&&)
- 添加UI定时刷新功能Slot_flash_screen
- 添加密码保护功能(123456)
- WDA传感器添加结束符格式TODO注释
- 调整widget控件索引映射
2026-03-04 10:21:24 +08:00
14 changed files with 861 additions and 659 deletions

View File

@ -86,50 +86,114 @@ int IrisSensor_Gas_P0::RecvData_Chk(/*std::string sRecv*/)
return 0; return 0;
} }
union Union16 {
short s16; // 有符号短整型 (处理正负)
unsigned short u16; // 无符号短整型
unsigned char b[2]; // 字节数组
};
// 用于处理4字节32位数据
union Union32 {
int s32; // 有符号长整型
unsigned int u32; // 无符号长整型
unsigned char b[4]; // 字节数组
};
int IrisSensor_Gas_P0::ParseMeasuredData_Chk() int IrisSensor_Gas_P0::ParseMeasuredData_Chk()
{ {
if (m_sRecv.size()!=0x1f+4) // 如果长度不匹配0x1f + 4 = 35
if (m_sRecv.size() != 35)
{ {
qDebug() << "Err:Sensor_Gas ParseData Failed,Incorrect Data Length.Exit Code:1"; qDebug() << "Err:Sensor_Gas ParseData Failed, Incorrect Data Length. Exit Code:1";
return 1; return 1;
} }
else
{
unsigned char uc12, uc13, uc14, uc15, uc16,uc17,uc18,uc19,uc28,uc29,uc30,uc31,uc32, uc33;
char aaaa[34];
memcpy(aaaa,m_sRecv.c_str(),m_sRecv.size());
uc32 = m_sRecv[32]; Union16 u16;
uc33 = m_sRecv[33]; Union32 u32;
m_fTPTemperature = (uc32 * 256 + uc33) / 100;
uc30 = m_sRecv[30]; // 1. 解析温度 (Index 32, 33) - 假设是 short (16-bit)
uc31 = m_sRecv[31]; // 大端转小端:高位 index[32] 放在 b[1],低位 index[33] 放在 b[0]
m_fPB = (uc30 * 256 + uc31) / 10; u16.b[1] = static_cast<unsigned char>(m_sRecv[32]);
u16.b[0] = static_cast<unsigned char>(m_sRecv[33]);
m_fTPTemperature = u16.s16 / 100.0f; // 直接使用 s16 即可自动处理正负
uc28 = m_sRecv[28]; // 2. 解析 PB (Index 30, 31)
uc29 = m_sRecv[29]; u16.b[1] = static_cast<unsigned char>(m_sRecv[30]);
m_fPB = (uc28 * 256 + uc29) / 10; u16.b[0] = static_cast<unsigned char>(m_sRecv[31]);
// 注意:你原代码里这里和下面都赋值给了 m_fPB是否其中一个是别的变量
float fPB_1 = u16.s16 / 10.0f;
uc16 = m_sRecv[16]; // 3. 解析 PB (Index 28, 29)
uc17 = m_sRecv[17]; u16.b[1] = static_cast<unsigned char>(m_sRecv[28]);
uc18 = m_sRecv[18]; u16.b[0] = static_cast<unsigned char>(m_sRecv[29]);
uc19 = m_sRecv[19]; m_fPB = u16.s16 / 10.0f;
m_ulCO2 = uc16*256*256*256 + uc17*256*256 + uc18*256 + uc19;
uc12 = m_sRecv[12]; // 4. 解析 CO2 (Index 16-19) - 32位
uc13 = m_sRecv[13]; u32.b[3] = static_cast<unsigned char>(m_sRecv[16]);
uc14 = m_sRecv[14]; u32.b[2] = static_cast<unsigned char>(m_sRecv[17]);
uc15 = m_sRecv[15]; u32.b[1] = static_cast<unsigned char>(m_sRecv[18]);
m_ulH2O = uc12 * 256 * 256 * 256 + uc13 * 256 * 256 + uc14 * 256 + uc15; u32.b[0] = static_cast<unsigned char>(m_sRecv[19]);
m_ulCO2 = u32.s32; // 如果 CO2 是正数s32 和 u32 一样如果有负数s32 会正确解释补码
// 5. 解析 H2O (Index 12-15) - 32位
return 0; u32.b[3] = static_cast<unsigned char>(m_sRecv[12]);
} u32.b[2] = static_cast<unsigned char>(m_sRecv[13]);
u32.b[1] = static_cast<unsigned char>(m_sRecv[14]);
u32.b[0] = static_cast<unsigned char>(m_sRecv[15]);
m_ulH2O = u32.s32;
return 0; return 0;
} }
// int IrisSensor_Gas_P0::ParseMeasuredData_Chk()
// {
// if (m_sRecv.size()!=0x1f+4)
// {
// qDebug() << "Err:Sensor_Gas ParseData Failed,Incorrect Data Length.Exit Code:1";
// return 1;
// }
// else
// {
// unsigned char uc12, uc13, uc14, uc15, uc16,uc17,uc18,uc19,uc28,uc29,uc30,uc31,uc32, uc33;
// char aaaa[34];
// memcpy(aaaa,m_sRecv.c_str(),m_sRecv.size());
//
// uc32 = m_sRecv[32];
// uc33 = m_sRecv[33];
// m_fTPTemperature = (uc32 * 256 + uc33) / 100;
//
// uc30 = m_sRecv[30];
// uc31 = m_sRecv[31];
// m_fPB = (uc30 * 256 + uc31) / 10;
//
// uc28 = m_sRecv[28];
// uc29 = m_sRecv[29];
// m_fPB = (uc28 * 256 + uc29) / 10;
//
// uc16 = m_sRecv[16];
// uc17 = m_sRecv[17];
// uc18 = m_sRecv[18];
// uc19 = m_sRecv[19];
// m_ulCO2 = uc16*256*256*256 + uc17*256*256 + uc18*256 + uc19;
//
// uc12 = m_sRecv[12];
// uc13 = m_sRecv[13];
// uc14 = m_sRecv[14];
// uc15 = m_sRecv[15];
// m_ulH2O = uc12 * 256 * 256 * 256 + uc13 * 256 * 256 + uc14 * 256 + uc15;
//
//
// return 0;
// }
//
// return 0;
// }
int IrisSensor_Gas_P0::Initialize(std::string ucPortNumber) int IrisSensor_Gas_P0::Initialize(std::string ucPortNumber)
{ {
QString qstrPortName = QString::fromStdString(ucPortNumber); QString qstrPortName = QString::fromStdString(ucPortNumber);
@ -167,7 +231,7 @@ int IrisSensor_Gas_P0::GetVersion()
return 0; return 0;
}// 02 01 09 F4 }// 02 01 09 F4
int IrisSensor_Gas_P0::GetMeasuredData(unsigned long &ulCO2, unsigned long &ulH2O, float &fTPTemperature, float &fPP, float &fPB) int IrisSensor_Gas_P0::GetMeasuredData( double &ulCO2, double &ulH2O, float &fTPTemperature, float &fPP, float &fPB)
{ {
QByteArray qbSend; QByteArray qbSend;
qbSend.append(0x02); qbSend.append(0x02);
@ -184,11 +248,13 @@ int IrisSensor_Gas_P0::GetMeasuredData(unsigned long &ulCO2, unsigned long &ulH2
ParseMeasuredData_Chk(); ParseMeasuredData_Chk();
ulCO2 = m_ulCO2*1.0; ulCO2 = m_ulCO2*1.0/10;
ulH2O = m_ulH2O*1.0; ulH2O = m_ulH2O*1.0/10;
fTPTemperature = m_fTPTemperature; fTPTemperature = m_fTPTemperature;
fPP = m_fPP; fPP = m_fPP;
fPB = m_fPB; fPB = m_fPB;
ulCO2=ulCO2<0?0:ulCO2;
ulH2O=ulH2O<0?0:ulH2O;
return 0; return 0;
} }
@ -275,7 +341,7 @@ int IrisSensor_Gas_P0::ResetCalibration(char cChannel)
qbSend.append(ucChksum); qbSend.append(ucChksum);
SendData_Chk(qbSend.toStdString());
return 0; return 0;
} }

View File

@ -13,7 +13,7 @@ private:
float m_fTPTemperature; float m_fTPTemperature;
float m_fPP, m_fPB; float m_fPP, m_fPB;
unsigned long m_ulCO2, m_ulH2O; long m_ulCO2, m_ulH2O;
unsigned int uiSoftwareVersion, uiHardwareVersion; unsigned int uiSoftwareVersion, uiHardwareVersion;
public: public:
@ -25,7 +25,7 @@ private:
public: public:
int Initialize(std::string ucPortNumber); int Initialize(std::string ucPortNumber);
int GetVersion(); int GetVersion();
int GetMeasuredData(unsigned long &ulCO2, unsigned long &ulH2O,float &fTPTemperature,float &fPP, float &fPB); int GetMeasuredData(double &ulCO2, double &ulH2O,float &fTPTemperature,float &fPP, float &fPB);
int ZeroCalibration_N2(); int ZeroCalibration_N2();
int ZeroCalibration_Air(); int ZeroCalibration_Air();
int SpanCalibration(char cChannel, unsigned int uiPPM); int SpanCalibration(char cChannel, unsigned int uiPPM);

View File

@ -58,6 +58,7 @@ int IrisSensor_WDA_P0::RecvData_NChk(/*std::string sRecv*/)
} }
iCounter = 0; iCounter = 0;
// TODO: 需要确认传感器输出结束符格式 (CRLF/CR/LF) - 当前逻辑可能需要调整
while ((char)(qbData[qbData.size()-2]) != 0x0D && (char)(qbData[qbData.size() - 2]) != 0x0A) while ((char)(qbData[qbData.size()-2]) != 0x0D && (char)(qbData[qbData.size() - 2]) != 0x0A)
{ {
m_pSerialPort->waitForReadyRead(50); m_pSerialPort->waitForReadyRead(50);
@ -114,9 +115,18 @@ int IrisSensor_WDA_P0::ParseData_NChk()
QString dataPart = qstrTemp.mid(iEqualSignIndex + 1); QString dataPart = qstrTemp.mid(iEqualSignIndex + 1);
QStringList dataList = dataPart.split(','); QStringList dataList = dataPart.split(',');
if (dataList.size() >= 6)
{
m_fWindSpeed = dataList[0].toFloat(); m_fWindSpeed = dataList[0].toFloat();
m_fWindDirection = dataList[1].toInt(); m_fWindDirection = dataList[1].toInt();
m_fWindTemp = dataList[5].toFloat(); m_fWindTemp = dataList[5].toFloat();
}
else
{
qDebug() << "Err:Sensor_WDA ParseData Failed, insufficient data fields:" << dataList.size();
return 1;
}
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
qDebug() << m_fWindSpeed; qDebug() << m_fWindSpeed;
qDebug() << m_fWindDirection; qDebug() << m_fWindDirection;
@ -127,7 +137,7 @@ int IrisSensor_WDA_P0::ParseData_NChk()
}*/ }*/
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
}
return 0; return 0;
} }

View File

@ -256,7 +256,7 @@ int VehicleController::SetupEnvironment_M300RTK()
qDebug() << "VehicleController: Func DjiPlatform_RegHalUartHandler. Register hal uart handler error"; qDebug() << "VehicleController: Func DjiPlatform_RegHalUartHandler. Register hal uart handler error";
throw std::runtime_error("Register hal uart handler error."); throw std::runtime_error("Register hal uart handler error.");
} }
//<2F><><EFBFBD><EFBFBD> //<2F><><EFBFBD><EFBFBD>
returnCode = DjiPlatform_RegHalNetworkHandler(&networkHandler); returnCode = DjiPlatform_RegHalNetworkHandler(&networkHandler);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
printf("register hal network handler error"); printf("register hal network handler error");
@ -270,6 +270,17 @@ int VehicleController::SetupEnvironment_M300RTK()
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR; return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
} }
}else { }else {
// returnCode = DjiPlatform_RegHalNetworkHandler(&networkHandler);
// if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
// printf("register hal network handler error");
// return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
// }
// // //Attention: if you want to use camera stream view function, please uncomment it.
// returnCode = DjiPlatform_RegSocketHandler(&socketHandler);
// if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
// printf("register osal socket handler error");
// return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
// }
returnCode = DjiPlatform_RegHalUsbBulkHandler(&usbBulkHandler); returnCode = DjiPlatform_RegHalUsbBulkHandler(&usbBulkHandler);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
printf("register hal usb bulk handler error"); printf("register hal usb bulk handler error");
@ -363,15 +374,17 @@ int VehicleController::StartupPSDK_M300RTK()
USER_LOG_ERROR("power management init error"); USER_LOG_ERROR("power management init error");
} }
osalHandler->TaskSleepMs(5000); osalHandler->TaskSleepMs(5000);
SetupWidget();//<2F>?<EFBFBD><C9BC>?<EFBFBD><DFBC><3E><><EFBFBD> SetupWidget();//<2F>?<EFBFBD><C9BC>?<EFBFBD><DFBC><3E><><EFBFBD>
osalHandler->TaskSleepMs(5000); osalHandler->TaskSleepMs(5000);
SetupMessagePipe();//widget<65><74>vehicle SetupMessagePipe();//widget<65><74>vehicle
// SetupWaypointStatusCallback(); // SetupWaypointStatusCallback();
// InitSystemParams();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD>?<EFBFBD><E4A3AC><EFBFBD><EFBFBD>???<CDB3>??<E4A3AC><C8BB>?<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD><C4A3><EFBFBD>?<EFBFBD>?<EFBFBD>??<CDAC><CAB1><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //InitSystemParams();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD>?<EFBFBD><E4A3AC><EFBFBD><EFBFBD>???<CDB3>??<E4A3AC><C8BB>?<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD><C4A3><EFBFBD>?<EFBFBD>?<EFBFBD>??<CDAC><CAB1><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetupSubscriptions();//?<><CAB5><EFBFBD><EFBFBD>?<EFBFBD>?<EFBFBD><C4B6>?<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD><CCAB><EFBFBD><EFBFBD> //?<><CAB5><EFBFBD><EFBFBD>?<EFBFBD>?<EFBFBD><C4B6>?<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD><CCAB><EFBFBD><EFBFBD>
qDebug()<<"M300RTK PSDK Channel Started."; qDebug()<<"M300RTK PSDK Channel Started.";
m_clsWidget.stratmessageflash();
SetupSubscriptions();
return 0; return 0;
} }
@ -463,7 +476,10 @@ int VehicleController::GetOneDataFrame(M300RTKDataFrame& M300RTKDataFrame)
int VehicleController::SetupSubscriptions() int VehicleController::SetupSubscriptions()
{ {
QString qstrInfo = QString("Waiting for airborn gps Time Valide");
emit Signal_UpdateVehicleMessage(qstrInfo, 0);
T_DjiReturnCode tDjiReturnCode; T_DjiReturnCode tDjiReturnCode;
QString qstrWBackPath("/home/data/Settings/MainSettings.ini");
tDjiReturnCode = DjiFcSubscription_Init(); tDjiReturnCode = DjiFcSubscription_Init();
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
@ -476,10 +492,39 @@ int VehicleController::SetupSubscriptions()
qDebug() << "init data subscription module finished."; qDebug() << "init data subscription module finished.";
} }
// Subscribe GPS related topics for time sync and homepoint altitude
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic GPS_SIGNAL_LEVEL error.";
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic GPS_DATE error.";
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_TIME, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic GPS_TIME error.";
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic ALTITUDE_OF_HOMEPOINT error.";
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
// Subscribe other flight data topics
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_HEIGHT_FUSION, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, DjiTest_FcSubscriptionReceiveHeightCallback); tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_HEIGHT_FUSION, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, DjiTest_FcSubscriptionReceiveHeightCallback);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{ {
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_HEIGHT_FUSION error."; qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_HEIGHT_FUSION error.";
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
@ -487,7 +532,6 @@ int VehicleController::SetupSubscriptions()
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_VELOCITY, DJI_DATA_SUBSCRIPTION_TOPIC_5_HZ, NULL); tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_VELOCITY, DJI_DATA_SUBSCRIPTION_TOPIC_5_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{ {
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_VELOCITY error."; qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_VELOCITY error.";
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
@ -502,7 +546,6 @@ int VehicleController::SetupSubscriptions()
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_QUATERNION, DJI_DATA_SUBSCRIPTION_TOPIC_5_HZ, NULL); tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_QUATERNION, DJI_DATA_SUBSCRIPTION_TOPIC_5_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{ {
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_QUATERNION error."; qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_QUATERNION error.";
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
@ -510,12 +553,89 @@ int VehicleController::SetupSubscriptions()
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_BAROMETER, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL); tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_BAROMETER, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{ {
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_BAROMETER error."; qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_BAROMETER error.";
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
// Wait for GPS signal and sync system time
T_DjiOsalHandler* osalHandler = DjiPlatform_GetOsalHandler();
bool bStop = false;
#ifdef ZZ_FLAG_TEST
bStop = 1;
#endif
T_DjiFcSubscriptionGpsSignalLevel tDjiGpsSignalLevel = { 0 };
T_DjiDataTimestamp tTimestamp = { 0 };
osalHandler->TaskSleepMs(5000);
QTime qtStart = QTime::currentTime();
int iRetryTime = 0;
while (!bStop)
{
if (iRetryTime > 60)
{
bStop = 1;
}
osalHandler->TaskSleepMs(2000);
DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL, (uint8_t*)&tDjiGpsSignalLevel, sizeof(T_DjiFcSubscriptionGpsSignalLevel), &tTimestamp);
qDebug() << "GPS_SIGNAL_LEVEL:" << tDjiGpsSignalLevel;
QTime qtElapsed = QTime::currentTime();
if (tDjiGpsSignalLevel > 1)
{
bStop = 1;
}
else
{
QString qstrInfo = QString("Warning:Weak GPS signal, Waiting....GPS_SIGNAL_LEVEL:%1, Elapsed time:%2").arg(tDjiGpsSignalLevel).arg(qtStart.msecsTo(qtElapsed));
emit Signal_UpdateVehicleMessage(qstrInfo, 0);
}
iRetryTime++;
}
// Get GPS datetime and sync system time
T_DjiFcSubscriptionGpsDate tGpsDate = { 0 };
T_DjiFcSubscriptionGpsTime tGpsTime = { 0 };
T_DjiFcSubscriptionAltitudeOfHomePoint tAltOfHP = { 0 };
T_DjiFcSubscriptionGpsPosition tDjiGpsPosition = { 0 };
DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE, (uint8_t*)&tGpsDate, sizeof(T_DjiFcSubscriptionGpsDate), &tTimestamp);
DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_TIME, (uint8_t*)&tGpsTime, sizeof(T_DjiFcSubscriptionGpsTime), &tTimestamp);
DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT, (uint8_t*)&tAltOfHP, sizeof(T_DjiFcSubscriptionAltitudeOfHomePoint), &tTimestamp);
DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_POSITION, (uint8_t*)&tDjiGpsPosition, sizeof(T_DjiFcSubscriptionGpsPosition), &tTimestamp);
// Save homepoint altitude to config
m_fHeightOfHomePoint_BM = tAltOfHP;
float fHeightOfHomePoint_GPS = tDjiGpsPosition.z;
QSettings qsMainSettings(qstrWBackPath, QSettings::Format::IniFormat);
qsMainSettings.setValue(QString("WBACK/HeightOfHomePoint_BM"), QString("%1").arg(m_fHeightOfHomePoint_BM));
qsMainSettings.setValue(QString("WBACK/HeightOfHomePoint_GPS"), QString("%1").arg(fHeightOfHomePoint_GPS));
qDebug() << "HeightOfHomePoint_BM:" << m_fHeightOfHomePoint_BM;
qDebug() << "HeightOfHomePoint_GPS:" << fHeightOfHomePoint_GPS;
// Sync system time from GPS
QDateTime qdtDateTime;
QString qstrDate = QString::number(tGpsDate);
QString qstrTime = QString::number(tGpsTime);
if (qstrTime.length() == 5)
{
qstrTime = "0" + qstrTime;
}
QString qstrDateTime = qstrDate + qstrTime;
qdtDateTime = QDateTime::fromString(qstrDateTime, "yyyyMMddhhmmss");
if (qdtDateTime.isValid())
{
QString command = "date -s \"" + qdtDateTime.toString("yyyy-MM-dd hh:mm:ss") + "\"";
system(command.toLatin1().data());
time_t stdTime = qdtDateTime.toTime_t();
stime(&stdTime);
qDebug() << "System time synced from GPS:" << qdtDateTime.toString("yyyy-MM-dd hh:mm:ss");
}
qstrInfo = QString("begin system");
emit Signal_UpdateVehicleMessage(qstrInfo, 0);
return 0; return 0;
} }
@ -602,7 +722,7 @@ int VehicleController::SetupMessagePipe()
int VehicleController::SetupWidget() int VehicleController::SetupWidget()
{ {
m_clsWidget.SetUIFilePath("/home/DJI/Widget",100); m_clsWidget.SetUIFilePath("/home/DJI/Widget",100);
// m_clsWidget.SetUIFilePath("/home/pi/airborn/configfile/DJI/Widget",100); //m_clsWidget.SetUIFilePath("/home/pi/airborn/configfile/DJI/Widget",100);
m_clsWidget.SetSettings(m_struUIConfig); m_clsWidget.SetSettings(m_struUIConfig);
@ -611,251 +731,6 @@ int VehicleController::SetupWidget()
return 0; return 0;
} }
int VehicleController::InitSystemParams()
{
T_DjiReturnCode tDjiReturnCode;
QString qstrWBackPath("/home/data/Settings/MainSettings.ini");
///Init
tDjiReturnCode = DjiFcSubscription_Init();
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "init data subscription module error.";
return 1;
}
else
{
qDebug() << "InitSystemDateTime started.";
}
///SubscribeTopic GPS_SIGNAL_LEVEL
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL error.";
return -1;
}
///SubscribeTopic GPS_DATE
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE error.";
return -2;
}
///SubscribeTopic GPS_TIME
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_TIME, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_GPS_TIME error.";
return -3;
}
///SubscribeTopic ALTITUDE_OF_HOMEPOINT
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT error.";
return -4;
}
///SubscribeTopic DJI_FC_SUBSCRIPTION_TOPIC_GPS_POSITION
tDjiReturnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_POSITION, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "Subscribe topic DJI_FC_SUBSCRIPTION_TOPIC_GPS_POSITION error.";
return -5;
}
///Make sure Gps avalible
T_DjiOsalHandler* osalHandler = DjiPlatform_GetOsalHandler();
bool bStop = false;
/////for test
#ifdef ZZ_FLAG_TEST
bStop = 1;
#endif
T_DjiFcSubscriptionGpsSignalLevel tDjiGpsSignalLevel = { 0 };
T_DjiDataTimestamp tTimestamp = { 0 };
osalHandler->TaskSleepMs(5000);
QTime qtStart = QTime::currentTime();
int iRetryTime = 0;
while (!bStop)
{
if (iRetryTime>60)
{
bStop = 1;
}
osalHandler->TaskSleepMs(2000);
DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL, (uint8_t*)&tDjiGpsSignalLevel, sizeof(T_DjiFcSubscriptionGpsSignalLevel), &tTimestamp);
qDebug() << "DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL" << tDjiGpsSignalLevel;
QTime qtElapsed = QTime::currentTime();
if (tDjiGpsSignalLevel>1)
{
bStop = 1;
//emit Signal_UpdatePSDKFloatMessage("");
}
else
{
QString qstrInfo = QString("Warning:Weak GPS signal, Waiting....GPS_SIGNAL_LEVEL:%1, Elapsed time:%2").arg(tDjiGpsSignalLevel).arg(qtStart.msecsTo(qtElapsed));
emit Signal_UpdateVehicleMessage(qstrInfo);
}
iRetryTime++;
}
//osalHandler->TaskSleepMs(2000);
///Get GPS Datetime
T_DjiFcSubscriptionGpsDate tGpsDate = { 0 };
T_DjiFcSubscriptionGpsTime tGpsTime = { 0 };
///Get Other
T_DjiFcSubscriptionAltitudeOfHomePoint tAltOfHP = { 0 };
T_DjiFcSubscriptionGpsPosition tDjiGpsPosition = { 0 };
tDjiReturnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE, (uint8_t*)&tGpsDate, sizeof(T_DjiFcSubscriptionGpsDate), &tTimestamp);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_GetLatestValueOfTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE.";
return -1;
}
tDjiReturnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_TIME, (uint8_t*)&tGpsTime, sizeof(T_DjiFcSubscriptionGpsTime), &tTimestamp);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_GetLatestValueOfTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE.";
return -2;
}
tDjiReturnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT, (uint8_t*)&tAltOfHP, sizeof(T_DjiFcSubscriptionAltitudeOfHomePoint), &tTimestamp);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_GetLatestValueOfTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT.";
return -3;
}
tDjiReturnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_POSITION, (uint8_t*)&tDjiGpsPosition, sizeof(T_DjiFcSubscriptionGpsPosition), &tTimestamp);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_GetLatestValueOfTopic error.DJI_FC_SUBSCRIPTION_TOPIC_VELOCITY";
return -4;
}
m_fHeightOfHomePoint_BM = tAltOfHP;
float fHeightOfHomePoint_GPS= tDjiGpsPosition.z;
QString qstrHeightOfHomePoint_BM = QString("%1").arg(m_fHeightOfHomePoint_BM);
QString qstrHeightOfHomePoint_GPS = QString("%1").arg(tDjiGpsPosition.z);
//////////////////////////////////////////////////////////////////////////write back AOHP
QSettings qsMainSettings(qstrWBackPath, QSettings::Format::IniFormat);
qsMainSettings.setValue(QString("WBACK/HeightOfHomePoint_BM"), qstrHeightOfHomePoint_BM);
qsMainSettings.setValue(QString("WBACK/HeightOfHomePoint_GPS"), qstrHeightOfHomePoint_GPS);
qDebug() << qstrHeightOfHomePoint_BM << m_fHeightOfHomePoint_BM;
qDebug() << qstrHeightOfHomePoint_GPS << tDjiGpsPosition.z;
//////////////////////////////////////////////////////////////////////////
//qDebug() << "Date" << tGpsDate << "Time" << tGpsTime;
QDateTime qdtDateTime;
QString qstrDate, qstrTime,qstrDateTime;
qstrDate = QString::number(tGpsDate);
qstrTime = QString::number(tGpsTime);
if (qstrTime.length()==5)
{
qstrTime = "0" + qstrTime/*+"000"*/;
}
// else
// {
// qstrTime= qstrTime + "000";
// }
// QDate qd;
// qd = QDate::fromString("20121022", "yyyyMMdd");
// QTime qt;
// qt.fromString(qstrTime,"hhmmsszzz");
qstrDateTime = qstrDate + qstrTime;
qdtDateTime = QDateTime::fromString(qstrDateTime, "yyyyMMddhhmmss");
QString command="date -s \""+qdtDateTime.toString("yyyy-MM-dd hh:mm:ss")+"\"";
system(command.toLatin1().data());
time_t stdTime = qdtDateTime.toTime_t();
if (qdtDateTime.isValid())
{
stime(&stdTime);
}
#ifndef ZZ_FLAG_TEST
//stime(&stdTime);
#else
#endif
// qDebug() << qstrDate;
// qDebug() << qstrTime;
// qDebug() << qd.isValid();
// qDebug() << qd.toString("yyyyMMdd");
// qDebug() << qt.isValid();
// qDebug() << qt;
qDebug() <<"[GPS Time Check]" << qdtDateTime.isValid();
qDebug() <<"[GPS Time:]" << qstrDateTime << "####" << qdtDateTime.toString("yyyyMMddhhmmsszzz");
///UnSubscribeTopic
/*tDjiReturnCode = DjiFcSubscription_UnSubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_UnSubscribeTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL.";
return -11;
}*/
tDjiReturnCode = DjiFcSubscription_UnSubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_UnSubscribeTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_GPS_SIGNAL_LEVEL.";
return -11;
}
tDjiReturnCode = DjiFcSubscription_UnSubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_UnSubscribeTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_GPS_DATE.";
return -12;
}
tDjiReturnCode = DjiFcSubscription_UnSubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_TIME);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_UnSubscribeTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_GPS_TIME.";
return -13;
}
tDjiReturnCode = DjiFcSubscription_UnSubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_UnSubscribeTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT.";
return -14;
}
tDjiReturnCode = DjiFcSubscription_UnSubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_POSITION);
if (tDjiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
qDebug() << "DjiFcSubscription_UnSubscribeTopic module error,DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT.";
return -15;
}
return 0;
}
int VehicleController::Slot_OnChangeCaptureMode(char cMode) int VehicleController::Slot_OnChangeCaptureMode(char cMode)
{ {
//ZZ_Widget_M300RTK* test = qobject_cast<ZZ_Widget_M300RTK*>(sender()); //ZZ_Widget_M300RTK* test = qobject_cast<ZZ_Widget_M300RTK*>(sender());

View File

@ -70,7 +70,7 @@ private:
int SetupWidget(); int SetupWidget();
/// ///
public:///for test public:///for test
int InitSystemParams(); // int InitSystemParams();
int SetupSubscriptions(); int SetupSubscriptions();
/// ///
public:///for test public:///for test
@ -84,7 +84,7 @@ signals:
int Signal_StartCapture(); int Signal_StartCapture();
int Signal_StopCapture(); int Signal_StopCapture();
void Signal_UpdateVehicleMessage(QString qstrMessage); void Signal_UpdateVehicleMessage(QString qstrMessage,int lineid);
public slots: public slots:
int Slot_OnChangeCaptureMode(char cMode); int Slot_OnChangeCaptureMode(char cMode);
///for test ///for test

View File

@ -1,45 +1,65 @@
#include "Widget_M300RTK.h" #include "Widget_M300RTK.h"
enum AireType #define RLX_LINENUMBER 0
{
enum AireType {
Aire_Aire = 1, Aire_Aire = 1,
Aire_N2=0, Aire_N2 = 0,
Aire_NONE=2,
}; };
enum Target_Gas { enum Target_Gas {
Target_CO2 = 0, Target_CO2 = 0,
Target_H2O = 1, Target_H2O = 1,
Target_NONE=2,
}; };
int32_t CuttrentGasValue = 0; int32_t CuttrentGasValue = 0;
int32_t passwordforsetting = 0;
int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = 0; int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = 0;
int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode = 1; int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode = 1;
int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueList_DecisionHeight = 1; int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueList_DecisionHeight = 1;
int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate = 0; int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate = 0;
AireType CurrentAireType = Aire_Aire; AireType CurrentAireType = Aire_NONE;
Target_Gas CurrentTargetGas = Target_CO2; Target_Gas CurrentTargetGas = Target_NONE;
float NowTempreature = 0; float NowTempreature = 0;
bool isnowsystemWorking = false; bool isnowsystemWorking = false;
QStringList Strforshow;
QStringList StrforshowCurrent;
QStringList StrforshowLast;
vector<int> indexforshow;
ZZ_Widget_M300RTK::ZZ_Widget_M300RTK(QObject* parent /*= nullptr*/) ZZ_Widget_M300RTK::ZZ_Widget_M300RTK(QObject *parent /*= nullptr*/) {
{
m_iFlagIsVehicleCapturing = 0; m_iFlagIsVehicleCapturing = 0;
Strforshow.append("");
Strforshow.append("");
Strforshow.append("");
Strforshow.append("");
Strforshow.append("");
// Strforshow.append("");
// Strforshow.append("");
StrforshowCurrent = Strforshow;
StrforshowLast = Strforshow;
indexforshow.resize(Strforshow.size());
for (int i = 0; i < indexforshow.size(); i++) {
indexforshow[i] = 0;
}
connect(&m_TimerForflash, &QTimer::timeout, this, &ZZ_Widget_M300RTK::Slot_flash_screen);
connect(this,&ZZ_Widget_M300RTK::Signal_UpdatePSDKFloatMessage,this,&ZZ_Widget_M300RTK::Slot_UpdatePSDKFloatMessage);
connect(this, &ZZ_Widget_M300RTK::Signal_UpdatePSDKFloatMessage, this,
&ZZ_Widget_M300RTK::Slot_UpdatePSDKFloatMessage);
m_bIsFlashOn = false;
} }
ZZ_Widget_M300RTK::~ZZ_Widget_M300RTK() ZZ_Widget_M300RTK::~ZZ_Widget_M300RTK() {
{
} }
int ZZ_Widget_M300RTK::InitParam() int ZZ_Widget_M300RTK::InitParam() {
{
return 0; return 0;
} }
int ZZ_Widget_M300RTK::SetUIFilePath(char* pcUIFilePath, uint16_t uiLength) int ZZ_Widget_M300RTK::SetUIFilePath(char *pcUIFilePath, uint16_t uiLength) {
{ if (uiLength >= 256) {
if (uiLength>=256)
{
qDebug() << "ZZ_Widget_M300RTK: Func SetUIFilePath. File path is too long"; qDebug() << "ZZ_Widget_M300RTK: Func SetUIFilePath. File path is too long";
return 1; return 1;
} }
@ -51,22 +71,18 @@ int ZZ_Widget_M300RTK::SetUIFilePath(char* pcUIFilePath, uint16_t uiLength)
} }
int ZZ_Widget_M300RTK::UpdateCaptureStatus(int iStatus) {
int ZZ_Widget_M300RTK::UpdateCaptureStatus(int iStatus)
{
m_iFlagIsVehicleCapturing = iStatus; m_iFlagIsVehicleCapturing = iStatus;
} }
int ZZ_Widget_M300RTK::GetSettings(UIConfig &struUIConfig) int ZZ_Widget_M300RTK::GetSettings(UIConfig &struUIConfig) {
{
struUIConfig.sDecisionHeight = m_siDjiWidgetValueList_DecisionHeight; struUIConfig.sDecisionHeight = m_siDjiWidgetValueList_DecisionHeight;
struUIConfig.sCaptureMode = m_siDjiWidgetValueList_CaptureMode; struUIConfig.sCaptureMode = m_siDjiWidgetValueList_CaptureMode;
struUIConfig.sSamplingRate = m_siDjiWidgetValueList_SamplingRate; struUIConfig.sSamplingRate = m_siDjiWidgetValueList_SamplingRate;
return 0; return 0;
} }
int ZZ_Widget_M300RTK::SetSettings(UIConfig struUIConfig) int ZZ_Widget_M300RTK::SetSettings(UIConfig struUIConfig) {
{
m_struUIConfig = struUIConfig; m_struUIConfig = struUIConfig;
m_siDjiWidgetValueList_CaptureMode = struUIConfig.sCaptureMode; m_siDjiWidgetValueList_CaptureMode = struUIConfig.sCaptureMode;
m_siDjiWidgetValueList_DecisionHeight = struUIConfig.sDecisionHeight; m_siDjiWidgetValueList_DecisionHeight = struUIConfig.sDecisionHeight;
@ -74,10 +90,13 @@ int ZZ_Widget_M300RTK::SetSettings(UIConfig struUIConfig)
return 0; return 0;
} }
int ZZ_Widget_M300RTK::PreparteEnvironment() void ZZ_Widget_M300RTK::stratmessageflash() {
{
m_TimerForflash.start(5000);
m_bIsFlashOn = true;
}
int ZZ_Widget_M300RTK::PreparteEnvironment() {
T_DjiReturnCode djiStat; T_DjiReturnCode djiStat;
static const T_DjiWidgetHandlerListItem s_DjiWidgetHandlerList[] = static const T_DjiWidgetHandlerListItem s_DjiWidgetHandlerList[] =
@ -86,179 +105,187 @@ int ZZ_Widget_M300RTK::PreparteEnvironment()
{1, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, {1, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this},
{2, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, {2, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this},
{3, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, {3, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this},
{4, DJI_WIDGET_TYPE_INT_INPUT_BOX, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, {
{5, DJI_WIDGET_TYPE_BUTTON, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, 4, DJI_WIDGET_TYPE_INT_INPUT_BOX, ZZ_Widget_M300RTK::OnUpdateWidgetValue,
{6, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, ZZ_Widget_M300RTK::OnLoadWidgetValue, this
{7, DJI_WIDGET_TYPE_BUTTON, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, },
{8, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, {
{9, DJI_WIDGET_TYPE_INT_INPUT_BOX, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}, 5, DJI_WIDGET_TYPE_INT_INPUT_BOX, ZZ_Widget_M300RTK::OnUpdateWidgetValue,
{10, DJI_WIDGET_TYPE_BUTTON, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this} ZZ_Widget_M300RTK::OnLoadWidgetValue, this
},
{6, DJI_WIDGET_TYPE_BUTTON, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this},
{7, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this},
{8, DJI_WIDGET_TYPE_BUTTON, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this},
{9, DJI_WIDGET_TYPE_LIST, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this},
{
10, DJI_WIDGET_TYPE_INT_INPUT_BOX, ZZ_Widget_M300RTK::OnUpdateWidgetValue,
ZZ_Widget_M300RTK::OnLoadWidgetValue, this
},
{11, DJI_WIDGET_TYPE_BUTTON, ZZ_Widget_M300RTK::OnUpdateWidgetValue, ZZ_Widget_M300RTK::OnLoadWidgetValue, this}
}; };
djiStat = DjiWidget_Init(); djiStat = DjiWidget_Init();
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
{ qDebug() << "ZZ_Widget_M300RTK: Func DjiWidget_Init. Dji widget init error" << djiStat;
qDebug() << "ZZ_Widget_M300RTK: Func DjiWidget_Init. Dji widget init error"<< djiStat;
//return djiStat; //return djiStat;
} }
djiStat = DjiWidget_RegDefaultUiConfigByDirPath(m_qstrFilePath.toLatin1()); djiStat = DjiWidget_RegDefaultUiConfigByDirPath(m_qstrFilePath.toLatin1());
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
{
qDebug() << m_qstrFilePath.toLatin1(); qDebug() << m_qstrFilePath.toLatin1();
qDebug() << "ZZ_Widget_M300RTK: Func DjiWidget_RegDefaultUiConfigByDirPath.Add default widget ui config error"; qDebug() << "ZZ_Widget_M300RTK: Func DjiWidget_RegDefaultUiConfigByDirPath.Add default widget ui config error";
return djiStat; return djiStat;
} }
djiStat = DjiWidget_RegHandlerList(s_DjiWidgetHandlerList, sizeof(s_DjiWidgetHandlerList) / sizeof(T_DjiWidgetHandlerListItem)); djiStat = DjiWidget_RegHandlerList(s_DjiWidgetHandlerList,
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) sizeof(s_DjiWidgetHandlerList) / sizeof(T_DjiWidgetHandlerListItem));
{ if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
qDebug() <<"ZZ_Widget_M300RTK: Func DjiWidget_RegHandlerList.Set widget handler list error"; qDebug() << "ZZ_Widget_M300RTK: Func DjiWidget_RegHandlerList.Set widget handler list error";
return djiStat; return djiStat;
} }
return 0; return 0;
} }
int ZZ_Widget_M300RTK::UploadResources() int ZZ_Widget_M300RTK::UploadResources() {
{
return 0; return 0;
} }
int ZZ_Widget_M300RTK::test_UpdatePSDKFloatMessage(QString qstrMessage) int ZZ_Widget_M300RTK::test_UpdatePSDKFloatMessage(QString qstrMessage) {
{
T_DjiReturnCode djiStat; T_DjiReturnCode djiStat;
djiStat = DjiWidgetFloatingWindow_ShowMessage(qstrMessage.toLatin1()); djiStat = DjiWidgetFloatingWindow_ShowMessage(qstrMessage.toLatin1());
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
{
qDebug() << "ZZ_Widget_M300RTK: Func test_UpdatePSDKFloatMessage.Floating window show message error"; qDebug() << "ZZ_Widget_M300RTK: Func test_UpdatePSDKFloatMessage.Floating window show message error";
} }
return 0; return 0;
} }
T_DjiReturnCode ZZ_Widget_M300RTK::OnUpdateWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t value, void* userData) T_DjiReturnCode ZZ_Widget_M300RTK::OnUpdateWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t value,
{ void *userData) {
ZZ_Widget_M300RTK* pCaller = (ZZ_Widget_M300RTK*)userData; ZZ_Widget_M300RTK *pCaller = (ZZ_Widget_M300RTK *) userData;
if (pCaller->m_iFlagIsVehicleCapturing) if (pCaller->m_iFlagIsVehicleCapturing) {
{
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
if (widgetType == DJI_WIDGET_TYPE_INT_INPUT_BOX) { if (widgetType == DJI_WIDGET_TYPE_INT_INPUT_BOX) {
if (index == 4) if (index == 5) {
{ qDebug() << "now tempreatrue is " << value;
qDebug()<<"now tempreatrue is "<<value; NowTempreature = value;
NowTempreature=value;
} }
if (index == 9) if (index == 10) {
{
qDebug() << "now gas value is " << value; qDebug() << "now gas value is " << value;
CuttrentGasValue = value; CuttrentGasValue = value;
} }
if (index==4) {
passwordforsetting = value;
qDebug() << "now password is " << passwordforsetting;
} }
if (widgetType== DJI_WIDGET_TYPE_BUTTON) { }
if (index==5) if (widgetType == DJI_WIDGET_TYPE_BUTTON) {
{ if (passwordforsetting!=123456) {
pCaller->emit Signal_UpdatePSDKFloatMessage("wrong password",RLX_LINENUMBER);
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
if (index == 6) {
//qDebug()<<"now value is "<<value; //qDebug()<<"now value is "<<value;
if (value == 1) {
if (value==1) if (isnowsystemWorking == true) return 0;
{ if (NowTempreature == 0) {
if (isnowsystemWorking==true) return 0; pCaller->emit Signal_UpdatePSDKFloatMessage("please set correct temperature first",RLX_LINENUMBER);
if (NowTempreature==0) {
pCaller->emit Signal_UpdatePSDKFloatMessage("please set correct temperature first");
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
isnowsystemWorking= true; isnowsystemWorking = true;
pCaller->emit Signal_UpdatePSDKFloatMessage("calibrating wind Sensor temperature:"+QString::number(NowTempreature*1.0/10)); pCaller->emit Signal_UpdatePSDKFloatMessage(
pCaller->emit SendCommand("WDA", "StartCalibrate#"+QString::number(NowTempreature*1.0/10)); "calibrating wind Sensor temperature:" + QString::number(NowTempreature * 1.0 / 10),RLX_LINENUMBER);
//qt 消息队列执行
pCaller->emit SendCommand("WDA", "StartCalibrate#" + QString::number(NowTempreature * 1.0 / 10));
} }
} }
if (index==7) { if (index == 8) {
if (value==1) if (value == 1) {
{ if (isnowsystemWorking == true) return 0;
if (isnowsystemWorking==true) return 0; isnowsystemWorking = true;
isnowsystemWorking= true;
QString AiretypeStr; QString AiretypeStr;
if (CurrentAireType==Aire_Aire) { if (CurrentAireType == Aire_Aire) {
AiretypeStr="Air"; AiretypeStr = "Air";
} else if (CurrentAireType == Aire_N2) {
AiretypeStr = "N2";
} }
else { else {
AiretypeStr="N2"; pCaller->emit Signal_UpdatePSDKFloatMessage("please select correct aire type first",RLX_LINENUMBER);
isnowsystemWorking = false;
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
qDebug()<<"start gas sensor zero calibrate with "+AiretypeStr; qDebug() << "start gas sensor zero calibrate with " + AiretypeStr;
pCaller->emit Signal_UpdatePSDKFloatMessage("ZeroCalibrate with "+AiretypeStr); pCaller->emit Signal_UpdatePSDKFloatMessage("ZeroCalibrate with " + AiretypeStr,RLX_LINENUMBER);
pCaller->emit SendCommand("GAS", "ZeroCalibrate#"+AiretypeStr); QCoreApplication::processEvents();
pCaller->emit SendCommand("GAS", "ZeroCalibrate#" + AiretypeStr);
qDebug() << "---------------------------------------------";
} }
} }
if (index==10) { if (index == 11) {
if (value==1) if (value == 1) {
{ if (isnowsystemWorking == true) return 0;
if (isnowsystemWorking==true) return 0; isnowsystemWorking = true;
isnowsystemWorking= true;
QString TargetGasStr; QString TargetGasStr;
if (CurrentTargetGas==Target_CO2) { if (CurrentTargetGas == Target_CO2) {
TargetGasStr="CO2"; TargetGasStr = "CO2";
} else if (CurrentTargetGas==Target_H2O) {
TargetGasStr = "H2O";
} }
else { else {
TargetGasStr="H2O"; pCaller->emit Signal_UpdatePSDKFloatMessage("please select correct target gas first",RLX_LINENUMBER);
isnowsystemWorking = false;
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
//确保当前气体值不为0 //确保当前气体值不为0
if (CuttrentGasValue==0) { if (CuttrentGasValue == 0) {
pCaller->emit Signal_UpdatePSDKFloatMessage("please set correct gas value first"); pCaller->emit Signal_UpdatePSDKFloatMessage("please set correct gas value first",RLX_LINENUMBER);
isnowsystemWorking=false; isnowsystemWorking = false;
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} }
qDebug()<<"start gas sensor span calibrate with "+TargetGasStr+" value is "+QString::number(CuttrentGasValue); qDebug() << "start gas sensor span calibrate with " + TargetGasStr + " value is " + QString::number(
pCaller->emit Signal_UpdatePSDKFloatMessage(TargetGasStr+" Span Calibrating gas value is "+QString::number(CuttrentGasValue)); CuttrentGasValue);
pCaller->emit SendCommand("GAS", "SpanCalibrate#"+TargetGasStr+"#"+QString::number(CuttrentGasValue)); pCaller->emit Signal_UpdatePSDKFloatMessage(
TargetGasStr + " Span Calibrating gas value is " + QString::number(CuttrentGasValue),
RLX_LINENUMBER);
pCaller->emit SendCommand(
"GAS", "SpanCalibrate#" + TargetGasStr + "#" + QString::number(CuttrentGasValue));
}
} }
} }
if (widgetType == DJI_WIDGET_TYPE_SWITCH) {
} if (ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode == 0) {
pCaller->emit Signal_UpdatePSDKFloatMessage("Automatic capture mode.Please don't use this function",
RLX_LINENUMBER);
if (widgetType == DJI_WIDGET_TYPE_SWITCH )
{
if (ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode==0)
{
pCaller->emit Signal_UpdatePSDKFloatMessage("Automatic capture mode.Please don't use this function");
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} } else {
else if (value == 1) {
{ if (isnowsystemWorking == true) {
if (value==1)
{
if (isnowsystemWorking==true) {
// ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = !value; // ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = !value;
return 0; return 0;
} }
isnowsystemWorking= true; isnowsystemWorking = true;
pCaller->emit Signal_UpdatePSDKFloatMessage("start capture"); pCaller->emit Signal_UpdatePSDKFloatMessage("start capture",RLX_LINENUMBER);
pCaller->emit Signal_StartCapture(); pCaller->emit Signal_StartCapture();
} } else {
else if (isnowsystemWorking == false) {
{
if (isnowsystemWorking==false) {
// ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = !value; // ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = !value;
return 0; return 0;
} }
isnowsystemWorking= false; isnowsystemWorking = false;
pCaller->emit Signal_UpdatePSDKFloatMessage("capture stopped"); pCaller->emit Signal_UpdatePSDKFloatMessage("capture stopped",RLX_LINENUMBER);
pCaller->emit Signal_StopCapture(); pCaller->emit Signal_StopCapture();
} }
} }
ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = value; ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = value;
@ -269,33 +296,20 @@ T_DjiReturnCode ZZ_Widget_M300RTK::OnUpdateWidgetValue(E_DjiWidgetType widgetTyp
//pCaller->test_UpdatePSDKFloatMessage(qstrTest); //pCaller->test_UpdatePSDKFloatMessage(qstrTest);
//qstrTest = "12345"; //qstrTest = "12345";
//pCaller->emit Signal_UpdatePSDKFloatMessage(qstrTest); //pCaller->emit Signal_UpdatePSDKFloatMessage(qstrTest);
} }
if (widgetType == DJI_WIDGET_TYPE_LIST ) if (widgetType == DJI_WIDGET_TYPE_LIST) {
{ if (index == 1) {
if (index==1) pCaller->emit Signal_UpdateCaptureMode((char) value);
{
pCaller->emit Signal_UpdateCaptureMode((char)value);
ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode = value; ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode = value;
} } else if (index == 2) {
else if (index == 2)
{
ZZ_Widget_M300RTK::m_siDjiWidgetValueList_DecisionHeight = value; ZZ_Widget_M300RTK::m_siDjiWidgetValueList_DecisionHeight = value;
} } else if (index == 3) {
else if (index == 3)
{
ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate = value; ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate = value;
} } else if (index == 7) {
else if (index==6) CurrentAireType = (AireType) value;
{ } else if (index == 9) {
CurrentAireType = (AireType)value; CurrentTargetGas = (Target_Gas) value;
}
else if (index==8)
{
CurrentTargetGas = (Target_Gas)value;
} }
@ -308,48 +322,36 @@ T_DjiReturnCode ZZ_Widget_M300RTK::OnUpdateWidgetValue(E_DjiWidgetType widgetTyp
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS; return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
} }
T_DjiReturnCode ZZ_Widget_M300RTK::OnLoadWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t* value, void* userData) T_DjiReturnCode ZZ_Widget_M300RTK::OnLoadWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t *value,
{ void *userData) {
if (widgetType == DJI_WIDGET_TYPE_SWITCH) {
if (widgetType == DJI_WIDGET_TYPE_SWITCH)
{
//qDebug() << "OnLoadWidgetValue " << "widgetType " << widgetType << "index " << index << "value " << value; //qDebug() << "OnLoadWidgetValue " << "widgetType " << widgetType << "index " << index << "value " << value;
*value= ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn; *value = ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn;
} }
if (widgetType == DJI_WIDGET_TYPE_LIST) if (widgetType == DJI_WIDGET_TYPE_LIST) {
{
//qDebug() << "OnLoadWidgetValue " << "widgetType " << widgetType << "index " << index << "value " << value; //qDebug() << "OnLoadWidgetValue " << "widgetType " << widgetType << "index " << index << "value " << value;
if (index == 1) if (index == 1) {
{
*value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode; *value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode;
} } else if (index == 2) {
else if (index == 2)
{
*value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_DecisionHeight; *value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_DecisionHeight;
} } else if (index == 3) {
else if (index == 3)
{
*value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate; *value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate;
} else if (index == 7) {
*value = (int32_t) CurrentAireType;
} else if (index == 9) {
*value = (int32_t) CurrentTargetGas;
} }
else if (index == 6)
{
*value = (int32_t)CurrentAireType;
} else if (index == 8)
{
*value = (int32_t)CurrentTargetGas;
} }
if (widgetType == DJI_WIDGET_TYPE_INT_INPUT_BOX) {
if (index==4) {
*value = passwordforsetting;
} }
if (widgetType==DJI_WIDGET_TYPE_INT_INPUT_BOX) if (index == 5) {
{
if (index == 4)
{
*value = NowTempreature; *value = NowTempreature;
} }
if (index == 9) if (index == 10) {
{
*value = CuttrentGasValue; *value = CuttrentGasValue;
} }
} }
@ -358,34 +360,96 @@ T_DjiReturnCode ZZ_Widget_M300RTK::OnLoadWidgetValue(E_DjiWidgetType widgetType,
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS; return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
} }
int ZZ_Widget_M300RTK::Slot_UpdatePSDKFloatMessage(QString qstrMessage) int ZZ_Widget_M300RTK::Slot_UpdatePSDKFloatMessage(QString qstrMessage, int lineid) {
{
T_DjiReturnCode djiStat; T_DjiReturnCode djiStat;
Strforshow[lineid] = qstrMessage;
djiStat = DjiWidgetFloatingWindow_ShowMessage(qstrMessage.toLatin1()); // qDebug() << "float message line " << lineid << " : " << qstrMessage;
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) Slot_flash_screen();
{ //
qDebug() << "ZZ_Widget_M300RTK: Func test_UpdatePSDKFloatMessage.Floating window show message error"; // QString strinone="";
} // for (int i = 0; i < Strforshow.size(); i++) {
// strinone+=Strforshow[i]+"\r\n";
// }
// djiStat = DjiWidgetFloatingWindow_ShowMessage(strinone.toLatin1());
// if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
// {
// qDebug() << "ZZ_Widget_M300RTK: Func test_UpdatePSDKFloatMessage.Floating window show message error";
// }
return 0; return 0;
} }
void ZZ_Widget_M300RTK::BackCommand(QString Worker, QString Command) { void ZZ_Widget_M300RTK::BackCommand(QString Worker, QString Command) {
if (Worker=="WDA") { if (Worker == "WDA") {
if (Command=="Finish") { if (Command == "Finish") {
isnowsystemWorking= false; isnowsystemWorking = false;
qDebug()<<"wind calibrate finished"; qDebug() << "wind calibrate finished";
emit Signal_UpdatePSDKFloatMessage("wind calibrate finished"); emit Signal_UpdatePSDKFloatMessage("wind calibrate finished",RLX_LINENUMBER);
} }
} } else if (Worker == "GAS") {
else if (Worker == "GAS") {
if (Command == "Finish") { if (Command == "Finish") {
isnowsystemWorking = false; isnowsystemWorking = false;
qDebug() << "gas zero calibrate finished"; qDebug() << "gas zero calibrate finished";
emit Signal_UpdatePSDKFloatMessage("gas zero calibrate finished"); emit Signal_UpdatePSDKFloatMessage("gas zero calibrate finished",RLX_LINENUMBER);
} }
} }
} }
void ZZ_Widget_M300RTK::Slot_flash_screen() {
QString strinone = "";
// 获取当前日期时间
QDateTime QDateTime= QDateTime::currentDateTime();
Strforshow[Strforshow.size()-1]=QDateTime.toString("yyyy-MM-dd hh:mm:ss");
;
// QTime currentTime = QTime::currentTime();
// Strforshow.at(Strforshow.length())=currentTime.toString("hh:mm:ss");
// qDebug() << "Slot_flash_screen time:" << currentTime;
StrforshowCurrent = Strforshow;
//
QStringList strforsend;
if (StrforshowCurrent==StrforshowLast&&StrforshowCurrent.at(0).size()<25) {
//没有变化不需要更新
return;
}
for (int i = 0; i < StrforshowCurrent.size(); i++) {
if (i==0) {
if (StrforshowCurrent.at(i) != StrforshowLast.at(i)) {
indexforshow[i] = 0;
}
if (StrforshowCurrent.at(i).size() < 25 || i >= 1) {
//只有第一行需要滚动显示
strforsend.append(StrforshowCurrent.at(i));
indexforshow[i] = 0;
} else {
QString doublestr = StrforshowCurrent.at(i) + StrforshowCurrent.at(i);
QString strtemp = doublestr.mid(indexforshow[i], 30);
strforsend.append(strtemp);
if (indexforshow[i] >= StrforshowCurrent.at(i).size()) {
indexforshow[i] = 0;
} else
indexforshow[i]++;
}
}else {
strforsend.append(StrforshowCurrent.at(i));
}
}
for (int i = 0; i < strforsend.size(); i++) {
strinone += strforsend[i] + "\r\n";
}
T_DjiReturnCode djiStat = DjiWidgetFloatingWindow_ShowMessage(strinone.toLatin1());
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
qDebug() << "ZZ_Widget_M300RTK: Func test_UpdatePSDKFloatMessage.Floating window show message error";
}
StrforshowLast = StrforshowCurrent;
}

View File

@ -17,11 +17,13 @@ public:
public: public:
private: private:
QTimer m_TimerForflash;
int m_iFlagIsVehicleCapturing; int m_iFlagIsVehicleCapturing;
UIConfig m_struUIConfig; UIConfig m_struUIConfig;
short m_sFlagCaptureMode; short m_sFlagCaptureMode;
QString m_qstrFilePath; QString m_qstrFilePath;
static int32_t m_siDjiWidgetValueBtn, m_siDjiWidgetValueList_CaptureMode, m_siDjiWidgetValueList_SamplingRate, m_siDjiWidgetValueList_DecisionHeight; static int32_t m_siDjiWidgetValueBtn, m_siDjiWidgetValueList_CaptureMode, m_siDjiWidgetValueList_SamplingRate, m_siDjiWidgetValueList_DecisionHeight;
bool m_bIsFlashOn;
public: public:
int PreparteEnvironment(); int PreparteEnvironment();
int SetUIFilePath(char* pcUIFilePath, uint16_t uiLength); int SetUIFilePath(char* pcUIFilePath, uint16_t uiLength);
@ -29,20 +31,23 @@ public:
int GetSettings(UIConfig &struUIConfig); int GetSettings(UIConfig &struUIConfig);
int SetSettings(UIConfig struUIConfig); int SetSettings(UIConfig struUIConfig);
void stratmessageflash();
//int UpdateCaptureStatus(int iStatus); //int UpdateCaptureStatus(int iStatus);
private: private:
int InitParam(); int InitParam();
int UploadResources(); int UploadResources();
int test_UpdatePSDKFloatMessage(QString qstrMessage); int test_UpdatePSDKFloatMessage(QString qstrMessage);
public: public:
static T_DjiReturnCode OnUpdateWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t value,void* userData); static T_DjiReturnCode OnUpdateWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t value,void* userData);
static T_DjiReturnCode OnLoadWidgetValue (E_DjiWidgetType widgetType, uint32_t index, int32_t* value,void* userData); static T_DjiReturnCode OnLoadWidgetValue (E_DjiWidgetType widgetType, uint32_t index, int32_t* value,void* userData);
public slots: public slots:
int Slot_UpdatePSDKFloatMessage(QString qstrMessage); int Slot_UpdatePSDKFloatMessage(QString qstrMessage,int lineid);
void BackCommand(QString Worker, QString Command); void BackCommand(QString Worker, QString Command);
void Slot_flash_screen();
signals: signals:
void Signal_UpdatePSDKFloatMessage(QString qstrMessage); void Signal_UpdatePSDKFloatMessage(QString qstrMessage,int lineid);
///0:Auto 1:Manual ///0:Auto 1:Manual
void Signal_UpdateCaptureMode(char cMode); void Signal_UpdateCaptureMode(char cMode);

View File

@ -2,13 +2,18 @@
#include "unistd.h" #include "unistd.h"
#include <cmath> #include <cmath>
#include "hal_uart.h" #include "hal_uart.h"
#define LINECOMMEND 0
#define LINEDATASHOW 1
std::atomic<int> WorkingState;
std::atomic<int> SavingDate;
CMainAcqThread::CMainAcqThread(QObject* parent /*= nullptr*/) CMainAcqThread::CMainAcqThread(QObject* parent /*= nullptr*/)
{ {
m_iFlagCaptureStatus = 0; m_iFlagCaptureStatus = 0;
iFlagIsPathGenerated = false; iFlagIsPathGenerated = false;
m_clsCapTimer.setTimerType(Qt::PreciseTimer); m_clsCapTimer.setTimerType(Qt::PreciseTimer);
WorkingState = 0;
SavingDate = 0;
#ifdef ZZ_FLAG_TEST #ifdef ZZ_FLAG_TEST
//connect(&m_clsCapTimer, &QTimer::timeout, this, &CMainAcqThread::OnTestTimer); //connect(&m_clsCapTimer, &QTimer::timeout, this, &CMainAcqThread::OnTestTimer);
@ -52,15 +57,16 @@ int CMainAcqThread::StartUp()
m_ctrlVehicle.StartupPSDK_M300RTK(); m_ctrlVehicle.StartupPSDK_M300RTK();
QString qstrMessage = "Initializing sensors,Please wait..."; QString qstrMessage = "Initializing sensors,Please wait...";
emit Signal_UpdateVehicleMessage(qstrMessage); emit Signal_UpdateVehicleMessage(qstrMessage,LINECOMMEND);
int iRes = m_ctrlGasSensor.Initialize(m_struSensorPort.qstrGasSensorPort.toStdString()); int iRes = m_ctrlGasSensor.Initialize(m_struSensorPort.qstrGasSensorPort.toStdString());
if (iRes!=0) if (iRes!=0)
{ {
qstrMessage.clear(); qstrMessage.clear();
qstrMessage.append("Fatal Error!!! Gas sensor not connected.Please check."); qstrMessage.append("Fatal Error!!! Gas sensor not connected.Please check.");
//qstrMessage = "Fatal Error!!! Gas sensor not connected.Please check."; qstrMessage = "Fatal Error!!! Gas sensor not connected.Please check.";
emit Signal_UpdateVehicleMessage(qstrMessage); emit Signal_UpdateVehicleMessage(qstrMessage,LINECOMMEND);
qDebug() << qstrMessage; qDebug() << qstrMessage;
//return 1; //return 1;
} }
@ -69,28 +75,30 @@ int CMainAcqThread::StartUp()
if (iRes != 0) if (iRes != 0)
{ {
qstrMessage.append("Fatal Error!!! Wind sensor not connected.Please check."); qstrMessage.append("Fatal Error!!! Wind sensor not connected.Please check.");
//qstrMessage = "Fatal Error!!! Wind sensor not connected.Please check."; qstrMessage = "Fatal Error!!! Wind sensor not connected.Please check.";
emit Signal_UpdateVehicleMessage(qstrMessage); emit Signal_UpdateVehicleMessage(qstrMessage,LINECOMMEND);
qDebug() << qstrMessage; qDebug() << qstrMessage;
//return 2; //return 2;
} }
qstrMessage.append("System ready.Waiting for signals"); qstrMessage.append("System ready.Waiting for signals");
//qstrMessage = "System ready.Waiting for signals"; // qstrMessage = "System ready.Waiting for signals";
emit Signal_UpdateVehicleMessage(qstrMessage); // qstrMessage="123456789123456789123456789123456789123456789123456789123456789";
emit Signal_UpdateVehicleMessage(qstrMessage,LINECOMMEND);
return 0; return 0;
} }
int CMainAcqThread::SetupMessagePipe() int CMainAcqThread::SetupMessagePipe()
{ {
connect(&m_ctrlVehicle, &VehicleController::Signal_StartCapture, this, &CMainAcqThread::Slot_StartCapture); connect(&m_ctrlVehicle, &VehicleController::Signal_StartCapture, this, &CMainAcqThread::Slot_StartCapture);
connect(&m_ctrlVehicle.m_clsWidget,&ZZ_Widget_M300RTK::SendCommand,this,&CMainAcqThread::GetCommand); connect(&m_ctrlVehicle.m_clsWidget,&ZZ_Widget_M300RTK::SendCommand,this,&CMainAcqThread::GetCommand,Qt::QueuedConnection);
connect(this, &CMainAcqThread::SendCommand, &m_ctrlVehicle.m_clsWidget, &ZZ_Widget_M300RTK::BackCommand); connect(this, &CMainAcqThread::SendCommand, &m_ctrlVehicle.m_clsWidget, &ZZ_Widget_M300RTK::BackCommand);
connect(&m_ctrlVehicle, &VehicleController::Signal_StopCapture, this, &CMainAcqThread::Slot_StopCapture); connect(&m_ctrlVehicle, &VehicleController::Signal_StopCapture, this, &CMainAcqThread::Slot_StopCapture);
connect(this, &CMainAcqThread::Signal_UpdateVehicleMessage, &m_ctrlVehicle, &VehicleController::Signal_UpdateVehicleMessage); connect(this, &CMainAcqThread::Signal_UpdateVehicleMessage, &m_ctrlVehicle, &VehicleController::Signal_UpdateVehicleMessage);
connect(&m_clsCapTimer, &QTimer::timeout, this, &CMainAcqThread::OnTimerCapture); connect(&m_clsCapTimer, &QTimer::timeout, this, &CMainAcqThread::OnTimerCapture);
m_clsCapTimer.start(1000);
return 0; return 0;
} }
@ -146,10 +154,21 @@ int CMainAcqThread::FormFixedWindData()
m_fTempFixedWindVecY = m_fTempFixedWindVecY - m_struM300RTKDataFrame.stVelocity.y; m_fTempFixedWindVecY = m_fTempFixedWindVecY - m_struM300RTKDataFrame.stVelocity.y;
m_fTempFixedWindVecZ = m_fTempFixedWindVecZ - m_struM300RTKDataFrame.stVelocity.z; m_fTempFixedWindVecZ = m_fTempFixedWindVecZ - m_struM300RTKDataFrame.stVelocity.z;
double dDotProduct = m_fTempFixedWindVecX; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> double dVectorLength = sqrt(m_fTempFixedWindVecX * m_fTempFixedWindVecX + m_fTempFixedWindVecY * m_fTempFixedWindVecY + m_fTempFixedWindVecZ * m_fTempFixedWindVecZ);
double dVectorLength = sqrt(m_fTempFixedWindVecX * m_fTempFixedWindVecX + m_fTempFixedWindVecY * m_fTempFixedWindVecY + m_fTempFixedWindVecZ * m_fTempFixedWindVecZ); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
double dAngleInRadians = acos(dDotProduct / dVectorLength); // <20><><EFBFBD><EFBFBD>нǵĻ<C7B5><C4BB><EFBFBD>ֵ if (dVectorLength < 0.0001)
double angleInDegrees = dAngleInRadians * (180.0 / M_PI); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> {
m_struUASDataFrame.fFixedWindDirection = 0;
m_struUASDataFrame.fFixedWindSpeed = 0;
return 0;
}
double dDotProduct = m_fTempFixedWindVecX;
double dCosAngle = dDotProduct / dVectorLength;
if (dCosAngle > 1.0) dCosAngle = 1.0;
if (dCosAngle < -1.0) dCosAngle = -1.0;
double dAngleInRadians = acos(dCosAngle);
double angleInDegrees = dAngleInRadians * (180.0 / M_PI);
m_struUASDataFrame.fFixedWindDirection = angleInDegrees; m_struUASDataFrame.fFixedWindDirection = angleInDegrees;
m_struUASDataFrame.fFixedWindSpeed = dVectorLength; m_struUASDataFrame.fFixedWindSpeed = dVectorLength;
@ -188,7 +207,7 @@ void CMainAcqThread::OnTestTimer()
int CMainAcqThread::GetData() int CMainAcqThread::GetData()
{ {
unsigned long ulCO2=0, ulH2O=0; double ulCO2=0, ulH2O=0;
float fGasTemp=-1,fPP=-1,fPB=-1; float fGasTemp=-1,fPP=-1,fPB=-1;
m_ctrlGasSensor.GetMeasuredData(ulCO2, ulH2O, fGasTemp, fPP, fPB); m_ctrlGasSensor.GetMeasuredData(ulCO2, ulH2O, fGasTemp, fPP, fPB);
m_struGSDataFrame.ulCO2 = ulCO2; m_struGSDataFrame.ulCO2 = ulCO2;
@ -207,10 +226,14 @@ int CMainAcqThread::GetData()
m_ctrlVehicle.GetOneDataFrame(m_struM300RTKDataFrame);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_ctrlVehicle.GetOneDataFrame(m_struM300RTKDataFrame);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} }
// #define ZZ_FLAG_TEST
int CMainAcqThread::OnTimerCapture() int CMainAcqThread::OnTimerCapture()
{ {
if (m_iFlagCaptureStatus >1)
{
return 0;
}
#ifdef ZZ_FLAG_TEST #ifdef ZZ_FLAG_TEST
qDebug() << "OnTimerCapture entering time:" << QTime::currentTime(); qDebug() << "OnTimerCapture entering time:" << QTime::currentTime();
#endif #endif
@ -227,14 +250,23 @@ int CMainAcqThread::OnTimerCapture()
QString qstrMessage; QString qstrMessage;
qstrMessage = QString("CO2: %1ppm, H20: %2ppm\r\nFixed Wind Speed: %3m/s\r\nFixed Wind Direction: %4deg").arg(m_struGSDataFrame.ulCO2).arg(m_struGSDataFrame.ulH2O) qstrMessage = QString("CO2: %1ppm, H20: %2ppm\r\nFixed Wind Speed: %3m/s\r\nFixed Wind Direction: %4deg").arg(m_struGSDataFrame.ulCO2).arg(m_struGSDataFrame.ulH2O)
.arg(m_struUASDataFrame.fFixedWindSpeed).arg(m_struUASDataFrame.fFixedWindDirection); .arg(m_struUASDataFrame.fFixedWindSpeed).arg(m_struUASDataFrame.fFixedWindDirection);
emit Signal_UpdateVehicleMessage(qstrMessage); emit Signal_UpdateVehicleMessage("CO2:"+QString::number(m_struGSDataFrame.ulCO2,'f',1)+"\t H2O:"+QString::number(m_struGSDataFrame.ulH2O,'f',1),LINEDATASHOW);
emit Signal_UpdateVehicleMessage("WS:"+QString::number(m_struUASDataFrame.fFixedWindSpeed,'f',2)+"\t D:"+QString::number(m_struUASDataFrame.fFixedWindDirection,'f',2)+"",LINEDATASHOW+1);
// emit Signal_UpdateVehicleMessage("PP:"+QString::number(m_struGSDataFrame.fPP,'f',2)+"\t PB:"+QString::number(m_struGSDataFrame.fPB,'f',2)+"",LINEDATASHOW+2);
emit Signal_UpdateVehicleMessage("T:"+QString::number(m_struGSDataFrame.fTemp,'f',2)+"\t PB:"+QString::number(m_struGSDataFrame.fPB,'f',2),LINEDATASHOW+2);
// emit Signal_UpdateVehicleMessage(qstrMessage);
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
#ifdef ZZ_FLAG_TEST #ifdef ZZ_FLAG_TEST
qDebug() << m_struM300RTKDataFrame.stGPSPosition.x << m_struM300RTKDataFrame.stGPSPosition.y << m_struM300RTKDataFrame.stGPSPosition.z qDebug() << m_struM300RTKDataFrame.stGPSPosition.x << m_struM300RTKDataFrame.stGPSPosition.y << m_struM300RTKDataFrame.stGPSPosition.z
<< m_struM300RTKDataFrame.stVelocity.x << m_struM300RTKDataFrame.stVelocity.y << m_struM300RTKDataFrame.stVelocity.z; << m_struM300RTKDataFrame.stVelocity.x << m_struM300RTKDataFrame.stVelocity.y << m_struM300RTKDataFrame.stVelocity.z;
#endif #endif
if (SavingDate==1)
{
m_ctrlData.WriteData(m_struM300RTKDataFrame, m_struGSDataFrame, m_struUASDataFrame); m_ctrlData.WriteData(m_struM300RTKDataFrame, m_struGSDataFrame, m_struUASDataFrame);
}
#ifdef ZZ_FLAG_TEST #ifdef ZZ_FLAG_TEST
@ -258,12 +290,13 @@ int CMainAcqThread::Slot_StartCapture()
m_ctrlData.GenerateFile(); m_ctrlData.GenerateFile();
m_clsCapTimer.start(1000); // m_clsCapTimer.start(1000);
#ifdef ZZ_FLAG_TEST #ifdef ZZ_FLAG_TEST
qDebug() << "CMainAcqThread Test Cap Started"; qDebug() << "CMainAcqThread Test Cap Started";
#endif // ZZ_FLAG_TEST #endif // ZZ_FLAG_TEST
m_iFlagCaptureStatus = 1;
SavingDate = 1;
return 0; return 0;
} }
@ -275,7 +308,8 @@ int CMainAcqThread::Slot_StopCapture()
iFlagIsPathGenerated = false; iFlagIsPathGenerated = false;
m_clsCapTimer.stop(); SavingDate=0;
//m_clsCapTimer.stop();
m_ctrlData.CloseData(); m_ctrlData.CloseData();
#ifdef ZZ_FLAG_TEST #ifdef ZZ_FLAG_TEST
@ -283,7 +317,7 @@ int CMainAcqThread::Slot_StopCapture()
#endif // ZZ_FLAG_TEST #endif // ZZ_FLAG_TEST
QString qstrMessage = QString("Capture Stopped."); QString qstrMessage = QString("Capture Stopped.");
emit Signal_UpdateVehicleMessage(qstrMessage); emit Signal_UpdateVehicleMessage(qstrMessage,LINECOMMEND);
return 0; return 0;
} }
@ -296,20 +330,26 @@ void CMainAcqThread::GetCommand(QString Worker, QString Command) {
int waitetime=10; int waitetime=10;
qDebug()<<"GetCommand Worker:"<<Worker<<" Command:"<<Command; qDebug()<<"GetCommand Worker:"<<Worker<<" Command:"<<Command;
if (Worker=="WDA") { if (Worker=="WDA") {
m_iFlagCaptureStatus=WADCALI;
QThread::msleep(1100);
//#分割字符comman //#分割字符comman
QStringList arc=Command.split("#"); QStringList arc=Command.split("#");
if (arc[0]=="StartCalibrate") { if (arc[0]=="StartCalibrate") {
if (arc.length()<2) { if (arc.length()<2) {
emit SendCommand("WDA","Finish"); emit SendCommand("WDA","Finish");
m_iFlagCaptureStatus=NORMAL;
return; return;
} }
m_ctrlWindSensor.CalibrateWDA(arc[1].toDouble()); m_ctrlWindSensor.CalibrateWDA(arc[1].toDouble());
emit SendCommand("WDA","Finish"); emit SendCommand("WDA","Finish");
m_iFlagCaptureStatus=NORMAL;
} }
} }
else if (Worker == "GAS") { else if (Worker == "GAS") {
m_iFlagCaptureStatus = GASGALI;
QStringList arc = Command.split("#"); QStringList arc = Command.split("#");
qDebug()<<"arc is"<<arc; qDebug()<<"arc is"<<arc;
if (arc[0] == "ZeroCalibrate") { if (arc[0] == "ZeroCalibrate") {
@ -349,7 +389,7 @@ void CMainAcqThread::GetCommand(QString Worker, QString Command) {
if (arc.size()<3) { if (arc.size()<3) {
emit SendCommand("GAS", "Finish"); emit SendCommand("GAS", "Finish");
m_iFlagCaptureStatus=NORMAL;
return; return;
} }
char cChannel=0; char cChannel=0;
@ -360,7 +400,7 @@ void CMainAcqThread::GetCommand(QString Worker, QString Command) {
} }
else { else {
emit SendCommand("GAS", "Finish"); emit SendCommand("GAS", "Finish");
m_iFlagCaptureStatus=NORMAL;
return; return;
} }
unsigned int uiPPM=arc[2].toUInt(); unsigned int uiPPM=arc[2].toUInt();
@ -376,6 +416,6 @@ void CMainAcqThread::GetCommand(QString Worker, QString Command) {
} }
m_iFlagCaptureStatus=NORMAL;
} }
} }

View File

@ -17,6 +17,9 @@ using namespace ZZ_DATA_DEF::DJI;
using namespace ZZ_DATA_DEF::CO2_GAS_SENSOR; using namespace ZZ_DATA_DEF::CO2_GAS_SENSOR;
using namespace ZZ_DATA_DEF::UA_SENSOR; using namespace ZZ_DATA_DEF::UA_SENSOR;
using namespace ZZ_DATA_DEF::MainConfig; using namespace ZZ_DATA_DEF::MainConfig;
#define WADCALI 2;
#define GASGALI 3;
#define NORMAL 1;
class CMainAcqThread :public QObject class CMainAcqThread :public QObject
{ {
@ -28,7 +31,7 @@ public:
private: private:
QTime lastTime; QTime lastTime;
QTimer m_clsCapTimer; QTimer m_clsCapTimer;
std::atomic<int> m_WorkingState;
int iFlagIsPathGenerated; int iFlagIsPathGenerated;
MiscControls m_struMiscCtrls; MiscControls m_struMiscCtrls;
@ -65,7 +68,7 @@ private:
int RotateWindVec(); int RotateWindVec();
int FormFixedWindData(); int FormFixedWindData();
signals: signals:
void Signal_UpdateVehicleMessage(QString qstrMessage); void Signal_UpdateVehicleMessage(QString qstrMessage,int linid);
void SendCommand(QString Worker, QString Command); void SendCommand(QString Worker, QString Command);
public slots: public slots:
void OnTestTimer(); void OnTestTimer();

View File

@ -117,8 +117,8 @@ namespace ZZ_DATA_DEF
{ {
// unsigned long ulCO2; // unsigned long ulCO2;
// unsigned long ulH2O; // unsigned long ulH2O;
float ulCO2; double ulCO2;
float ulH2O; double ulH2O;
float fTemp; float fTemp;
float fPB; float fPB;
float fPP; float fPP;

View File

@ -1,6 +1,6 @@
[DJI] [DJI]
USER_APP_NAME=Project_Grixis USER_APP_NAME=M400device
USER_APP_ID=126401 USER_APP_ID=176035
USER_APP_KEY=a313e3617b16c56a11502bd91a61d6f USER_APP_KEY=4889bbeb0092089889b4f3180167202
USER_APP_LICENSE=BNrpsD+UJ2lj8kmVgN4GnXg+AZiQwaxSuf/WvA072DFdLy2h+NCQizf+nR+WcjEEKeTknSzPbfqlvAc/WSJwrtqV/gYXSVPtSlK0AaV61SeKBvZQpogoyaZy07fWNCZrha3OAQsHj18TtU5RjOn6gYapzGDAPQVG6Q/At/H/9GSPQr5uwxI20fVWUTOkymYLM/04CNQGsToPD+fZwixExjjjHjdD9K7R0D4EgyvbqMpMLlkspBLR/9h6/oVxefOyaHJIi+pk+IdLFFC3omnrh7U3/4b95LA3t22J1GJvqvO2cyphjrSXsaDdctvtj6EjE8WhEXQCvmYm0VIHWz/0Qw== USER_APP_LICENSE=VVfdaxQA6j5aX6zy/C6S2PFoSUqdcj5PeQ1GG8aRMuy+SegA1y9iYtQLOLu7CprNwwBN6X6wdwzSn8lOHJuXb6TfvRsakVCsXQ6A9qWmBB8IKzAKcQ60EJlZ71h5cLthXzNNq1ERQpBM5w9b+FebKF29XzozZCF2ZYWSgoGb/nEWxlm23Gp0EB3ZwbP31yRyLQUCY3iDdLYByOe3xSGLtJOlu3OJuujzY80T3eqWonwYsl4Hb4hWJODXJYWzLGFA1irjVJdle//7WZ0F17fEo/xGgPb7W36twDU80QFfpwagEqtacoo6bp+qij6Db10wF9Z8VWlAkY+59lLbyV3gnw==
USER_DEVELOPER_ACCOUNT=1033584732@qq.com USER_DEVELOPER_ACCOUNT=rlxlixin1@163.com

View File

@ -33,20 +33,26 @@
{ {
"widget_list": "widget_list":
[ [
{ {
"widget_index": 4, "widget_index": 4,
"widget_type": "int_input_box", "widget_type": "int_input_box",
"widget_name": "防误触密码",
"int_input_box_hint": "123456"
},
{
"widget_index": 5,
"widget_type": "int_input_box",
"widget_name": "当前温度--风速标定", "widget_name": "当前温度--风速标定",
"int_input_box_hint": "*0.1°C" "int_input_box_hint": "*0.1°C"
}, },
{ {
"widget_index": 5, "widget_index": 6,
"widget_type": "button", "widget_type": "button",
"widget_name": "风速标定" "widget_name": "风速标定"
}, },
{ {
"widget_index": 6, "widget_index": 7,
"widget_type": "list", "widget_type": "list",
"widget_name": "标气类型--零位校正", "widget_name": "标气类型--零位校正",
"list_item": [ "list_item": [
@ -55,16 +61,19 @@
}, },
{ {
"item_name": "AIR(空气)" "item_name": "AIR(空气)"
},
{
"item_name": "请选择"
} }
] ]
}, },
{ {
"widget_index": 7, "widget_index": 8,
"widget_type": "button", "widget_type": "button",
"widget_name": "零位校正" "widget_name": "零位校正"
}, },
{ {
"widget_index": 8, "widget_index": 9,
"widget_type": "list", "widget_type": "list",
"widget_name": "目标气体类型--步长校正", "widget_name": "目标气体类型--步长校正",
"list_item": [ "list_item": [
@ -73,17 +82,20 @@
}, },
{ {
"item_name": "H2O(水蒸气)" "item_name": "H2O(水蒸气)"
},
{
"item_name": "请选择"
} }
] ]
}, },
{ {
"widget_index": 9, "widget_index": 10,
"widget_type": "int_input_box", "widget_type": "int_input_box",
"widget_name": "标气浓度值--步长校正", "widget_name": "标气浓度值--步长校正",
"int_input_box_hint": "ppm" "int_input_box_hint": "ppm"
}, },
{ {
"widget_index": 10, "widget_index": 11,
"widget_type": "button", "widget_type": "button",
"widget_name": "步长校正" "widget_name": "步长校正"
}, },

126
package.sh Executable file
View File

@ -0,0 +1,126 @@
#!/bin/bash
# Airborne CO2 项目打包脚本
# 打包成 Debian 包
VERSION=1.0.0
PROJECT_NAME="AirborneCO2"
PACKAGE_NAME="${PROJECT_NAME}_V${VERSION}.deb"
BUILD_DIR="build"
DEB_DIR="DebpackAirborneCO2"
# 检查是否在正确目录
if [ ! -f "CMakeLists.txt" ]; then
echo "错误:请在项目根目录运行此脚本"
exit 1
fi
echo "========================================="
echo "Airborne CO2 打包脚本 v${VERSION}"
echo "========================================="
# 1. 构建项目
echo ""
echo "[1/5] 开始构建项目..."
# 清理旧的 build 目录并重新创建
#rm -rf $BUILD_DIR
mkdir -p $BUILD_DIR
cd $BUILD_DIR
cmake ..
#if [ $? -ne 0 ]; then
# echo "错误cmake 配置失败"
# exit 1
#fi
# 执行 make
make -j$(nproc)
if [ $? -ne 0 ]; then
echo "错误:构建失败"
exit 1
fi
cd ..
# 检查构建产物
if [ ! -f "${BUILD_DIR}/Project_Grixis" ]; then
echo "错误:构建产物不存在"
exit 1
fi
echo "构建完成"
# 2. 创建打包目录
echo ""
echo "[2/5] 创建打包目录..."
rm -rf $DEB_DIR
mkdir -p $DEB_DIR
# 3. 复制可执行文件和脚本文件
echo ""
echo "[3/5] 复制文件..."
mkdir -p ${DEB_DIR}/home/pi/bin
cp ${BUILD_DIR}/Project_Grixis ${DEB_DIR}/home/pi/bin/
chmod +x ${DEB_DIR}/home/pi/bin/Project_Grixis
# 复制脚本文件到 /home/pi/bin/
for script in rasp.sh raspusb.sh mountdjirndis.sh mountdjirndism400.sh mountrndis.sh usbbulk.sh choosescript.sh; do
if [ -f "$script" ]; then
cp "$script" ${DEB_DIR}/home/pi/bin/
chmod +x ${DEB_DIR}/home/pi/bin/"$script"
fi
done
# 5. 创建 DEBIAN 目录和配置文件
echo ""
echo "[4/5] 创建 DEBIAN 配置..."
mkdir -p ${DEB_DIR}/DEBIAN
# 创建 control 文件
cat > ${DEB_DIR}/DEBIAN/control <<EOF
Package: AirborneCO2
Version: ${VERSION}
Architecture: armhf
Maintainer: AirborneCO2 Team
Description: Airborne CO2 monitoring application
EOF
# 创建 postinst 脚本(安装后执行)
cat > ${DEB_DIR}/DEBIAN/postinst <<EOF
#!/bin/bash
echo "AirborneCO2 v${VERSION} installed"
echo "V${VERSION}" > /home/data/version
chmod +x /home/pi/bin/Project_Grixis
exit 0
EOF
# 创建 prerm 脚本(删除前执行)
cat > ${DEB_DIR}/DEBIAN/prerm <<EOF
#!/bin/bash
exit 0
EOF
chmod +x ${DEB_DIR}/DEBIAN/postinst
chmod +x ${DEB_DIR}/DEBIAN/prerm
# 6. 打包
echo ""
echo "[5/5] 打包成 deb 文件..."
sudo dpkg -b $DEB_DIR $PACKAGE_NAME
if [ $? -eq 0 ]; then
echo ""
echo "========================================="
echo "打包成功: ${PACKAGE_NAME}"
echo "========================================="
# 移动到 DEB 目录
mkdir -p DEB
mv $PACKAGE_NAME DEB/
echo "已移动到: DEB/${PACKAGE_NAME}"
# 清理临时目录
rm -rf $DEB_DIR
else
echo "错误:打包失败"
exit 1
fi

View File

@ -46,8 +46,9 @@ if lsmod | grep -q g_ether; then
fi fi
rmmod g_mass_storage rmmod g_mass_storage
sleep 1 sleep 1
rm -rf /sys/kernel/config/usb_gadget/pi4
if [ ! -d /sys/kernel/config/usb_gadget/pi4 ]; then if [ ! -d /sys/kernel/config/usb_gadget/pi4 ]; then
echo "Creating USB Gadget configuration..."
mkdir -p /sys/kernel/config/usb_gadget/pi4 mkdir -p /sys/kernel/config/usb_gadget/pi4
cd /sys/kernel/config/usb_gadget/pi4 cd /sys/kernel/config/usb_gadget/pi4
echo 0x2ca3 > idVendor # Linux Foundation echo 0x2ca3 > idVendor # Linux Foundation