#include "BCIManager.h" #include #include #include BCIManager::BCIManager(QObject *parent) : QObject{parent} { } bool BCIManager::startLinkerPrograme() { QString strPath = QApplication::applicationDirPath().append("/cmd.txt"); QFile file(strPath); if (!file.open(QIODevice::ReadOnly)) { qDebug() << file.errorString(); return false; } QString strContent; QTextStream in(&file); while (!in.atEnd()) { strContent = in.readLine(); if(!strContent.isEmpty()) { break; } } if(strContent.isEmpty()) { qDebug() << "cmd is empty"; return false; } //启动进程 //QString strCmd = QApplication::applicationDirPath().append("/BCILinker/SunnyLinkTool/") + strContent; QString strCmd = QString("./") + strContent; qDebug() << strCmd; if(nullptr == m_pCmd) { m_pCmd = new QProcess(this); connect(m_pCmd, &QProcess::readyReadStandardOutput, this, &BCIManager::slotLinkerProgrameReadyReadStandardOutput); connect(m_pCmd, &QProcess::readyReadStandardError, this, &BCIManager::slotLinkerProgrameReadyReadStandardError); } m_pCmd->start(strCmd); } void BCIManager::initTrain() { if(nullptr == heartTimer) { heartTimer = new QTimer(); heartTimer->setInterval(1000); heartTimer->start(); connect(heartTimer, SIGNAL(timeout()), this, SLOT(slotHeartTimer())); } if(nullptr == trainTimer) { trainTimer = new QTimer(); connect(trainTimer, SIGNAL(timeout()), this, SLOT(slotTrainTimer())); m_st_bicycleParam.trainMode = 0; //被动 m_st_bicycleParam.spasmSwitch = 1; //开启 m_st_bicycleParam.spasmLevel = 1; //默认一级 m_st_bicycleParam.configPower = 0; //默认低 m_st_bicycleParam.switchDirectonTime = 0; //换向时间默认10 m_st_bicycleParam.phaseValue = 0; //协同相位值 m_st_bicycleParam.direction = 1; //方向正向 m_st_bicycleParam.speed = 20; //速度 10 m_st_bicycleParam.resistance = 0; //阻力 Nm 0~20挡 m_st_bicycleParam.spasmType = 0; //默认逆向 } connect(this, &BCIManager::signalDeviceStatus, &getInstance(), &BCIManager::signalDeviceStatus); } void BCIManager::slotLinkerProgrameReadyReadStandardOutput() { if(m_pCmd) { qDebug() << m_pCmd->readAllStandardOutput(); } } void BCIManager::slotLinkerProgrameReadyReadStandardError() { if(m_pCmd) { qDebug() << m_pCmd->readAllStandardError(); } } void BCIManager::slotHeartTimer() { //qDebug()<<"上位机发送心跳"; CCommunicateAPI::getInstance()->sendHeartBeat(); static int num = 0; ++num; if(num > 3) { num = 0; QPixmap pixmap; if(heartCount < 1) { } else { } if(heartCount >= 3) { heartCount = 0; } } } void BCIManager::slotTrainTimer() { stopTrain(); } void BCIManager::startTrain(int Part, int Time) { initTrain(); if(trainTimer->isActive()) { stopTrain(); } trainTimer->setInterval(Time * 1000); trainTimer->start(); //状态控制 0-停止 1启动 2-暂停 3-继续 m_st_bicycleParam.controlState = 1; m_st_bicycleParam.bodyPart = Part; //训练部位 0-上肢 1-下肢 2-四肢 3-垂直上肢 if(Part == 2) { m_st_bicycleParam.trainMode = 4; } else { m_st_bicycleParam.trainMode = 0; } m_st_bicycleParam.trainTime = 99; CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); } void BCIManager::stopTrain() { if(trainTimer) { if(trainTimer->isActive()) { trainTimer->stop(); } m_st_bicycleParam.controlState = 0; CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); } } void BCIManager::pauseTrain() { if(trainTimer) { trainTimer->stop(); m_st_bicycleParam.controlState = 2; CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); } } void BCIManager::continueTrain() { if(trainTimer) { trainTimer->start(); m_st_bicycleParam.controlState = 3; CCommunicateAPI::getInstance()->sendBicycleParam(m_st_bicycleParam); } } void BCIManager::deviceStatus(bool bConnected) { emit signalDeviceStatus(bConnected); }