#include "pdu_ctrl.h" #include #include #include #include #include #include #include #include #include #include #include #define READ_INI_STR(key, default_value) (settings.contains(key) ? settings.value(key).toString() : default_value) #define READ_INI_INT(key, default_value) (settings.contains(key) ? settings.value(key).toInt() : default_value) pdu_Ctrl* pdu_Ctrl::m_instance = nullptr; QMutex pdu_Ctrl::mutex; pdu_Ctrl::pdu_Ctrl(QObject *parent) : QObject(parent) { m_nModbusSelect=0; m_nModbusAddress=0;//从机地址 m_nModbusMSType=1;//主从 m_nSaveData=0; nViewShowType=widgetType_Main; nSettingType=0; nChidIndex=0; nChidPHIndex=0; m_nAngle=0; isT_ACType=0; m_nSaveAngle=0; nMonway=2; memset(nButtonStatus,0,sizeof(nButtonStatus)); // } void pdu_Ctrl::slot_setAngel(int nAngle) { if(m_pAngleCtrl&&m_pWidget) { //m_pAngleCtrl->setPos(size().width()/2, size().height()/2); //m_pAngleCtrl->transform(width() / 2, height() / 2); m_pAngleCtrl->setRotation(nAngle); m_nAngle=nAngle; if(m_nAngle!=m_nSaveAngle) { m_nSaveAngle=m_nAngle; SetPDUInit(); } #ifdef RS485Type if(nAngle==0||nAngle==180) { m_pWidget->resize(m_nWidth+2, m_nHeight+2); if(nAngle==0) { m_pAngleCtrl->setPos(0,0); }else { m_pAngleCtrl->setPos(m_pWidget->size().width()-2,m_pWidget->size().height()-2); } //QRect pRect=size(); qDebug()<<"x:"<geometry().x()<<"y:"<geometry().y()<<"Width:"<size().width()<<"Height:"<size().height(); }else { m_pWidget->resize(m_nHeight+2,m_nWidth+2); if(nAngle==90) { m_pAngleCtrl->setPos(m_nWidth-2,0); }else { m_pAngleCtrl->setPos(0,m_nHeight-2); } qDebug()<<"x:"<geometry().x()<<"y:"<geometry().y()<<"Width:"<size().width()<<"Height:"<size().height(); } #else if(nAngle==0||nAngle==180) { m_pWidget->resize(m_nWidth, m_nHeight); if(nAngle==0) { m_pAngleCtrl->setPos(0,0); }else { m_pAngleCtrl->setPos(m_pWidget->size().width(),m_pWidget->size().height()); } //QRect pRect=size(); qDebug()<<"x:"<geometry().x()<<"y:"<geometry().y()<<"Width:"<size().width()<<"Height:"<size().height(); }else { m_pWidget->resize(m_nHeight,m_nWidth); if(nAngle==90) { m_pAngleCtrl->setPos(m_nWidth,0); }else { m_pAngleCtrl->setPos(0,m_nHeight); } qDebug()<<"x:"<geometry().x()<<"y:"<geometry().y()<<"Width:"<size().width()<<"Height:"<size().height(); } #endif m_pWidget->m_nAngle=nAngle; m_pView->update(); } } void pdu_Ctrl::slot_ClickBtn(int nButton) { ButtonDown(nButton,BtnDown_C); } void pdu_Ctrl::slot_DClickBtn(int nButton) { ButtonDown(nButton,BtnDown_C); } void pdu_Ctrl::slot_LClickBtn(int nButton) { ButtonDown(nButton,BtnDown_L); } void pdu_Ctrl::slot_BtnClear(int nButton) { ButtonDown(nButton,BtnDown_Null); } void pdu_Ctrl::InitData(Widget *pWidget, QGraphicsProxyWidget *pProxy, QGraphicsView *pView,int nWidth, int nHeight) { m_pAngleCtrl=pProxy; m_pView=pView; m_pWidget=pWidget; m_nWidth= nWidth; m_nHeight = nHeight; } void pdu_Ctrl::ReadModbusInit() { QString appPath = QCoreApplication::applicationDirPath(); QSettings settings(appPath+"/smartPDU.ini",QSettings::IniFormat); m_nModbusAddress=READ_INI_INT("MODBUS/address",0); if(m_nModbusAddress>255||m_nModbusAddress<0) { m_nModbusAddress=0; } m_nModbusMSType=READ_INI_INT("MODBUS/MSType",1);//0:主机,1:从机 qDebug()<<"modbus Config m_nModbusMSType="<pageUp(); } } void pdu_Ctrl::Main_FunBtnSet(BtnDownType nbtnType) { //中间按钮 qDebug()<<"Main_FunBtnSet"; if (nbtnType==BtnDown_C) { //在通道界面是显示三项通道 if(m_pWidget) { int nNowIndex=m_pWidget->getShowPagIndex(); qDebug()<<"NowIndex="<setShowPHIndex(1); ChangeView(widgetType_Main,4); } } break; case 4://PH通道界面返回CH通道界面 { m_pWidget->setShowPHIndex(0); ChangeView(widgetType_Main,lastACIndex); } break; #endif default://其他界面 //在显示主界面时是旋转窗口 m_nAngle+=90; m_nAngle==360?m_nAngle=0:m_nAngle; qDebug()<<"nAngle:"<CtrlBtnSet(0,m_nModbusAddress); m_pWidget->setSelectStatus(m_nModbusSelect); m_nSaveData=0; } //切换到modbus qDebug()<<"ChangeView"; //nViewShowType=widgetType_Setting; ChangeView(widgetType_Setting,0); } } void pdu_Ctrl::Main_DownBtnSet(BtnDownType nbtnType) { qDebug()<<"Main_DownBtnSet"; if(!m_pWidget) { return; } if(nbtnType==BtnDown_C) { m_pWidget->pageDown(); qDebug()<<"pageDown"; } } void pdu_Ctrl::Setting_UPBtnSet(BtnDownType nbtnType) { switch (nSettingType) { case settingMode_Modbus: { if(nbtnType==BtnDown_C) {//切换select if(m_pWidget) { switch (m_nModbusSelect) { case 0://address { m_nModbusAddress+=1; if(m_nModbusAddress>32)m_nModbusAddress=1; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress); }break; case 1://SAVE { //保存切换 m_nSaveData==0?m_nSaveData=1:m_nSaveData=0; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nSaveData); }break; case 2://主从 { //主从切换 m_nModbusMSType==0?m_nModbusMSType=1:m_nModbusMSType=0; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusMSType); }break; } } }else if(nbtnType==BtnDown_L) { switch (m_nModbusSelect) { case 0://address { m_nModbusAddress+=5; if(m_nModbusAddress>255)m_nModbusAddress=0; if(m_pWidget)m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress); }break; } } }break; case settingMode_IP: { }break; default: break; } } void pdu_Ctrl::Setting_FunBtnSet(BtnDownType nbtnType) { switch (nSettingType) { case settingMode_Modbus: { if(nbtnType==BtnDown_C) {//切换select if(m_pWidget) { if(m_nModbusSelect==1&&m_nSaveData==1)//短按 FUN 保存YES回到前台。 { SaveModbusInit(); ChangeView(widgetType_Main,0); }else { #ifdef RS485Type m_nModbusSelect==0?m_nModbusSelect=1:m_nModbusSelect=0; #endif m_pWidget->setSelectStatus(m_nModbusSelect); } } }else if(nbtnType==BtnDown_L) { ChangeView(widgetType_Main,0); } }break; case settingMode_IP: { }break; default: break; } } void pdu_Ctrl::Setting_DownBtnSet(BtnDownType nbtnType) { switch (nSettingType) { case settingMode_Modbus: { if(nbtnType==BtnDown_C) {//切换select if(m_pWidget) { switch (m_nModbusSelect) { case 0://address { m_nModbusAddress-=1; if(m_nModbusAddress<1)m_nModbusAddress=32; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress); }break; case 1://SAVE { //保存切换 m_nSaveData==0?m_nSaveData=1:m_nSaveData=0; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nSaveData); }break; case 2://主从 { //主从切换 m_nModbusMSType==0?m_nModbusMSType=1:m_nModbusMSType=0; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusMSType); }break; } } }else if(nbtnType==BtnDown_L) { switch (m_nModbusSelect) { case 0://address { m_nModbusAddress-=5; if(m_nModbusAddress<0)m_nModbusAddress=255; if(m_pWidget)m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress); }break; } } }break; case settingMode_IP: { }break; default: break; } } void pdu_Ctrl::ChangeView(WidgetType widgetType, int nIndex) { if(!m_pWidget) { return; } if(widgetType!=nViewShowType) { qDebug()<<"Widget->ChangeView"; m_pWidget->ChangeView(widgetType,0); nViewShowType=widgetType; }else { m_pWidget->ChangeView(widgetType,nIndex); } } void pdu_Ctrl::ResetAll() { #ifdef RS485IpType system("sh /mnt/UDISK/app/recovery.sh"); #else system("sh /opt/recovery.sh"); #endif } void pdu_Ctrl::RestartSys() { system("reboot"); } void pdu_Ctrl::ButtonDown(int nButtonID, BtnDownType nDownType) { //规整按钮状态 switch (nButtonID) { case GPIO_KEY1://1按钮 nButtonStatus[0]=nDownType; break; case GPIO_KEY2: nButtonStatus[1]=nDownType; break; case GPIO_KEY3://3按钮 nButtonStatus[2]=nDownType; break; default: break; } qDebug()<<"Key1="<