181 lines
5.6 KiB
C++
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;
|
|
}
|
|
|
|
|