#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 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 "<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; }