- 将InitSystemParams功能整合到SetupSubscriptions中 - 修复Widget_M300RTK运算符错误(&改为&&) - 添加UI定时刷新功能Slot_flash_screen - 添加密码保护功能(123456) - WDA传感器添加结束符格式TODO注释 - 调整widget控件索引映射
456 lines
17 KiB
C++
456 lines
17 KiB
C++
#include "Widget_M300RTK.h"
|
|
#define RLX_LINENUMBER 0
|
|
|
|
enum AireType {
|
|
Aire_Aire = 1,
|
|
Aire_N2 = 0,
|
|
Aire_NONE=2,
|
|
};
|
|
|
|
enum Target_Gas {
|
|
Target_CO2 = 0,
|
|
Target_H2O = 1,
|
|
Target_NONE=2,
|
|
};
|
|
|
|
int32_t CuttrentGasValue = 0;
|
|
int32_t passwordforsetting = 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_DecisionHeight = 1;
|
|
int32_t ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate = 0;
|
|
AireType CurrentAireType = Aire_NONE;
|
|
Target_Gas CurrentTargetGas = Target_NONE;
|
|
float NowTempreature = 0;
|
|
bool isnowsystemWorking = false;
|
|
QStringList Strforshow;
|
|
QStringList StrforshowCurrent;
|
|
QStringList StrforshowLast;
|
|
vector<int> indexforshow;
|
|
|
|
ZZ_Widget_M300RTK::ZZ_Widget_M300RTK(QObject *parent /*= nullptr*/) {
|
|
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);
|
|
m_bIsFlashOn = false;
|
|
}
|
|
|
|
ZZ_Widget_M300RTK::~ZZ_Widget_M300RTK() {
|
|
}
|
|
|
|
int ZZ_Widget_M300RTK::InitParam() {
|
|
return 0;
|
|
}
|
|
|
|
int ZZ_Widget_M300RTK::SetUIFilePath(char *pcUIFilePath, uint16_t uiLength) {
|
|
if (uiLength >= 256) {
|
|
qDebug() << "ZZ_Widget_M300RTK: Func SetUIFilePath. File path is too long";
|
|
return 1;
|
|
}
|
|
|
|
QByteArray qbaTemp(pcUIFilePath);
|
|
m_qstrFilePath = qbaTemp;
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
int ZZ_Widget_M300RTK::UpdateCaptureStatus(int iStatus) {
|
|
m_iFlagIsVehicleCapturing = iStatus;
|
|
}
|
|
|
|
int ZZ_Widget_M300RTK::GetSettings(UIConfig &struUIConfig) {
|
|
struUIConfig.sDecisionHeight = m_siDjiWidgetValueList_DecisionHeight;
|
|
struUIConfig.sCaptureMode = m_siDjiWidgetValueList_CaptureMode;
|
|
struUIConfig.sSamplingRate = m_siDjiWidgetValueList_SamplingRate;
|
|
return 0;
|
|
}
|
|
|
|
int ZZ_Widget_M300RTK::SetSettings(UIConfig struUIConfig) {
|
|
m_struUIConfig = struUIConfig;
|
|
m_siDjiWidgetValueList_CaptureMode = struUIConfig.sCaptureMode;
|
|
m_siDjiWidgetValueList_DecisionHeight = struUIConfig.sDecisionHeight;
|
|
m_siDjiWidgetValueList_SamplingRate = struUIConfig.sSamplingRate;
|
|
return 0;
|
|
}
|
|
|
|
void ZZ_Widget_M300RTK::stratmessageflash() {
|
|
|
|
m_TimerForflash.start(5000);
|
|
m_bIsFlashOn = true;
|
|
}
|
|
|
|
int ZZ_Widget_M300RTK::PreparteEnvironment() {
|
|
T_DjiReturnCode djiStat;
|
|
|
|
static const T_DjiWidgetHandlerListItem s_DjiWidgetHandlerList[] =
|
|
{
|
|
{0, DJI_WIDGET_TYPE_SWITCH, 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},
|
|
{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_INT_INPUT_BOX, ZZ_Widget_M300RTK::OnUpdateWidgetValue,
|
|
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();
|
|
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
|
qDebug() << "ZZ_Widget_M300RTK: Func DjiWidget_Init. Dji widget init error" << djiStat;
|
|
//return djiStat;
|
|
}
|
|
|
|
djiStat = DjiWidget_RegDefaultUiConfigByDirPath(m_qstrFilePath.toLatin1());
|
|
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
|
qDebug() << m_qstrFilePath.toLatin1();
|
|
qDebug() << "ZZ_Widget_M300RTK: Func DjiWidget_RegDefaultUiConfigByDirPath.Add default widget ui config error";
|
|
return djiStat;
|
|
}
|
|
|
|
djiStat = DjiWidget_RegHandlerList(s_DjiWidgetHandlerList,
|
|
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";
|
|
return djiStat;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int ZZ_Widget_M300RTK::UploadResources() {
|
|
return 0;
|
|
}
|
|
|
|
int ZZ_Widget_M300RTK::test_UpdatePSDKFloatMessage(QString qstrMessage) {
|
|
T_DjiReturnCode djiStat;
|
|
|
|
djiStat = DjiWidgetFloatingWindow_ShowMessage(qstrMessage.toLatin1());
|
|
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
|
|
qDebug() << "ZZ_Widget_M300RTK: Func test_UpdatePSDKFloatMessage.Floating window show message error";
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
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;
|
|
|
|
|
|
if (pCaller->m_iFlagIsVehicleCapturing) {
|
|
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
|
}
|
|
if (widgetType == DJI_WIDGET_TYPE_INT_INPUT_BOX) {
|
|
if (index == 5) {
|
|
qDebug() << "now tempreatrue is " << value;
|
|
NowTempreature = value;
|
|
}
|
|
if (index == 10) {
|
|
qDebug() << "now gas value is " << value;
|
|
CuttrentGasValue = value;
|
|
}
|
|
if (index==4) {
|
|
passwordforsetting = value;
|
|
qDebug() << "now password is " << passwordforsetting;
|
|
}
|
|
}
|
|
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;
|
|
|
|
|
|
if (value == 1) {
|
|
if (isnowsystemWorking == true) return 0;
|
|
if (NowTempreature == 0) {
|
|
pCaller->emit Signal_UpdatePSDKFloatMessage("please set correct temperature first",RLX_LINENUMBER);
|
|
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
|
}
|
|
isnowsystemWorking = true;
|
|
pCaller->emit Signal_UpdatePSDKFloatMessage(
|
|
"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 == 8) {
|
|
if (value == 1) {
|
|
if (isnowsystemWorking == true) return 0;
|
|
isnowsystemWorking = true;
|
|
QString AiretypeStr;
|
|
if (CurrentAireType == Aire_Aire) {
|
|
AiretypeStr = "Air";
|
|
} else if (CurrentAireType == Aire_N2) {
|
|
AiretypeStr = "N2";
|
|
}
|
|
else {
|
|
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;
|
|
pCaller->emit Signal_UpdatePSDKFloatMessage("ZeroCalibrate with " + AiretypeStr,RLX_LINENUMBER);
|
|
QCoreApplication::processEvents();
|
|
pCaller->emit SendCommand("GAS", "ZeroCalibrate#" + AiretypeStr);
|
|
qDebug() << "---------------------------------------------";
|
|
}
|
|
}
|
|
if (index == 11) {
|
|
if (value == 1) {
|
|
if (isnowsystemWorking == true) return 0;
|
|
isnowsystemWorking = true;
|
|
QString TargetGasStr;
|
|
if (CurrentTargetGas == Target_CO2) {
|
|
TargetGasStr = "CO2";
|
|
} else if (CurrentTargetGas==Target_H2O) {
|
|
TargetGasStr = "H2O";
|
|
}
|
|
else {
|
|
pCaller->emit Signal_UpdatePSDKFloatMessage("please select correct target gas first",RLX_LINENUMBER);
|
|
isnowsystemWorking = false;
|
|
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
|
}
|
|
//确保当前气体值不为0
|
|
if (CuttrentGasValue == 0) {
|
|
pCaller->emit Signal_UpdatePSDKFloatMessage("please set correct gas value first",RLX_LINENUMBER);
|
|
isnowsystemWorking = false;
|
|
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
|
}
|
|
|
|
qDebug() << "start gas sensor span calibrate with " + TargetGasStr + " value is " + 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);
|
|
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
|
|
} else {
|
|
if (value == 1) {
|
|
if (isnowsystemWorking == true) {
|
|
// ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = !value;
|
|
return 0;
|
|
}
|
|
|
|
isnowsystemWorking = true;
|
|
pCaller->emit Signal_UpdatePSDKFloatMessage("start capture",RLX_LINENUMBER);
|
|
pCaller->emit Signal_StartCapture();
|
|
} else {
|
|
if (isnowsystemWorking == false) {
|
|
// ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = !value;
|
|
return 0;
|
|
}
|
|
isnowsystemWorking = false;
|
|
pCaller->emit Signal_UpdatePSDKFloatMessage("capture stopped",RLX_LINENUMBER);
|
|
pCaller->emit Signal_StopCapture();
|
|
}
|
|
}
|
|
ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn = value;
|
|
|
|
///for test
|
|
QString qstrTest;
|
|
qDebug() << "OnUpdateWidgetValue " << "widgetType " << widgetType << "index " << index << "value " << value;
|
|
qstrTest = QString("index:%1,value:%2").arg(index, value);
|
|
//pCaller->test_UpdatePSDKFloatMessage(qstrTest);
|
|
//qstrTest = "12345";
|
|
//pCaller->emit Signal_UpdatePSDKFloatMessage(qstrTest);
|
|
}
|
|
|
|
if (widgetType == DJI_WIDGET_TYPE_LIST) {
|
|
if (index == 1) {
|
|
pCaller->emit Signal_UpdateCaptureMode((char) value);
|
|
ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode = value;
|
|
} else if (index == 2) {
|
|
ZZ_Widget_M300RTK::m_siDjiWidgetValueList_DecisionHeight = value;
|
|
} else if (index == 3) {
|
|
ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate = value;
|
|
} else if (index == 7) {
|
|
CurrentAireType = (AireType) value;
|
|
} else if (index == 9) {
|
|
CurrentTargetGas = (Target_Gas) value;
|
|
}
|
|
|
|
|
|
#ifdef ZZ_FLAG_TEST
|
|
qDebug() << "OnUpdateWidgetValue " << "widgetType " << widgetType << "index " << index << "value " << value;
|
|
#endif
|
|
}
|
|
|
|
|
|
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
}
|
|
|
|
T_DjiReturnCode ZZ_Widget_M300RTK::OnLoadWidgetValue(E_DjiWidgetType widgetType, uint32_t index, int32_t *value,
|
|
void *userData) {
|
|
if (widgetType == DJI_WIDGET_TYPE_SWITCH) {
|
|
//qDebug() << "OnLoadWidgetValue " << "widgetType " << widgetType << "index " << index << "value " << value;
|
|
|
|
*value = ZZ_Widget_M300RTK::m_siDjiWidgetValueBtn;
|
|
}
|
|
|
|
if (widgetType == DJI_WIDGET_TYPE_LIST) {
|
|
//qDebug() << "OnLoadWidgetValue " << "widgetType " << widgetType << "index " << index << "value " << value;
|
|
if (index == 1) {
|
|
*value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_CaptureMode;
|
|
} else if (index == 2) {
|
|
*value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_DecisionHeight;
|
|
} else if (index == 3) {
|
|
*value = ZZ_Widget_M300RTK::m_siDjiWidgetValueList_SamplingRate;
|
|
} else if (index == 7) {
|
|
*value = (int32_t) CurrentAireType;
|
|
} else if (index == 9) {
|
|
*value = (int32_t) CurrentTargetGas;
|
|
}
|
|
}
|
|
if (widgetType == DJI_WIDGET_TYPE_INT_INPUT_BOX) {
|
|
if (index==4) {
|
|
*value = passwordforsetting;
|
|
}
|
|
if (index == 5) {
|
|
*value = NowTempreature;
|
|
}
|
|
if (index == 10) {
|
|
*value = CuttrentGasValue;
|
|
}
|
|
}
|
|
|
|
|
|
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
}
|
|
|
|
int ZZ_Widget_M300RTK::Slot_UpdatePSDKFloatMessage(QString qstrMessage, int lineid) {
|
|
T_DjiReturnCode djiStat;
|
|
Strforshow[lineid] = qstrMessage;
|
|
// qDebug() << "float message line " << lineid << " : " << qstrMessage;
|
|
Slot_flash_screen();
|
|
//
|
|
// 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;
|
|
}
|
|
|
|
void ZZ_Widget_M300RTK::BackCommand(QString Worker, QString Command) {
|
|
if (Worker == "WDA") {
|
|
if (Command == "Finish") {
|
|
isnowsystemWorking = false;
|
|
qDebug() << "wind calibrate finished";
|
|
emit Signal_UpdatePSDKFloatMessage("wind calibrate finished",RLX_LINENUMBER);
|
|
}
|
|
} else if (Worker == "GAS") {
|
|
if (Command == "Finish") {
|
|
isnowsystemWorking = false;
|
|
qDebug() << "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;
|
|
|
|
}
|