#include "codecxyckanalog.h" CODECXyckAnalog::CODECXyckAnalog() :QObject() { _dataList=new QList(); 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(FUNCCODE_ANALOG_SETTING)); buffer.append(static_cast(iChannel)); buffer.append(static_cast(setting.workmode)); buffer.append(static_cast(setting.samplerate>>8)); buffer.append(static_cast(setting.samplerate%0x100)); buffer.append(static_cast(static_cast(setting.frequency*2)>>8)); buffer.append(static_cast(static_cast(setting.frequency*2)%0x100)); buffer.append(static_cast(setting.pulseWidth>>8)); buffer.append(static_cast(setting.pulseWidth%0x100)); buffer.append(static_cast(static_cast(setting.risingTime*2)>>8)); buffer.append(static_cast(static_cast(setting.risingTime*2)%0x100)); buffer.append(static_cast(setting.holdingTime>>8)); buffer.append(static_cast(setting.holdingTime%0x100)); buffer.append(static_cast(static_cast(setting.fallingTime*2)>>8)); buffer.append(static_cast(static_cast(setting.fallingTime*2)%0x100)); buffer.append(static_cast(setting.breakTime>>8)); buffer.append(static_cast(setting.breakTime%0x100)); return createFrame(buffer); } QByteArray CODECXyckAnalog::reqChannalControl(ChannelState ch1, ChannelState ch2, ChannelState ch3, ChannelState ch4) { QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_CHANNAL_CONTROL)); buffer.append(static_cast(ch1)); buffer.append(static_cast(ch2)); buffer.append(static_cast(ch3)); buffer.append(static_cast(ch4)); return createFrame(buffer); } QByteArray CODECXyckAnalog::reqSetCurrent(int iChannel, int iCurrent) { if(iCurrent>100||iCurrent<0) { return nullptr; } QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_SET_CURRENT)); buffer.append(static_cast(iChannel)); buffer.append(static_cast(iCurrent)); return createFrame(buffer); } QByteArray CODECXyckAnalog::reqDataChange(int iChannel, DataMode datamode) { QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_DATA_CHANGE)); buffer.append(static_cast(iChannel)); buffer.append(static_cast(datamode)); return createFrame(buffer); } QByteArray CODECXyckAnalog::reqSetGain(int iChannel, GainMode gainmode) { QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_SET_GAIN)); buffer.append(static_cast(iChannel)); buffer.append(static_cast(gainmode)); return createFrame(buffer); } QByteArray CODECXyckAnalog::reqSetCollect(int iChannel, ChannelState channelstate) { QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_SET_COLLECT)); buffer.append(static_cast(iChannel)); buffer.append(static_cast(channelstate)); return createFrame(buffer); } QByteArray CODECXyckAnalog::reqSetStimulate(int iChannel, ChannelState channelstate) { QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_SET_STIMULATE)); buffer.append(static_cast(iChannel)); buffer.append(static_cast(channelstate)); return createFrame(buffer); } QByteArray CODECXyckAnalog::reqGetState() { QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_STATE)); buffer.append(static_cast(0)); buffer.append(static_cast(0)); return createFrame(buffer); } void CODECXyckAnalog::dealFrame(QByteArray buffer) { switch (static_cast(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(buffer.data()[3]) ,ErrorCode(static_cast(buffer.data()[4])) ,static_cast(buffer.data()[5])); break; default: break; } } void CODECXyckAnalog::clearList() { _dataList->clear(); } QList *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 *resultList=new QList(); for(int i=0;iappend(_dataList->takeFirst()); i++; if(resultList->count()==iStep) { break; } for(int j=0;jtakeFirst(); i++; } } return resultList; } QByteArray CODECXyckAnalog::respAnalogState(AnalogState *as) { QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_STATE)); buffer.append(static_cast(0x00)); buffer.append(static_cast(as->electrodeStateA)); buffer.append(static_cast(as->electrodeStateB)); buffer.append(static_cast(as->electrodeStateC)); buffer.append(static_cast(as->electrodeStateD)); buffer.append(static_cast(as->resetState)); buffer.append(static_cast(as->channelWorkStateA)); buffer.append(static_cast(as->channelWorkStateB)); buffer.append(static_cast(as->channelWorkStateC)); buffer.append(static_cast(as->channelWorkStateD)); buffer.append(static_cast(as->AValueA)); buffer.append(static_cast(as->AValueB)); buffer.append(static_cast(as->AValueC)); buffer.append(static_cast(as->AValueD)); return createFrame(buffer); } QByteArray CODECXyckAnalog::respMyoelectricData(MyoelectricData *md) { QByteArray buffer; buffer.append(static_cast(FUNCCODE_ANALOG_DATA_UPLOAD)); buffer.append(static_cast(0x00)); buffer.append(static_cast(md->ch1>>8)); buffer.append(static_cast(md->ch1%0x100)); buffer.append(static_cast(md->ch2>>8)); buffer.append(static_cast(md->ch2%0x100)); buffer.append(static_cast(md->ch3>>8)); buffer.append(static_cast(md->ch3%0x100)); buffer.append(static_cast(md->ch4>>8)); buffer.append(static_cast(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(buffer.data()[4])); analogSetting->samplerate=SampleRate((static_cast(buffer.data()[5])<<8)+static_cast(buffer.data()[6])); analogSetting->frequency = ((static_cast(buffer.data()[7])<<8)+static_cast(buffer.data()[8]))/2.0; analogSetting->pulseWidth =(static_cast(buffer.data()[9])<<8)+static_cast(buffer.data()[10]); analogSetting->risingTime= ((static_cast(buffer.data()[11])<<8)+static_cast(buffer.data()[12]))/2.0; analogSetting->holdingTime =(static_cast(buffer.data()[13])<<8)+static_cast(buffer.data()[14]); analogSetting->fallingTime=((static_cast(buffer.data()[15])<<8)+static_cast(buffer.data()[16]))/2.0; analogSetting->breakTime =(static_cast(buffer.data()[17])<<8)+static_cast(buffer.data()[18]); emit analogSettingRev(iChannel,analogSetting); } void CODECXyckAnalog::respChannalControl(QByteArray buffer) { ChannelState ch1=ChannelState(static_cast(buffer.data()[3])); ChannelState ch2=ChannelState(static_cast(buffer.data()[4])); ChannelState ch3=ChannelState(static_cast(buffer.data()[5])); ChannelState ch4=ChannelState(static_cast(buffer.data()[6])); emit channalControlRev(ch1,ch2,ch3,ch4); } void CODECXyckAnalog::respSetCurrent(QByteArray buffer) { int iChannel=buffer.data()[3]; int iCurrent=static_cast(buffer.data()[4]); emit currentRev(iChannel,iCurrent); } void CODECXyckAnalog::respDataUpload(QByteArray buffer) { ignoreCount++; MyoelectricData md; md.ch1=(static_cast(buffer.data()[4])<<8)+static_cast(buffer.data()[5]); md.ch2=(static_cast(buffer.data()[6])<<8)+static_cast(buffer.data()[7]); md.ch3=(static_cast(buffer.data()[8])<<8)+static_cast(buffer.data()[9]); md.ch4=(static_cast(buffer.data()[10])<<8)+static_cast(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()<append(md); //qDebug()<(buffer.data()[3]); DataMode dm=DataMode(static_cast(buffer.data()[4])); ignoreCount=0; emit dataChangeRev(iChannel,dm); } void CODECXyckAnalog::respSetGain(QByteArray buffer) { int iChannel=static_cast(buffer.data()[3]); GainMode gm=GainMode(static_cast(buffer.data()[4])); emit gainRev(iChannel,gm); } void CODECXyckAnalog::respSetCollect(QByteArray buffer) { int iChannel=static_cast(buffer.data()[3]); ChannelState cs=ChannelState(static_cast(buffer.data()[4])); emit collectRev(iChannel,cs); } void CODECXyckAnalog::respSetStimulate(QByteArray buffer) { int iChannel=static_cast(buffer.data()[3]); ChannelState cs=ChannelState(static_cast(buffer.data()[4])); emit stimulateRev(iChannel,cs); } void CODECXyckAnalog::respGetState(QByteArray buffer) { AnalogState *analogstate = new AnalogState(); analogstate->electrodeStateA=ModeState(static_cast(buffer.data()[4])); analogstate->electrodeStateB=ModeState(static_cast(buffer.data()[5])); analogstate->electrodeStateC=ModeState(static_cast(buffer.data()[6])); analogstate->electrodeStateD=ModeState(static_cast(buffer.data()[7])); analogstate->resetState=ModeState(static_cast(buffer.data()[8])); analogstate->channelWorkStateA=ChannelWorkState(static_cast(buffer.data()[9])); analogstate->channelWorkStateB=ChannelWorkState(static_cast(buffer.data()[10])); analogstate->channelWorkStateC=ChannelWorkState(static_cast(buffer.data()[11])); analogstate->channelWorkStateD=ChannelWorkState(static_cast(buffer.data()[12])); analogstate->AValueA=static_cast(buffer.data()[13]); analogstate->AValueB=static_cast(buffer.data()[14]); analogstate->AValueC=static_cast(buffer.data()[15]); analogstate->AValueD=static_cast(buffer.data()[16]); emit stateInfoRev(analogstate); } QByteArray CODECXyckAnalog::createFrame(QByteArray dataBuffer) { QByteArray buffer; buffer.append(static_cast(FRAME_HEAD)); buffer.append(static_cast(dataBuffer.length())); for(int i=0;i