基线:UDP 收包长度校验 + SQLite 表描述符重构 + 清理设计文档
This commit is contained in:
@@ -342,12 +342,13 @@ bool LowerCommManager::listenThreadFunc()
|
||||
{
|
||||
try
|
||||
{
|
||||
memset(Buff, 0, sizeof(Buff));
|
||||
int nRead = m_udpComm->udpScoket->iRecieveMessage(Buff, sizeof(Buff));
|
||||
cout<<MOOS::ConsoleColours::yellow()<< "RECEVE DATA COUNT:" << nRead << MOOS::ConsoleColours::reset() << endl;
|
||||
if(nRead > 0)
|
||||
{
|
||||
try {
|
||||
if(m_udpComm->pushMsgToQueue(Buff))
|
||||
if(m_udpComm->pushMsgToQueue(Buff, nRead))
|
||||
{
|
||||
//更新当前状态
|
||||
if(!updatePoweSystemStates())
|
||||
|
||||
+352
-693
File diff suppressed because it is too large
Load Diff
@@ -66,12 +66,22 @@ private:
|
||||
bool createTableInternal(const std::string& tableName, const std::string& columns);
|
||||
bool createAllTablesUnlocked();
|
||||
|
||||
// 泛化插入:表名 + 列描述(名称 + 绑定器),所有类型共用这一条路径
|
||||
// 列描述:名称 + SQL 类型 + 绑定器(无捕获函数指针)
|
||||
struct Column {
|
||||
const char* name;
|
||||
const char* sqlType;
|
||||
void (*bind)(sqlite3_stmt*, int& idx, const void* obj);
|
||||
};
|
||||
bool insertGeneric(const std::string& table, const std::vector<Column>& cols, const void* obj);
|
||||
// 表描述:表名 + 数据列。建表(DDL)与插入(DML)共用这一份,作为唯一数据源。
|
||||
struct TableDesc {
|
||||
const char* name;
|
||||
std::vector<Column> columns;
|
||||
};
|
||||
|
||||
// 泛化插入:按表名在注册表中查找描述并绑定,所有类型共用这一条路径
|
||||
bool insertGeneric(const char* tableName, const void* obj);
|
||||
// 所有协议结构表的描述注册表(不含 msg_log 等特殊表)
|
||||
static const std::vector<TableDesc>& allTables();
|
||||
};
|
||||
|
||||
#endif // SQLITE_H
|
||||
|
||||
@@ -36,8 +36,11 @@ Checksum udpComm::calculateChecksum(const unsigned char* data, int dataSize, int
|
||||
}
|
||||
return checksum;
|
||||
}
|
||||
bool udpComm::getMsgId(char *m,unsigned short &id)
|
||||
bool udpComm::getMsgId(char *m, size_t len, unsigned short &id)
|
||||
{
|
||||
if (m == NULL || len < sizeof(m_header)) {
|
||||
return false;
|
||||
}
|
||||
m_header h;
|
||||
h = *reinterpret_cast<m_header *>(m);
|
||||
// 判断消息是否有效
|
||||
@@ -56,7 +59,11 @@ bool udpComm::getMsgId(char *m,unsigned short &id)
|
||||
// LOG_F(ERROR, "Msg Header errar start1: %d, start2: %d", h.start1, h.start2);
|
||||
return false;
|
||||
}
|
||||
bool udpComm::getMsgFromBuff(char *m, msg_CcuStateFbMsg &s) {
|
||||
bool udpComm::getMsgFromBuff(char *m, size_t len, msg_CcuStateFbMsg &s) {
|
||||
if (m == NULL || len < sizeof(msg_CcuStateFbMsg)) {
|
||||
sError.push_back("CcuStat Msg length error");
|
||||
return false;
|
||||
}
|
||||
Checksum sum;
|
||||
msg_CcuStateFbMsg *p;
|
||||
p = reinterpret_cast<msg_CcuStateFbMsg *>(m);
|
||||
@@ -69,8 +76,12 @@ bool udpComm::getMsgFromBuff(char *m, msg_CcuStateFbMsg &s) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool udpComm::getMsgFromBuff(char *m, msg_CcuSetParmFbMsg &s)
|
||||
bool udpComm::getMsgFromBuff(char *m, size_t len, msg_CcuSetParmFbMsg &s)
|
||||
{
|
||||
if (m == NULL || len < sizeof(msg_CcuSetParmFbMsg)) {
|
||||
sError.push_back("CcuSetParm Msg length error");
|
||||
return false;
|
||||
}
|
||||
Checksum sum;
|
||||
msg_CcuSetParmFbMsg *p;
|
||||
p = reinterpret_cast<msg_CcuSetParmFbMsg *>(m);
|
||||
@@ -85,8 +96,12 @@ bool udpComm::getMsgFromBuff(char *m, msg_CcuSetParmFbMsg &s)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool udpComm::getMsgFromBuff(char *m, msg_disHighVolBusFbMsg &s)
|
||||
bool udpComm::getMsgFromBuff(char *m, size_t len, msg_disHighVolBusFbMsg &s)
|
||||
{
|
||||
if (m == NULL || len < sizeof(msg_disHighVolBusFbMsg)) {
|
||||
sError.push_back("DisSys HVBus Msg length error");
|
||||
return false;
|
||||
}
|
||||
cChecksum sum;
|
||||
msg_disHighVolBusFbMsg *p;
|
||||
p = reinterpret_cast<msg_disHighVolBusFbMsg *>(m);
|
||||
@@ -101,8 +116,12 @@ bool udpComm::getMsgFromBuff(char *m, msg_disHighVolBusFbMsg &s)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool udpComm::getMsgFromBuff(char *m, msg_disHighAVolBusFbMsg &s)
|
||||
bool udpComm::getMsgFromBuff(char *m, size_t len, msg_disHighAVolBusFbMsg &s)
|
||||
{
|
||||
if (m == NULL || len < sizeof(msg_disHighAVolBusFbMsg)) {
|
||||
sError.push_back("DisSys HVABus Msg length error");
|
||||
return false;
|
||||
}
|
||||
cChecksum sum;
|
||||
msg_disHighAVolBusFbMsg *p;
|
||||
p = reinterpret_cast<msg_disHighAVolBusFbMsg *>(m);
|
||||
@@ -115,8 +134,12 @@ bool udpComm::getMsgFromBuff(char *m, msg_disHighAVolBusFbMsg &s)
|
||||
s = *p;
|
||||
return true;
|
||||
}
|
||||
bool udpComm::getMsgFromBuff(char *m, msg_disLowMainBusFbMsg &s)
|
||||
bool udpComm::getMsgFromBuff(char *m, size_t len, msg_disLowMainBusFbMsg &s)
|
||||
{
|
||||
if (m == NULL || len < sizeof(msg_disLowMainBusFbMsg)) {
|
||||
sError.push_back("DisSys HVBBus Msg length error");
|
||||
return false;
|
||||
}
|
||||
cChecksum sum;
|
||||
msg_disLowMainBusFbMsg *p;
|
||||
p = reinterpret_cast<msg_disLowMainBusFbMsg *>(m);
|
||||
@@ -130,8 +153,12 @@ bool udpComm::getMsgFromBuff(char *m, msg_disLowMainBusFbMsg &s)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool udpComm::getMsgFromBuff(char *m, msg_disLowBusFbMsg &s)
|
||||
bool udpComm::getMsgFromBuff(char *m, size_t len, msg_disLowBusFbMsg &s)
|
||||
{
|
||||
if (m == NULL || len < sizeof(msg_disLowBusFbMsg)) {
|
||||
sError.push_back("DisSys LVBus Msg length error");
|
||||
return false;
|
||||
}
|
||||
cChecksum sum;
|
||||
msg_disLowBusFbMsg *p;
|
||||
p = reinterpret_cast<msg_disLowBusFbMsg *>(m);
|
||||
@@ -145,35 +172,29 @@ bool udpComm::getMsgFromBuff(char *m, msg_disLowBusFbMsg &s)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool udpComm::pushMsgToQueue(unsigned char *m)
|
||||
bool udpComm::pushMsgToQueue(unsigned char *m, size_t len)
|
||||
{
|
||||
if(m==NULL)
|
||||
if(m==NULL || len < sizeof(m_header))
|
||||
{
|
||||
// sError.push_back("pushMsgToQueue faile,Msg is NULL");
|
||||
LOG_F(ERROR, "pushMsgToQueue faile,Msg is NULL m: %p", m);
|
||||
LOG_F(ERROR, "pushMsgToQueue faile,Msg is NULL or too short m: %p len: %zu", m, len);
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned char* Buff = m;
|
||||
//消息头鉴定
|
||||
char *header = new char[sizeof(m_header)];
|
||||
unsigned short id;
|
||||
memcpy(header,Buff,sizeof(m_header));
|
||||
if(!getMsgId(header,id))
|
||||
if(!getMsgId((char *)Buff, len, id))
|
||||
{
|
||||
// sError.push_back("pushMsgToQueue faile,Msg ID error");
|
||||
// LOG_F(INFO, "pushMsgToQueue faile,Msg ID error header: %p", header);
|
||||
delete []header;
|
||||
return false;
|
||||
}
|
||||
delete []header;
|
||||
//输入消息
|
||||
switch (id)
|
||||
{
|
||||
case CCU_STATE_FB_ID: //CCU_STATE_FB 0x0051
|
||||
{
|
||||
msg_CcuStateFbMsg s;
|
||||
if(getMsgFromBuff((char *)Buff,s))
|
||||
if(getMsgFromBuff((char *)Buff, len, s))
|
||||
{
|
||||
if (m_commLogger) m_commLogger->onFrame(0, id, "ccuState", Buff, sizeof(msg_CcuStateFbMsg), true);
|
||||
std::lock_guard<std::mutex> lock(m_mutexCcuState);
|
||||
@@ -198,7 +219,7 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
|
||||
case CCU_SET_PARM_FB_ID: //CCU_SET_PARM_FB 0x0040
|
||||
{
|
||||
msg_CcuSetParmFbMsg s;
|
||||
if(getMsgFromBuff((char *)Buff,s))
|
||||
if(getMsgFromBuff((char *)Buff, len, s))
|
||||
{
|
||||
if (m_commLogger) m_commLogger->onFrame(0, id, "ccuSetParmFb", Buff, sizeof(msg_CcuSetParmFbMsg), true);
|
||||
std::lock_guard<std::mutex> lock(m_mutexCcuSetParm);
|
||||
@@ -223,7 +244,7 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
|
||||
case DIS_HVBUS_FB_ID: //DIS_HVBUS_FB 0x0020
|
||||
{
|
||||
msg_disHighVolBusFbMsg s;
|
||||
if(getMsgFromBuff((char *)Buff,s))
|
||||
if(getMsgFromBuff((char *)Buff, len, s))
|
||||
{
|
||||
if (m_commLogger) m_commLogger->onFrame(0, id, "disHighVolBusState", Buff, sizeof(msg_disHighVolBusFbMsg), true);
|
||||
std::lock_guard<std::mutex> lock(m_mutexDisHighVolBus);
|
||||
@@ -248,7 +269,7 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
|
||||
case DIS_HVBUSA_FB_ID: //DIS_HVBUSA_FB 0x0006
|
||||
{
|
||||
msg_disHighAVolBusFbMsg s;
|
||||
if(getMsgFromBuff((char *)Buff,s))
|
||||
if(getMsgFromBuff((char *)Buff, len, s))
|
||||
{
|
||||
if (m_commLogger) m_commLogger->onFrame(0, id, "disHighAVolBusState", Buff, sizeof(msg_disHighAVolBusFbMsg), true);
|
||||
std::lock_guard<std::mutex> lock(m_mutexDisHighAVolBus);
|
||||
@@ -273,7 +294,7 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
|
||||
case DIS_HVBUSB_FB_ID: //DIS_HVBUSB_FB 0x0007
|
||||
{
|
||||
msg_disLowMainBusFbMsg s;
|
||||
if(getMsgFromBuff((char *)Buff,s))
|
||||
if(getMsgFromBuff((char *)Buff, len, s))
|
||||
{
|
||||
if (m_commLogger) m_commLogger->onFrame(0, id, "disLowMainBusState", Buff, sizeof(msg_disLowMainBusFbMsg), true);
|
||||
std::lock_guard<std::mutex> lock(m_mutexDisHighBVolBus);
|
||||
@@ -298,7 +319,7 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
|
||||
case DIS_LVBUS_FB_ID: //DIS_LVBUS_FB 0x0008
|
||||
{
|
||||
msg_disLowBusFbMsg s;
|
||||
if(getMsgFromBuff((char *)Buff,s))
|
||||
if(getMsgFromBuff((char *)Buff, len, s))
|
||||
{
|
||||
if (m_commLogger) m_commLogger->onFrame(0, id, "disLowBusState", Buff, sizeof(msg_disLowBusFbMsg), true);
|
||||
std::lock_guard<std::mutex> lock(m_mutexDisLowBus);
|
||||
|
||||
@@ -27,15 +27,15 @@ public:
|
||||
string ccuHost;
|
||||
long int ccuPort;
|
||||
|
||||
bool pushMsgToQueue(unsigned char *m);
|
||||
bool pushMsgToQueue(unsigned char *m, size_t len);
|
||||
bool clearMsgQueue();
|
||||
|
||||
bool getMsgFromBuff(char *m, msg_CcuStateFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, msg_CcuSetParmFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, msg_disHighVolBusFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, msg_disHighAVolBusFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, msg_disLowMainBusFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, msg_disLowBusFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, size_t len, msg_CcuStateFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, size_t len, msg_CcuSetParmFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, size_t len, msg_disHighVolBusFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, size_t len, msg_disHighAVolBusFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, size_t len, msg_disLowMainBusFbMsg &s);
|
||||
bool getMsgFromBuff(char *m, size_t len, msg_disLowBusFbMsg &s);
|
||||
|
||||
bool popMsgFormQueue(double &time,msg_CcuStateFbMsg &m);
|
||||
bool popMsgFormQueue(double &time,msg_CcuSetParmFbMsg &m);
|
||||
@@ -78,7 +78,7 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
bool getMsgId(char *m,unsigned short &id);
|
||||
bool getMsgId(char *m, size_t len, unsigned short &id);
|
||||
Checksum calculateChecksum(const unsigned char* data, int size);
|
||||
Checksum calculateChecksum(const unsigned char* data, int dataSize, int checkSize);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user