2024-12-03 13:41:51 +08:00

191 lines
4.4 KiB
C++

#include "BCIManager.h"
#include <QFile>
#include <QApplication>
#include <QDebug>
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);
}