2024-11-25 17:15:44 +08:00

181 lines
5.6 KiB
C++

#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;
}