基线:UDP 收包长度校验 + SQLite 表描述符重构 + 清理设计文档

This commit is contained in:
zjk
2026-08-19 22:31:23 +08:00
parent e455e2e9da
commit 7819ea621f
8 changed files with 486 additions and 1139 deletions
+2 -1
View File
@@ -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())
File diff suppressed because it is too large Load Diff
+12 -2
View File
@@ -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
+44 -23
View File
@@ -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);
+8 -8
View File
@@ -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);