191 lines
4.4 KiB
C++
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);
|
|
}
|