#include "Aibus.h" Aibus::Aibus(int32_t id, uint8_t addr, uint8_t paramCode, int16_t writeValue,bool isRead) :m_addr(addr) ,m_readFlag(0x52) ,m_writeFlag(0x43) ,m_paramCode(paramCode) ,m_writeValue(writeValue) ,m_isNeedRead(isRead) { m_id=id; } Aibus::~Aibus(void) { } int Aibus::GetRequestSequence(uint8_t* bseq) { bseq[0]=m_addr+0x80; bseq[1]=m_addr+0x80; if(m_isNeedRead){ bseq[2]=m_readFlag; bseq[3]=m_paramCode; bseq[4]=0; bseq[5]=0; uint16_t sum=m_paramCode*256+m_readFlag+m_addr; bseq[6]=(uint8_t)sum; bseq[7]=sum>>8; }else{ bseq[2]=m_writeFlag; bseq[3]=m_paramCode; bseq[4]=(uint8_t)m_writeValue; bseq[5]=m_writeValue>>8; uint16_t sum=m_paramCode*256+m_writeFlag+m_writeValue+m_addr; bseq[6]=(uint8_t)sum; bseq[7]=sum>>8; } return 8; } bool Aibus::Verify(uint8_t* rseq,int32_t datalength) { if(datalength !=RESPONSE_LENGTH)return false; int16_t pv=(int16_t)(rseq[1]<<8)+rseq[0]; int16_t sv=(int16_t)(rseq[3]<<8)+rseq[2]; uint8_t mv=rseq[4]; uint8_t statue=rseq[5]; int16_t cv=(int16_t)(rseq[7]<<8)+rseq[6]; uint16_t sum=pv+sv+mv+statue*256+cv+m_addr; uint8_t lo=(uint8_t)sum; uint8_t hi=sum>>8; if(rseq[8]==lo && rseq[9]==hi)return true; else return false; }