diff --git a/ZBD_IIIDL_S_Project/DependFile/QML/Ssvep.qml b/ZBD_IIIDL_S_Project/DependFile/QML/Ssvep.qml index e4d8f03..ef4b376 100644 --- a/ZBD_IIIDL_S_Project/DependFile/QML/Ssvep.qml +++ b/ZBD_IIIDL_S_Project/DependFile/QML/Ssvep.qml @@ -6,7 +6,7 @@ Item { property int hitIndex: -1 property bool bStimulate: false property int responseTime: 10 - property bool bTest: true + property bool bTest: false property bool bConnect: false; property var brainTrainForm: null property string red: "#EE6352" @@ -78,7 +78,7 @@ Item { "qrc:/DependFile/Source/brainTrain/upTest3/upper_stretch_R14.png", "qrc:/DependFile/Source/brainTrain/upTest3/upper_stretch_R15.png", "qrc:/DependFile/Source/brainTrain/upTest3/upper_stretch_R16.png", - ] + ]; function startStimulate() @@ -89,11 +89,8 @@ Item { if(!bConnect) { clientSocket.connectToHost(); - bConnect = true; - }else - { - clientSocket.writeBytes(getIntArr("1")); } + clientSocket.writeBytes(getIntArr("1")); } @@ -149,6 +146,15 @@ Item { } } + + Timer { + id: connectTimer + interval: 3*1000; + onTriggered: { + clientSocket.connected(); + } + } + function ssvepHit(index) { if(!bStimulate) @@ -211,8 +217,10 @@ Item { Component.onCompleted: { bci.initTrain(); + clientSocket.connectToHost(); } + TcpSocket{ id: clientSocket peer: "127.0.0.1" @@ -232,12 +240,18 @@ Item { onConnected: { console.info("Client socket connected"); - writeBytes(getIntArr("1")); + bConnect = true; + bci.deviceStatus(true); + if(connectTimer.running) + { + connectTimer.stop(); + } } onDisconnected: { console.info("Client socket disconnected"); bConnect = false; + bci.deviceStatus(false); } onPeerChanged: { @@ -248,8 +262,12 @@ Item { console.info("Client socket port changed: " + port); } onError: - { - console.info("Client socket disconnected") + { + console.info("Client socket error",socketError); + if(socketError === 0 || socketError === 1) + { + connectTimer.start(); + } } } BCIManager @@ -881,10 +899,8 @@ Item { anchors.fill: parent onClicked: { popimpedance.show() - popimpedance.colorChange(5,green) - - - + popimpedance.colorChange(2,green) + popimpedance.colorChange(3,green) } } @@ -892,12 +908,5 @@ Item { PopImpedance{ id:popimpedance } - - - - - - - } diff --git a/ZBD_IIIDL_S_Project/DependFile/Source/brainTrain/vision_link_on.png b/ZBD_IIIDL_S_Project/DependFile/Source/brainTrain/vision_link_on.png new file mode 100644 index 0000000..a47eaea Binary files /dev/null and b/ZBD_IIIDL_S_Project/DependFile/Source/brainTrain/vision_link_on.png differ diff --git a/ZBD_IIIDL_S_Project/DependFile/Source/signal/icon_brain_off.png b/ZBD_IIIDL_S_Project/DependFile/Source/signal/icon_brain_off.png new file mode 100644 index 0000000..b792397 Binary files /dev/null and b/ZBD_IIIDL_S_Project/DependFile/Source/signal/icon_brain_off.png differ diff --git a/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.cpp b/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.cpp index 12046bd..07f2442 100644 --- a/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.cpp +++ b/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.cpp @@ -10,6 +10,7 @@ #include "ccommunicateapi.h" #include "currentuserdata.h" #include "loginwidget.h" +#include "BCIManager.h" TitleWidget::TitleWidget(QWidget *parent) : QWidget(parent), @@ -17,27 +18,27 @@ TitleWidget::TitleWidget(QWidget *parent) : checkTimer(nullptr) { ui->setupUi(this); - connect(ui->back1_Btn,SIGNAL(clicked()),this,SLOT(slotBackClicked())); - connect(ui->back2_Btn,SIGNAL(clicked()),this,SLOT(slotBackClicked())); + connect(ui->back1_Btn, SIGNAL(clicked()), this, SLOT(slotBackClicked())); + connect(ui->back2_Btn, SIGNAL(clicked()), this, SLOT(slotBackClicked())); ui->user_Btn->setIcon(QIcon(":/DependFile/Source/User/user1.png")); - ui->user_Btn->setIconSize(QSize(40,40)); + ui->user_Btn->setIconSize(QSize(40, 40)); setBackBtnVisible(false); checkTimer = new QTimer(); checkTimer->setInterval(3000); - connect(checkTimer,SIGNAL(timeout()),this,SLOT(slotCheckTimer())); + connect(checkTimer, SIGNAL(timeout()), this, SLOT(slotCheckTimer())); checkTimer->start(); - connect(CCommunicateAPI::getInstance(),SIGNAL(signalCommunicateChanged(QString)),this,SLOT(slotStateChanged(QString))); + connect(CCommunicateAPI::getInstance(), SIGNAL(signalCommunicateChanged(QString)), this, SLOT(slotStateChanged(QString))); ui->signal_Label->setVisible(false); ui->wifiSignal2_Label->setVisible(true); - ui->brainSignal_Labe->move(1550,30); - ui->sound_Button->move(1480,30); + ui->brainSignal_Labe->move(1550, 30); + ui->sound_Button->move(1480, 30); - ui->wifiSignal_Label->move(1620,30); + ui->wifiSignal_Label->move(1620, 30); ui->title_Label->setText(tr("功能选择")); //默认汉字 @@ -47,6 +48,9 @@ TitleWidget::TitleWidget(QWidget *parent) : ui->back2_Btn->setVisible(true); m_soundDialog = new SoundDialog(); + + + connect(&BCIManager::getInstance(), &BCIManager::signalDeviceStatus, this, &TitleWidget::slotBciDeviceStatus); } TitleWidget::~TitleWidget() @@ -64,63 +68,69 @@ void TitleWidget::slotBackClicked() { int currentPage = MainWindowPageControl::getInstance()->getCurrentPageIndex(); - if(!(currentPage>=MainPage_E && currentPage <=visionTrain)) - currentPage = MainPage_E;//初始化异常值276795792,设置当前页索引为0 - qDebug()<<"当前页"<= MainPage_E && currentPage <= visionTrain)) + { + currentPage = MainPage_E; //初始化异常值276795792,设置当前页索引为0 + } + qDebug() << "当前页" << currentPage; switch(currentPage) { - case MainPage_E: - { - LoginWidget login;// - login.setWindowModality(Qt::WindowModal);// - login.exec(); // - // MainWindowPageControl::getInstance()->setCurrentPage(LoginPage_E); - // qDebug()<<"开始跳转"; - } - break; - case BrainTraining: - case UserPage_E: - case SettingPage_E: - case BicycleParamSet_E: - case FesBicycleParamSet_E: - MainWindowPageControl::getInstance()->setCurrentPage(MainPage_E); - break; - case FesParamSet_E: - { - - //分两种情况 - switch(m_trainType) - { - case 0://1、直接选择的FES训练跳到主界面 + case MainPage_E: + { + LoginWidget login;// + login.setWindowModality(Qt::WindowModal);// + login.exec(); // + // MainWindowPageControl::getInstance()->setCurrentPage(LoginPage_E); + // qDebug()<<"开始跳转"; + } + break; + case BrainTraining: + case UserPage_E: + case SettingPage_E: + case BicycleParamSet_E: + case FesBicycleParamSet_E: MainWindowPageControl::getInstance()->setCurrentPage(MainPage_E); break; - case 1://2、从踏车界面跳转到FES界面,跳到踏车界面 - MainWindowPageControl::getInstance()->setCurrentPage(BicycleParamSet_E); - break; - } - } - break; - case BicycleToFes_E: - MainWindowPageControl::getInstance()->setCurrentPage(FesBicycleParamSet_E); - break; - case TrainingParamSetting_E: - { - if(m_trainType == 0) - MainWindowPageControl::getInstance()->setCurrentPage(BicycleParamSet_E); - else if(m_trainType == 1) - MainWindowPageControl::getInstance()->setCurrentPage(FesBicycleParamSet_E); + case FesParamSet_E: + { - //qDebug() <<"Hello"; - } - break; - case visionTrain: - MainWindowPageControl::getInstance()->setCurrentPage(BrainTraining); - break; + //分两种情况 + switch(m_trainType) + { + case 0://1、直接选择的FES训练跳到主界面 + MainWindowPageControl::getInstance()->setCurrentPage(MainPage_E); + break; + case 1://2、从踏车界面跳转到FES界面,跳到踏车界面 + MainWindowPageControl::getInstance()->setCurrentPage(BicycleParamSet_E); + break; + } + } + break; + case BicycleToFes_E: + MainWindowPageControl::getInstance()->setCurrentPage(FesBicycleParamSet_E); + break; + case TrainingParamSetting_E: + { + if(m_trainType == 0) + { + MainWindowPageControl::getInstance()->setCurrentPage(BicycleParamSet_E); + } + else if(m_trainType == 1) + { + MainWindowPageControl::getInstance()->setCurrentPage(FesBicycleParamSet_E); + } + + //qDebug() <<"Hello"; + } + break; + case visionTrain: + MainWindowPageControl::getInstance()->setCurrentPage(BrainTraining); + break; } } //设置当前用户 -void TitleWidget::setUser(const ST_PatientMsg& st_patientMsg) +void TitleWidget::setUser(const ST_PatientMsg &st_patientMsg) { ui->user_Btn->setText(st_patientMsg.name); } @@ -136,52 +146,52 @@ void TitleWidget::setTitleByPage(E_PAGENAME pageType) QString title; switch(pageType) { - case MainPage_E: - title = tr("功能选择"); - setBackBtnVisible(true); - ui->quit_Btn->setVisible(false); - //只修改pageIndex,不发送槽函数 - MainWindowPageControl::getInstance()->setPageIndex(MainPage_E); - break; - case TrainingPage_E: - title = tr("");//上肢、下肢、四肢训练 - setBackBtnVisible(false); - ui->quit_Btn->setVisible(false); - break; - case UserPage_E: - title = tr("用户管理"); - setBackBtnVisible(true); - break; - case SettingPage_E: - title = tr("软件设置"); - setBackBtnVisible(true); - break; - case BicycleParamSet_E: - title = tr("参数设置"); - setBackBtnVisible(true); - break; - case FesParamSet_E: - setBackBtnVisible(true); - title = tr("FES参数"); - break; - case FesBicycleParamSet_E: - setBackBtnVisible(true); - title = tr("踏车参数"); - break; - case TrainingParamSetting_E: - setBackBtnVisible(true); - title = tr("参数设置"); - break; - case BrainTraining: - setBackBtnVisible(true); - title = tr("脑控康复"); - break; - case visionTrain: - setBackBtnVisible(true); - title = tr("视觉脑机康复训练"); - break; - default: - break; + case MainPage_E: + title = tr("功能选择"); + setBackBtnVisible(true); + ui->quit_Btn->setVisible(false); + //只修改pageIndex,不发送槽函数 + MainWindowPageControl::getInstance()->setPageIndex(MainPage_E); + break; + case TrainingPage_E: + title = tr("");//上肢、下肢、四肢训练 + setBackBtnVisible(false); + ui->quit_Btn->setVisible(false); + break; + case UserPage_E: + title = tr("用户管理"); + setBackBtnVisible(true); + break; + case SettingPage_E: + title = tr("软件设置"); + setBackBtnVisible(true); + break; + case BicycleParamSet_E: + title = tr("参数设置"); + setBackBtnVisible(true); + break; + case FesParamSet_E: + setBackBtnVisible(true); + title = tr("FES参数"); + break; + case FesBicycleParamSet_E: + setBackBtnVisible(true); + title = tr("踏车参数"); + break; + case TrainingParamSetting_E: + setBackBtnVisible(true); + title = tr("参数设置"); + break; + case BrainTraining: + setBackBtnVisible(true); + title = tr("脑控康复"); + break; + case visionTrain: + setBackBtnVisible(true); + title = tr("视觉脑机康复训练"); + break; + default: + break; } ui->title_Label->setText(title); } @@ -210,15 +220,15 @@ void TitleWidget::showWIFI() dwError = WlanOpenHandle(1, NULL, &dwNegotiatedVersion, &hClientHandle); if (dwError != ERROR_SUCCESS) { - WlanCloseHandle(hClientHandle,NULL); + WlanCloseHandle(hClientHandle, NULL); return; } PWLAN_INTERFACE_INFO_LIST pInterfaceList = NULL; - dwError = WlanEnumInterfaces(hClientHandle, NULL,&pInterfaceList); + dwError = WlanEnumInterfaces(hClientHandle, NULL, &pInterfaceList); if ( dwError != ERROR_SUCCESS ) { WlanFreeMemory(pInterfaceList); - WlanCloseHandle(hClientHandle,NULL); + WlanCloseHandle(hClientHandle, NULL); return; } @@ -226,44 +236,44 @@ void TitleWidget::showWIFI() PWLAN_AVAILABLE_NETWORK_LIST pWLAN_AVAILABLE_NETWORK_LIST = NULL; dwError = WlanGetAvailableNetworkList(hClientHandle, &guid, - 2,NULL, &pWLAN_AVAILABLE_NETWORK_LIST); + 2, NULL, &pWLAN_AVAILABLE_NETWORK_LIST); if (dwError != ERROR_SUCCESS) { WlanFreeMemory(pInterfaceList); WlanFreeMemory(pWLAN_AVAILABLE_NETWORK_LIST); - WlanCloseHandle(hClientHandle,NULL); + WlanCloseHandle(hClientHandle, NULL); return; } WLAN_AVAILABLE_NETWORK wlanAN; - bool isConnected=false; + bool isConnected = false; int numberOfItems = pWLAN_AVAILABLE_NETWORK_LIST->dwNumberOfItems; if (numberOfItems > 0) { - for(int i = 0; i Network[i]; if(wlanAN.dwFlags & 1) { - isConnected=true; + isConnected = true; - int wifiQuality=(int)wlanAN.wlanSignalQuality; + int wifiQuality = (int)wlanAN.wlanSignalQuality; - if(wifiQuality>75) + if(wifiQuality > 75) { QPixmap pixmapWireless(":/DependFile/Source/signal/wifi3.png"); ui->wifiSignal_Label->setPixmap(pixmapWireless); } - else if(wifiQuality>50&&wifiQuality<=75) + else if(wifiQuality > 50 && wifiQuality <= 75) { QPixmap pixmapWireless(":/DependFile/Source/signal/wifi2.png"); ui->wifiSignal_Label->setPixmap(pixmapWireless); } - else if(wifiQuality>25&&wifiQuality<=50) + else if(wifiQuality > 25 && wifiQuality <= 50) { QPixmap pixmapWireless(":/DependFile/Source/signal/wifi1.png"); ui->wifiSignal_Label->setPixmap(pixmapWireless); } - else if(wifiQuality>0&&wifiQuality<=25) + else if(wifiQuality > 0 && wifiQuality <= 25) { QPixmap pixmapWireless(":/icons/WirelessIcon3.png"); ui->wifiSignal_Label->setPixmap(pixmapWireless); @@ -279,7 +289,7 @@ void TitleWidget::showWIFI() } WlanFreeMemory(pInterfaceList); WlanFreeMemory(pWLAN_AVAILABLE_NETWORK_LIST); - WlanCloseHandle(hClientHandle,NULL); + WlanCloseHandle(hClientHandle, NULL); #else QPixmap pixmap; @@ -289,7 +299,9 @@ void TitleWidget::showWIFI() pixmap.load(":/DependFile/Source/signal/deviceConnected.png"); } else + { pixmap.load(":/DependFile/Source/signal/deviceDisconnected.png"); + } ui->wifiSignal_Label->setPixmap(pixmap); #endif @@ -325,21 +337,25 @@ void TitleWidget::slotSaveUpPicture() QString dirPath = QApplication::applicationDirPath() + "/DependFile/Source/trainDisplayPage"; QDir resultDir(dirPath); if(!resultDir.exists()) - qDebug()<<"保存图片失败"; + { + qDebug() << "保存图片失败"; + } if(upPicture.save(dirPath + "/upPicture.png")) - qDebug() <type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - QWidget::changeEvent(event); - break; + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + QWidget::changeEvent(event); + break; } setUser(CurrentUserData::getInstace()->getCurrentPatientMsg()); @@ -353,6 +369,18 @@ void TitleWidget::on_sound_Button_clicked() m_soundDialog->show(); } +void TitleWidget::slotBciDeviceStatus(bool bConnected) +{ + if(bConnected) + { + ui->brainSignal_Labe->setStyleSheet("QLabel#brainSignal_Labe{border-image:url(:/DependFile/Source/signal/icon_brain_on.png);}"); + } + else + { + ui->brainSignal_Labe->setStyleSheet("QLabel#brainSignal_Labe{border-image:url(:/DependFile/Source/signal/icon_brain_off.png);}"); + } +} + diff --git a/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.h b/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.h index 1235f4c..a869c81 100644 --- a/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.h +++ b/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.h @@ -8,8 +8,9 @@ #include #include "sounddialog.h" -namespace Ui { -class TitleWidget; +namespace Ui +{ + class TitleWidget; } class TitleWidget : public QWidget @@ -21,7 +22,7 @@ public: ~TitleWidget(); //设置当前用户 - void setUser(const ST_PatientMsg&); + void setUser(const ST_PatientMsg &); //设置wifi信号强度 void setSignalStrength(int value); //设置标题 @@ -34,9 +35,9 @@ public: void setTrainType(int8_t type); void setBackBtnVisible(bool); - void slotSaveUpPicture();//保存上截图 + void slotSaveUpPicture();//保存上截图 protected: - virtual void changeEvent(QEvent* event); + virtual void changeEvent(QEvent *event); signals: void signalCloseWindow(); private slots: @@ -50,7 +51,7 @@ private slots: //void on_back1_Btn_clicked(); - // void on_pushButton_clicked(); + // void on_pushButton_clicked(); @@ -62,6 +63,8 @@ private slots: //void on_back1_Btn_clicked(); + void slotBciDeviceStatus(bool bConnected); + private: void showWIFI(); private: diff --git a/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.ui b/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.ui index 018a027..77c2d17 100644 --- a/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.ui +++ b/ZBD_IIIDL_S_Project/Src/MainWindow/titlewidget.ui @@ -29,7 +29,6 @@ 黑体 28 - 75 true @@ -224,7 +223,7 @@ border:2px; - border-image: url(:/DependFile/Source/signal/icon_brain_on.png); + border-image: url(:/DependFile/Source/signal/icon_brain_off.png); diff --git a/ZBD_IIIDL_S_Project/Src/TrainManager/BCIManager.cpp b/ZBD_IIIDL_S_Project/Src/TrainManager/BCIManager.cpp index 8b7ca80..2d354a3 100644 --- a/ZBD_IIIDL_S_Project/Src/TrainManager/BCIManager.cpp +++ b/ZBD_IIIDL_S_Project/Src/TrainManager/BCIManager.cpp @@ -76,6 +76,8 @@ void BCIManager::initTrain() m_st_bicycleParam.resistance = 0; //阻力 Nm 0~20挡 m_st_bicycleParam.spasmType = 0; //默认逆向 } + + connect(this, &BCIManager::signalDeviceStatus, &getInstance(), &BCIManager::signalDeviceStatus); } void BCIManager::slotLinkerProgrameReadyReadStandardOutput() @@ -138,7 +140,7 @@ void BCIManager::startTrain(int Part, int Time) //状态控制 0-停止 1启动 2-暂停 3-继续 m_st_bicycleParam.controlState = 1; m_st_bicycleParam.bodyPart = Part; //训练部位 0-上肢 1-下肢 2-四肢 3-垂直上肢 - if(Part==2) + if(Part == 2) { m_st_bicycleParam.trainMode = 4; } @@ -181,3 +183,8 @@ void BCIManager::continueTrain() CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); } } + +void BCIManager::deviceStatus(bool bConnected) +{ + emit signalDeviceStatus(bConnected); +} diff --git a/ZBD_IIIDL_S_Project/Src/TrainManager/BCIManager.h b/ZBD_IIIDL_S_Project/Src/TrainManager/BCIManager.h index b5c751e..2ff9840 100644 --- a/ZBD_IIIDL_S_Project/Src/TrainManager/BCIManager.h +++ b/ZBD_IIIDL_S_Project/Src/TrainManager/BCIManager.h @@ -33,6 +33,7 @@ public: Q_INVOKABLE void stopTrain(); Q_INVOKABLE void pauseTrain(); Q_INVOKABLE void continueTrain(); + Q_INVOKABLE void deviceStatus(bool bConnected); private slots: //Linker程序的标准输出 @@ -48,6 +49,8 @@ private slots: signals: void signalQmlStopLinkerPrograme(); + void signalDeviceStatus(bool bConnected); + private: QProcess *m_pCmd = nullptr; diff --git a/ZBD_IIIDL_S_Project/image.qrc b/ZBD_IIIDL_S_Project/image.qrc index 5aa2072..1eb9b65 100644 --- a/ZBD_IIIDL_S_Project/image.qrc +++ b/ZBD_IIIDL_S_Project/image.qrc @@ -290,5 +290,6 @@ DependFile/Source/brainTrain/popup_Z_bg.png DependFile/Source/brainTrain/btn_Z.png DependFile/QML/PopImpedance.qml + DependFile/Source/signal/icon_brain_off.png diff --git a/ZBD_IIIDL_S_Project/release/UpLowLimp.exe b/ZBD_IIIDL_S_Project/release/UpLowLimp.exe index 9f1535a..387bb39 100644 Binary files a/ZBD_IIIDL_S_Project/release/UpLowLimp.exe and b/ZBD_IIIDL_S_Project/release/UpLowLimp.exe differ