11/25
This commit is contained in:
@@ -0,0 +1,349 @@
|
||||
#include "codecxyckanalog.h"
|
||||
|
||||
|
||||
CODECXyckAnalog::CODECXyckAnalog()
|
||||
:QObject()
|
||||
{
|
||||
_dataList=new QList<MyoelectricData>();
|
||||
iii=0;
|
||||
logFile=new QFile("d:/test.txt");
|
||||
logFile->open(QIODevice::Truncate|QIODevice::ReadWrite);
|
||||
qDebug()<<"build";
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::reqSetting(int iChannel, AnalogSetting setting)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_SETTING));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(setting.workmode));
|
||||
buffer.append(static_cast<char>(setting.samplerate>>8));
|
||||
buffer.append(static_cast<char>(setting.samplerate%0x100));
|
||||
buffer.append(static_cast<char>(static_cast<int>(setting.frequency*2)>>8));
|
||||
buffer.append(static_cast<char>(static_cast<int>(setting.frequency*2)%0x100));
|
||||
buffer.append(static_cast<char>(setting.pulseWidth>>8));
|
||||
buffer.append(static_cast<char>(setting.pulseWidth%0x100));
|
||||
buffer.append(static_cast<char>(static_cast<int>(setting.risingTime*2)>>8));
|
||||
buffer.append(static_cast<char>(static_cast<int>(setting.risingTime*2)%0x100));
|
||||
buffer.append(static_cast<char>(setting.holdingTime>>8));
|
||||
buffer.append(static_cast<char>(setting.holdingTime%0x100));
|
||||
buffer.append(static_cast<char>(static_cast<int>(setting.fallingTime*2)>>8));
|
||||
buffer.append(static_cast<char>(static_cast<int>(setting.fallingTime*2)%0x100));
|
||||
buffer.append(static_cast<char>(setting.breakTime>>8));
|
||||
buffer.append(static_cast<char>(setting.breakTime%0x100));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::reqChannalControl(ChannelState ch1, ChannelState ch2, ChannelState ch3, ChannelState ch4)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_CHANNAL_CONTROL));
|
||||
buffer.append(static_cast<char>(ch1));
|
||||
buffer.append(static_cast<char>(ch2));
|
||||
buffer.append(static_cast<char>(ch3));
|
||||
buffer.append(static_cast<char>(ch4));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::reqSetCurrent(int iChannel, int iCurrent)
|
||||
{
|
||||
if(iCurrent>100||iCurrent<0)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_SET_CURRENT));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(iCurrent));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::reqDataChange(int iChannel, DataMode datamode)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_DATA_CHANGE));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(datamode));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::reqSetGain(int iChannel, GainMode gainmode)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_SET_GAIN));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(gainmode));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::reqSetCollect(int iChannel, ChannelState channelstate)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_SET_COLLECT));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(channelstate));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::reqSetStimulate(int iChannel, ChannelState channelstate)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_SET_STIMULATE));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(channelstate));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::reqGetState()
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_STATE));
|
||||
buffer.append(static_cast<char>(0));
|
||||
buffer.append(static_cast<char>(0));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CODECXyckAnalog::dealFrame(QByteArray buffer)
|
||||
{
|
||||
switch (static_cast<uint8_t>(buffer.data()[2]))
|
||||
{
|
||||
case FUNCCODE_ANALOG_SETTING:
|
||||
respSetting(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_CHANNAL_CONTROL:
|
||||
respChannalControl(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_SET_CURRENT:
|
||||
respSetCurrent(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_DATA_UPLOAD:
|
||||
respDataUpload(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_DATA_CHANGE:
|
||||
respDataChange(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_SET_GAIN:
|
||||
respSetGain(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_SET_COLLECT:
|
||||
respSetCollect(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_SET_STIMULATE:
|
||||
respSetStimulate(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_STATE:
|
||||
respGetState(buffer);
|
||||
break;
|
||||
case FUNCCODE_ANALOG_ERROR:
|
||||
emit commandSendError(static_cast<uint8_t>(buffer.data()[3])
|
||||
,ErrorCode(static_cast<uint8_t>(buffer.data()[4]))
|
||||
,static_cast<uint8_t>(buffer.data()[5]));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::clearList()
|
||||
{
|
||||
_dataList->clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
QList<MyoelectricData> *CODECXyckAnalog::GetMyoelectricData(int iStep)
|
||||
{
|
||||
|
||||
int iCount=_dataList->length();
|
||||
|
||||
if(iCount<=0)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int iDT=0;
|
||||
if(iStep<=iCount&&iStep!=0)
|
||||
{
|
||||
iDT=iCount/iStep;
|
||||
}
|
||||
if(iDT<1)
|
||||
{
|
||||
iDT=0;
|
||||
}
|
||||
QList<MyoelectricData> *resultList=new QList<MyoelectricData>();
|
||||
for(int i=0;i<iCount;)
|
||||
{
|
||||
resultList->append(_dataList->takeFirst());
|
||||
i++;
|
||||
if(resultList->count()==iStep)
|
||||
{
|
||||
break;
|
||||
}
|
||||
for(int j=0;j<iDT&&i<iCount;j++)
|
||||
{
|
||||
_dataList->takeFirst();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::respAnalogState(AnalogState *as)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_STATE));
|
||||
buffer.append(static_cast<char>(0x00));
|
||||
buffer.append(static_cast<char>(as->electrodeStateA));
|
||||
buffer.append(static_cast<char>(as->electrodeStateB));
|
||||
buffer.append(static_cast<char>(as->electrodeStateC));
|
||||
buffer.append(static_cast<char>(as->electrodeStateD));
|
||||
buffer.append(static_cast<char>(as->resetState));
|
||||
buffer.append(static_cast<char>(as->channelWorkStateA));
|
||||
buffer.append(static_cast<char>(as->channelWorkStateB));
|
||||
buffer.append(static_cast<char>(as->channelWorkStateC));
|
||||
buffer.append(static_cast<char>(as->channelWorkStateD));
|
||||
|
||||
buffer.append(static_cast<char>(as->AValueA));
|
||||
buffer.append(static_cast<char>(as->AValueB));
|
||||
buffer.append(static_cast<char>(as->AValueC));
|
||||
buffer.append(static_cast<char>(as->AValueD));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::respMyoelectricData(MyoelectricData *md)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_ANALOG_DATA_UPLOAD));
|
||||
buffer.append(static_cast<char>(0x00));
|
||||
buffer.append(static_cast<char>(md->ch1>>8));
|
||||
buffer.append(static_cast<char>(md->ch1%0x100));
|
||||
buffer.append(static_cast<char>(md->ch2>>8));
|
||||
buffer.append(static_cast<char>(md->ch2%0x100));
|
||||
buffer.append(static_cast<char>(md->ch3>>8));
|
||||
buffer.append(static_cast<char>(md->ch3%0x100));
|
||||
buffer.append(static_cast<char>(md->ch4>>8));
|
||||
buffer.append(static_cast<char>(md->ch4%0x100));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respSetting(QByteArray buffer)
|
||||
{
|
||||
int iChannel=buffer.data()[3];
|
||||
AnalogSetting *analogSetting=new AnalogSetting();
|
||||
analogSetting->workmode =WorkMode(static_cast<uint8_t>(buffer.data()[4]));
|
||||
analogSetting->samplerate=SampleRate((static_cast<uint8_t>(buffer.data()[5])<<8)+static_cast<uint8_t>(buffer.data()[6]));
|
||||
analogSetting->frequency = ((static_cast<uint8_t>(buffer.data()[7])<<8)+static_cast<uint8_t>(buffer.data()[8]))/2.0;
|
||||
analogSetting->pulseWidth =(static_cast<uint8_t>(buffer.data()[9])<<8)+static_cast<uint8_t>(buffer.data()[10]);
|
||||
analogSetting->risingTime= ((static_cast<uint8_t>(buffer.data()[11])<<8)+static_cast<uint8_t>(buffer.data()[12]))/2.0;
|
||||
analogSetting->holdingTime =(static_cast<uint8_t>(buffer.data()[13])<<8)+static_cast<uint8_t>(buffer.data()[14]);
|
||||
analogSetting->fallingTime=((static_cast<uint8_t>(buffer.data()[15])<<8)+static_cast<uint8_t>(buffer.data()[16]))/2.0;
|
||||
analogSetting->breakTime =(static_cast<uint8_t>(buffer.data()[17])<<8)+static_cast<uint8_t>(buffer.data()[18]);
|
||||
emit analogSettingRev(iChannel,analogSetting);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respChannalControl(QByteArray buffer)
|
||||
{
|
||||
ChannelState ch1=ChannelState(static_cast<uint8_t>(buffer.data()[3]));
|
||||
ChannelState ch2=ChannelState(static_cast<uint8_t>(buffer.data()[4]));
|
||||
ChannelState ch3=ChannelState(static_cast<uint8_t>(buffer.data()[5]));
|
||||
ChannelState ch4=ChannelState(static_cast<uint8_t>(buffer.data()[6]));
|
||||
emit channalControlRev(ch1,ch2,ch3,ch4);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respSetCurrent(QByteArray buffer)
|
||||
{
|
||||
int iChannel=buffer.data()[3];
|
||||
int iCurrent=static_cast<uint8_t>(buffer.data()[4]);
|
||||
emit currentRev(iChannel,iCurrent);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respDataUpload(QByteArray buffer)
|
||||
{
|
||||
ignoreCount++;
|
||||
|
||||
MyoelectricData md;
|
||||
md.ch1=(static_cast<uint8_t>(buffer.data()[4])<<8)+static_cast<uint8_t>(buffer.data()[5]);
|
||||
md.ch2=(static_cast<uint8_t>(buffer.data()[6])<<8)+static_cast<uint8_t>(buffer.data()[7]);
|
||||
md.ch3=(static_cast<uint8_t>(buffer.data()[8])<<8)+static_cast<uint8_t>(buffer.data()[9]);
|
||||
md.ch4=(static_cast<uint8_t>(buffer.data()[10])<<8)+static_cast<uint8_t>(buffer.data()[11]);
|
||||
QString logTemp=QString::number(md.ch1)+" "+QString::number(md.ch2)+" "+QString::number(md.ch3)+" "+QString::number(md.ch4)+"\r\n";
|
||||
logFile->write(logTemp.toUtf8());
|
||||
logFile->flush();
|
||||
// if(ignoreCount%100==0)
|
||||
// {
|
||||
// qDebug()<<QString::number(ignoreCount);
|
||||
// qDebug()<<"ch1:"<<QString::number(md.ch1)<<"ch2:"<<QString::number(md.ch2)<<"ch3:"<<QString::number(md.ch3)<<"ch4:"<<QString::number(md.ch4);
|
||||
// }
|
||||
_dataList->append(md);
|
||||
|
||||
|
||||
//qDebug()<<QString::number(md.ch1);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respDataChange(QByteArray buffer)
|
||||
{
|
||||
int iChannel=static_cast<uint8_t>(buffer.data()[3]);
|
||||
DataMode dm=DataMode(static_cast<uint8_t>(buffer.data()[4]));
|
||||
ignoreCount=0;
|
||||
emit dataChangeRev(iChannel,dm);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respSetGain(QByteArray buffer)
|
||||
{
|
||||
int iChannel=static_cast<uint8_t>(buffer.data()[3]);
|
||||
GainMode gm=GainMode(static_cast<uint8_t>(buffer.data()[4]));
|
||||
emit gainRev(iChannel,gm);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respSetCollect(QByteArray buffer)
|
||||
{
|
||||
int iChannel=static_cast<uint8_t>(buffer.data()[3]);
|
||||
ChannelState cs=ChannelState(static_cast<uint8_t>(buffer.data()[4]));
|
||||
emit collectRev(iChannel,cs);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respSetStimulate(QByteArray buffer)
|
||||
{
|
||||
int iChannel=static_cast<uint8_t>(buffer.data()[3]);
|
||||
ChannelState cs=ChannelState(static_cast<uint8_t>(buffer.data()[4]));
|
||||
emit stimulateRev(iChannel,cs);
|
||||
}
|
||||
|
||||
void CODECXyckAnalog::respGetState(QByteArray buffer)
|
||||
{
|
||||
AnalogState *analogstate = new AnalogState();
|
||||
analogstate->electrodeStateA=ModeState(static_cast<uint8_t>(buffer.data()[4]));
|
||||
analogstate->electrodeStateB=ModeState(static_cast<uint8_t>(buffer.data()[5]));
|
||||
analogstate->electrodeStateC=ModeState(static_cast<uint8_t>(buffer.data()[6]));
|
||||
analogstate->electrodeStateD=ModeState(static_cast<uint8_t>(buffer.data()[7]));
|
||||
analogstate->resetState=ModeState(static_cast<uint8_t>(buffer.data()[8]));
|
||||
analogstate->channelWorkStateA=ChannelWorkState(static_cast<uint8_t>(buffer.data()[9]));
|
||||
analogstate->channelWorkStateB=ChannelWorkState(static_cast<uint8_t>(buffer.data()[10]));
|
||||
analogstate->channelWorkStateC=ChannelWorkState(static_cast<uint8_t>(buffer.data()[11]));
|
||||
analogstate->channelWorkStateD=ChannelWorkState(static_cast<uint8_t>(buffer.data()[12]));
|
||||
analogstate->AValueA=static_cast<uint8_t>(buffer.data()[13]);
|
||||
analogstate->AValueB=static_cast<uint8_t>(buffer.data()[14]);
|
||||
analogstate->AValueC=static_cast<uint8_t>(buffer.data()[15]);
|
||||
analogstate->AValueD=static_cast<uint8_t>(buffer.data()[16]);
|
||||
emit stateInfoRev(analogstate);
|
||||
|
||||
|
||||
}
|
||||
|
||||
QByteArray CODECXyckAnalog::createFrame(QByteArray dataBuffer)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FRAME_HEAD));
|
||||
buffer.append(static_cast<char>(dataBuffer.length()));
|
||||
for(int i=0;i<dataBuffer.length();i++)
|
||||
{
|
||||
buffer.append(dataBuffer.data()[i]);
|
||||
}
|
||||
buffer.append(DataCheck::getSum(buffer,2,buffer.length()-1));
|
||||
buffer.append(0x55);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
#ifndef CODECXYCKANALOG_H
|
||||
#define CODECXYCKANALOG_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
#include <QList>
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include "XYComFunc_global.h"
|
||||
//#include "CommomFunc/datacheck.h"
|
||||
#include "commonStruct.h"
|
||||
/**
|
||||
* @brief 模拟板编解码类
|
||||
*/
|
||||
class XYCOMFUNC_EXPORT CODECXyckAnalog :public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
/**
|
||||
* @brief 编解码类构造
|
||||
*/
|
||||
CODECXyckAnalog();
|
||||
/**
|
||||
* @brief 设置方案
|
||||
* @param 指定通道
|
||||
* @param 参数结构体,包含波升波降脉宽频率工作时间休息时间
|
||||
* @return
|
||||
*/
|
||||
QByteArray reqSetting(int iChannel ,AnalogSetting setting);
|
||||
QByteArray reqChannalControl(ChannelState ch1,ChannelState ch2,ChannelState ch3,ChannelState ch4);
|
||||
QByteArray reqSetCurrent(int iChannel,int iCurrent);
|
||||
QByteArray reqDataChange(int iChannel,DataMode datamode);
|
||||
QByteArray reqSetGain(int iChannel,GainMode gainmode);
|
||||
QByteArray reqSetCollect(int iChannel,ChannelState channelstate);
|
||||
QByteArray reqSetStimulate(int iChannel,ChannelState channelstate);
|
||||
QByteArray reqGetState();
|
||||
void dealFrame(QByteArray buffer);
|
||||
void clearList();
|
||||
|
||||
QList<MyoelectricData> *GetMyoelectricData(int iStep=0);
|
||||
|
||||
|
||||
//以下仅测试适用,实际由下位机发送
|
||||
QByteArray respAnalogState(AnalogState *as);
|
||||
|
||||
QByteArray respMyoelectricData(MyoelectricData *md);
|
||||
|
||||
signals:
|
||||
void commandSendError(int iChannel,ErrorCode errorcode,int iFunctionCode);
|
||||
void analogSettingRev(int iChannel,AnalogSetting *analogsetting);
|
||||
void channalControlRev(ChannelState ch1,ChannelState ch2,ChannelState ch3,ChannelState ch4);
|
||||
void currentRev(int iChannel,int iCurrent);
|
||||
void dataChangeRev(int iChannel,DataMode datamode);
|
||||
void gainRev(int iChannel,GainMode gainmode);
|
||||
void collectRev(int iChannel,ChannelState channelstate);
|
||||
void stimulateRev(int iChannel,ChannelState channelstate);
|
||||
void stateInfoRev(AnalogState *analogstate);
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
void respSetting(QByteArray buffer);
|
||||
void respChannalControl(QByteArray buffer);
|
||||
void respSetCurrent(QByteArray buffer);
|
||||
void respDataUpload(QByteArray buffer);
|
||||
void respDataChange(QByteArray buffer);
|
||||
void respSetGain(QByteArray buffer);
|
||||
void respSetCollect(QByteArray buffer);
|
||||
void respSetStimulate(QByteArray buffer);
|
||||
void respGetState(QByteArray buffer);
|
||||
|
||||
QByteArray createFrame(QByteArray dataBuffer);
|
||||
|
||||
|
||||
private:
|
||||
QList<MyoelectricData> *_dataList;
|
||||
int iii ;
|
||||
int ignoreCount=0;
|
||||
QFile *logFile;
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // CODECXYCKANALOG_H
|
||||
@@ -0,0 +1,180 @@
|
||||
#include "codecxyckdigital.h"
|
||||
|
||||
CODECXyckDigital::CODECXyckDigital()
|
||||
: QObject()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::reqGetInfo()
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_DIGITAL_GET_INFO));
|
||||
buffer.append(static_cast<char>(0x00));
|
||||
buffer.append(static_cast<char>(0x00));
|
||||
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::reqControl(int iChannel, LightState lightstate)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_DIGITAL_CONTROL));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(lightstate));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::reqPreconditioning(int iChannel, ModeState modestate)
|
||||
{
|
||||
qDebug()<<"预设电流: Channel:"<<QString::number(iChannel)<<" Mode:"<<modestate;
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_DIGITAL_PRECONDITIONING));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(modestate));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::resqPowoff(PowState powstate)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_DIGITAL_POWOFF));
|
||||
buffer.append(static_cast<char>(0x00));
|
||||
buffer.append(static_cast<char>(powstate));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::reqUpdateA(int iChannel, int AValue)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_DIGITAL_UPDATE_A));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(AValue));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::reqPowOn(ModeState state)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_DIGITAL_POWON));
|
||||
buffer.append(static_cast<char>(0x00));
|
||||
buffer.append(static_cast<char>(state));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
void CODECXyckDigital::dealFrame(QByteArray buffer)
|
||||
{
|
||||
switch (static_cast<uint8_t>(buffer.data()[2]))
|
||||
{
|
||||
case FUNCCODE_DIGITAL_GET_INFO:
|
||||
respGetInfo(buffer);
|
||||
break;
|
||||
case FUNCCODE_DIGITAL_CONTROL:
|
||||
respControl(buffer);
|
||||
break;
|
||||
case FUNCCODE_DIGITAL_PRECONDITIONING:
|
||||
resqPreconditioning(buffer);
|
||||
break;
|
||||
case FUNCCODE_DIGITAL_POWOFF:
|
||||
reqPowoff();
|
||||
break;
|
||||
case FUNCCODE_DIGITAL_UPDATE_A:
|
||||
resqUpdateA(buffer);
|
||||
break;
|
||||
case FUNCCODE_DIGITAL_ERROR:
|
||||
emit commandSendError(static_cast<uint8_t>(buffer.data()[3])
|
||||
,ErrorCode(static_cast<uint8_t>(buffer.data()[4]))
|
||||
,static_cast<uint8_t>(buffer.data()[5]));
|
||||
break;
|
||||
default:
|
||||
emit frameError(ErrorCode::ErrorFuncCode,createError(0,buffer.data()[3],ErrorCode::ErrorFuncCode));
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::respDigitalInfo(DigitalInfo *di)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FUNCCODE_DIGITAL_GET_INFO));
|
||||
buffer.append(static_cast<char>(0x00));
|
||||
buffer.append(static_cast<char>(di->adapterState));
|
||||
buffer.append(static_cast<char>(di->batteryState));
|
||||
buffer.append(static_cast<char>(di->reset));
|
||||
buffer.append(static_cast<char>(di->AChannelA));
|
||||
buffer.append(static_cast<char>(di->AChannelB));
|
||||
buffer.append(static_cast<char>(di->AChannelC));
|
||||
buffer.append(static_cast<char>(di->AChannelD));
|
||||
buffer.append(static_cast<char>(0));
|
||||
buffer.append(static_cast<char>(0));
|
||||
return createFrame(buffer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CODECXyckDigital::respGetInfo(QByteArray buffer)
|
||||
{
|
||||
DigitalInfo *di= new DigitalInfo();
|
||||
di->adapterState=static_cast<uint8_t>(buffer.data()[4]);
|
||||
di->batteryState=static_cast<uint8_t>(buffer.data()[5]);
|
||||
di->reset=static_cast<uint8_t>(buffer.data()[6]);
|
||||
di->AChannelA=static_cast<uint8_t>(buffer.data()[7]);
|
||||
di->AChannelB=static_cast<uint8_t>(buffer.data()[8]);
|
||||
di->AChannelC=static_cast<uint8_t>(buffer.data()[9]);
|
||||
di->AChannelD=static_cast<uint8_t>(buffer.data()[10]);
|
||||
//qDebug()<<"AChannelA:"<<QString::number(di->AChannelA)<<"AChannelB:"<<QString::number(di->AChannelB)<<"AChannelC:"<<QString::number(di->AChannelC)<<"AChannelD:"<<QString::number(di->AChannelD);
|
||||
emit digitalInfoRev(di);
|
||||
}
|
||||
|
||||
void CODECXyckDigital::respControl(QByteArray buffer)
|
||||
{
|
||||
LightState ls=LightState(static_cast<uint8_t>(buffer.data()[4]));
|
||||
emit controlRespond(static_cast<uint8_t>(buffer.data()[3]),ls);
|
||||
}
|
||||
|
||||
void CODECXyckDigital::resqPreconditioning(QByteArray buffer)
|
||||
{
|
||||
emit preconditioningRespond(static_cast<uint8_t>(buffer.data()[3]),ModeState(static_cast<uint8_t>(buffer.data()[4])));
|
||||
}
|
||||
|
||||
void CODECXyckDigital::reqPowoff()
|
||||
{
|
||||
emit powOffCommandRev();
|
||||
}
|
||||
|
||||
void CODECXyckDigital::resqUpdateA(QByteArray buffer)
|
||||
{
|
||||
emit AUpdated(static_cast<uint8_t>(buffer.data()[3]),ModeState(static_cast<uint8_t>(buffer.data()[4])));
|
||||
}
|
||||
|
||||
void CODECXyckDigital::resqPowOn(QByteArray buffer)
|
||||
{
|
||||
emit PowOn(ModeState(static_cast<uint8_t>(buffer.data()[4])));
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::createFrame(QByteArray dataBuffer)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(FRAME_HEAD));
|
||||
buffer.append(static_cast<char>(dataBuffer.length()));
|
||||
for(int i=0;i<dataBuffer.length();i++)
|
||||
{
|
||||
buffer.append(dataBuffer.data()[i]);
|
||||
}
|
||||
buffer.append(DataCheck::getSum(buffer,2,buffer.length()-1));
|
||||
buffer.append(0x55);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
QByteArray CODECXyckDigital::createError(int iFuncCode, int iChannel, ErrorCode errcode)
|
||||
{
|
||||
QByteArray buffer;
|
||||
buffer.append(static_cast<char>(0x8F));
|
||||
buffer.append(static_cast<char>(iChannel));
|
||||
buffer.append(static_cast<char>(iFuncCode));
|
||||
buffer.append(static_cast<char>(errcode));
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
#ifndef CODECXYCKDIGITAL_H
|
||||
#define CODECXYCKDIGITAL_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
#include <QDebug>
|
||||
#include "XYComFunc_global.h"
|
||||
#include "CommomFunc/datacheck.h"
|
||||
#include "commonStruct.h"
|
||||
|
||||
class XYCOMFUNC_EXPORT CODECXyckDigital : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CODECXyckDigital();
|
||||
/**
|
||||
* @brief 轮询请求
|
||||
* @return
|
||||
*/
|
||||
QByteArray reqGetInfo();
|
||||
|
||||
/**
|
||||
* @brief 控制请求,控制灯亮状态
|
||||
* @return
|
||||
*/
|
||||
QByteArray reqControl(int iChannel,LightState lightstate);
|
||||
/**
|
||||
* @brief 预调节请求
|
||||
* @return
|
||||
*/
|
||||
QByteArray reqPreconditioning(int iChannel,ModeState modestate);
|
||||
/**
|
||||
* @brief 关机指令响应
|
||||
* @param powstate
|
||||
* @return
|
||||
*/
|
||||
QByteArray resqPowoff(PowState powstate);
|
||||
/**
|
||||
* @brief 处理串口类收到的数据帧
|
||||
* @param buffer
|
||||
*/
|
||||
void dealFrame(QByteArray buffer);
|
||||
|
||||
QByteArray reqUpdateA(int iChannel,int AValue);
|
||||
|
||||
QByteArray reqPowOn(ModeState state);
|
||||
|
||||
//以下方法仅仅用于测试
|
||||
QByteArray respDigitalInfo(DigitalInfo *di);
|
||||
|
||||
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief 处理状态请求应答
|
||||
* @param buffer
|
||||
*/
|
||||
void respGetInfo(QByteArray buffer);
|
||||
/**
|
||||
* @brief 处理控制请求应答
|
||||
* @param buffer
|
||||
*/
|
||||
void respControl(QByteArray buffer);
|
||||
/**
|
||||
* @brief 处理预调节请求应答
|
||||
* @param buffer
|
||||
*/
|
||||
void resqPreconditioning(QByteArray buffer);
|
||||
/**
|
||||
* @brief 处理关机请求
|
||||
*/
|
||||
void reqPowoff();
|
||||
/**
|
||||
* @brief 处理异常应答
|
||||
* @param buffer
|
||||
*/
|
||||
void resqError(QByteArray buffer);
|
||||
void resqUpdateA(QByteArray buffer);
|
||||
void resqPowOn(QByteArray buffer);
|
||||
/**
|
||||
* @brief 生成完整的数据帧
|
||||
* @param 数据位
|
||||
* @return
|
||||
*/
|
||||
QByteArray createFrame(QByteArray dataBuffer);
|
||||
/**
|
||||
* @brief 创建异常信息应答
|
||||
* @param iFuncCode
|
||||
* @param iChannel
|
||||
* @param errcode
|
||||
* @return
|
||||
*/
|
||||
QByteArray createError(int iFuncCode,int iChannel,ErrorCode errcode);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
signals:
|
||||
void commandSendError(int iChannel,ErrorCode errorcode,int iFunctionCode);
|
||||
/**
|
||||
* @brief 帧数据解析异常
|
||||
* @param errorcode
|
||||
* @param errBuffer
|
||||
*/
|
||||
void frameError(ErrorCode errorcode,QByteArray errBuffer=nullptr);
|
||||
/**
|
||||
* @brief 数字板信息接收信号
|
||||
* @param di
|
||||
*/
|
||||
void digitalInfoRev(DigitalInfo *di);
|
||||
/**
|
||||
* @brief 关机指令接收信号
|
||||
*/
|
||||
void powOffCommandRev();
|
||||
/**
|
||||
* @brief 控制响应接收信号
|
||||
* @param iChannel
|
||||
* @param lightstate
|
||||
*/
|
||||
void controlRespond(int iChannel,LightState lightstate);
|
||||
/**
|
||||
* @brief 预调节响应接收信号
|
||||
* @param iChannel
|
||||
* @param modestate
|
||||
*/
|
||||
void preconditioningRespond(int iChannel,ModeState modestate);
|
||||
void AUpdated(int iChannel,int AValue);
|
||||
void PowOn(ModeState powOnState);
|
||||
|
||||
public slots:
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // CODECXYCKDIGITAL_H
|
||||
Reference in New Issue
Block a user