1. 统合日志, 修改fpga打印

This commit is contained in:
coffee 2025-07-28 16:13:18 +08:00
parent 32ca8cf7b4
commit 958af7f4cb
2 changed files with 114 additions and 100 deletions

View File

@ -56,7 +56,7 @@
#if USE_HD_LOG_DATA #if USE_HD_LOG_DATA
#define LogData(data, len) HDLogData((const uint8_t *)data, len, 1) #define LogData(data, len) HDLogData((const uint8_t *)data, len, 1)
#define LogFpgaData(data, len, isWrite) do { if (HDLogPrintFpgaHeader((const uint8_t *)data, len, isWrite, 1)) { HDLogHex((const uint8_t *)(data) + 17, (len) - 21, 1, NULL); } } while (0) #define LogFpgaData(data, len, isWrite) HDLogPrintFpga((const uint8_t *)data, len, isWrite, 1)
#define LogHexData(data, len) HDLogHex((const uint8_t *)data, len, 1, NULL) #define LogHexData(data, len) HDLogHex((const uint8_t *)data, len, 1, NULL)
#else #else
#define LogData(data, len) #define LogData(data, len)
@ -88,14 +88,15 @@ void HDLogInit(uint32_t (*getTime)());
void HDLogOut(uint8_t ext, uint8_t level, const char *fileName, const char *funcName, int line, const char *format, ...); void HDLogOut(uint8_t ext, uint8_t level, const char *fileName, const char *funcName, int line, const char *format, ...);
/** /**
* @brief FPGA * @brief FPGA
* @param data FPGA数据 * @param data FPGA数据
* @param len * @param len
* @param isWrite * @param isWrite
* @param checkFpga FPGA数据 * @param checkFpga FPGA数据
* @return fpga数据或者需要打印返回1 0 * @return fpga数据或者需要打印返回1 0
*/ */
uint8_t HDLogPrintFpgaHeader(const uint8_t *data, int len, uint8_t isWrite, uint8_t checkFpga); uint8_t HDLogPrintFpga(const uint8_t *data, int len, uint8_t isWrite, uint8_t checkFpga);
uint8_t HDLogCheckFpgaHeader(const uint8_t *data, int len);
/** /**
* @brief * @brief

View File

@ -46,6 +46,7 @@ static HShellMatch sLogMatch[] = {
HSHELL_MATCH_ITEM(kLogLevelError, "logError"), HSHELL_MATCH_ITEM(kLogLevelError, "logError"),
HSHELL_MATCH_ITEM(kLogLevelHex, "logHex"), HSHELL_MATCH_ITEM(kLogLevelHex, "logHex"),
HSHELL_MATCH_ITEM(kLogLevelStack, "logStack"), HSHELL_MATCH_ITEM(kLogLevelStack, "logStack"),
HSHELL_MATCH_ITEM(kLogLevelHeap, "logHeap"),
#if USE_HD_FPGA_CHECK #if USE_HD_FPGA_CHECK
HSHELL_MATCH_ITEM(CHECK_FPGA_INFO_ID, "checkFpga"), HSHELL_MATCH_ITEM(CHECK_FPGA_INFO_ID, "checkFpga"),
HSHELL_MATCH_ITEM(CHECK_FPGA_INFO_ID + 1, "clearCheckFpga"), HSHELL_MATCH_ITEM(CHECK_FPGA_INFO_ID + 1, "clearCheckFpga"),
@ -99,6 +100,73 @@ static uint32_t *GetFpgaType(uint8_t type, uint8_t isWrite)
} }
#endif #endif
static void LogHex(const uint8_t *data, int len, uint8_t checkPrint, uint32_t *offset, uint8_t lock)
{
if (checkPrint && HBitGet(sLogItem, kLogLevelHex) == 0)
{
return;
}
if (len <= 0)
{
return;
}
if (lock)
{
LOG_LOCK();
}
#define PRINT_HEX(...) printf(__VA_ARGS__);
if (offset == NULL || *offset == 0)
{
PRINT_HEX(" ");
// 16进制打印, 打印15个换行, 开头打印0A-0F 开头样式, 数据列每行00-FF
for (int i = 0; i < 16; ++i)
{
PRINT_HEX("0%X ", i);
}
PRINT_HEX("\r\n");
for (int i = 0; i < 17; ++i)
{
PRINT_HEX("---");
;
}
PRINT_HEX("\r\n");
}
int index = offset ? *offset : 0;
for (int i = 0; i < len; ++i, ++index)
{
if (index % 16 == 0)
{
PRINT_HEX("%X%X| ", index / 256, index / 16 % 16);
}
PRINT_HEX("%02X ", data[i]);
if (index % 16 == 15)
{
PRINT_HEX("\r\n");
}
}
if (offset)
{
*offset = index;
}
else
{
PRINT_HEX("\r\n");
}
#undef PRINT_HEX
if (lock)
{
LOG_UNLOCK();
}
}
static void LogShell(HSHELL_FUNC_ARGS) static void LogShell(HSHELL_FUNC_ARGS)
{ {
@ -258,7 +326,36 @@ static void HDLogFpgaError(const uint8_t *data, int len, uint8_t isWrite, uint8_
return ; return ;
} }
uint8_t HDLogPrintFpgaHeader(const uint8_t *data, int len, uint8_t isWrite, uint8_t checkFpga) uint8_t HDLogCheckFpgaHeader(const uint8_t *data, int len)
{
if (len <= 21)
{
return 0;
}
for (uint8_t i = 0; i < 7; ++i)
{
if (0x55 != data[i])
{
return 0;
}
}
const uint16_t effectLen = (uint16_t)((data[15] << 8) | data[16]);
if (effectLen < 16)
{
return 0;
}
if (len < 21 + effectLen)
{
return 0;
}
return 1;
}
uint8_t HDLogPrintFpga(const uint8_t *data, int len, uint8_t isWrite, uint8_t checkFpga)
{ {
const HBitType isPrint = HBitGet(sLogItem, kLogLevelHex); const HBitType isPrint = HBitGet(sLogItem, kLogLevelHex);
@ -270,50 +367,20 @@ uint8_t HDLogPrintFpgaHeader(const uint8_t *data, int len, uint8_t isWrite, uint
printf("[%d:%02d:%02d.%03d]\r\n", ms / 1000 / 60 / 60, ms / 1000 / 60 % 60, ms / 1000 % 60, ms % 1000); printf("[%d:%02d:%02d.%03d]\r\n", ms / 1000 / 60 / 60, ms / 1000 / 60 % 60, ms / 1000 % 60, ms % 1000);
} }
if (len <= 21) if (HDLogCheckFpgaHeader(data, len) == 0)
{ {
HDLogFpgaError(data, len, isWrite, checkFpga); HDLogFpgaError(data, len, isWrite, checkFpga);
LOG_UNLOCK(); LOG_UNLOCK();
return 0; return 0;
} }
for (uint8_t i = 0; i < 7; ++i) const uint8_t type = data[8];
{ const uint8_t sendCard = (data[9] >> 3) & 0x1F;
if (0x55 != data[i]) const uint8_t port = data[9];
{ const uint8_t recvCardNumber = data[10];
HDLogFpgaError(data, len, isWrite, checkFpga); const uint16_t subFunc = (uint16_t)((data[11] << 8) | data[12]);
LOG_UNLOCK(); const uint16_t group = (uint16_t)((data[13] << 8) | data[14]);
return 0; const uint16_t effectLen = (uint16_t)((data[15] << 8) | data[16]);
}
}
if (0xd5 != data[7])
{
HDLogFpgaError(data, len, isWrite, checkFpga);
LOG_UNLOCK();
return 0;
}
uint8_t type = data[8];
uint8_t sendCard = (data[9] >> 3) & 0x1F;
uint8_t port = data[9];
uint8_t recvCardNumber = data[10];
uint16_t subFunc = (uint16_t)((data[11] << 8) | data[12]);
uint16_t group = (uint16_t)((data[13] << 8) | data[14]);
uint16_t effectLen = (uint16_t)((data[15] << 8) | data[16]);
if (effectLen < 16)
{
HDLogFpgaError(data, len, isWrite, checkFpga);
LOG_UNLOCK();
return 0;
}
if (len < 21 + effectLen)
{
HDLogFpgaError(data, len, isWrite, checkFpga);
LOG_UNLOCK();
return 0;
}
uint32_t count = 0; uint32_t count = 0;
uint32_t typeCount = 0; uint32_t typeCount = 0;
@ -341,69 +408,15 @@ uint8_t HDLogPrintFpgaHeader(const uint8_t *data, int len, uint8_t isWrite, uint
const char *opt = isWrite ? "write" : "read"; const char *opt = isWrite ? "write" : "read";
printf("%s[%u], typeCount[%u] - type[%02X], sendCard[%d], netPort[%d], cardNumber[%d], subFunc[%04X], group[%04X], effectLen[%d]\r\n", opt, count, typeCount, type, sendCard, port, recvCardNumber, subFunc, group, effectLen); printf("%s[%u], typeCount[%u] - type[%02X], sendCard[%d], netPort[%d], cardNumber[%d], subFunc[%04X], group[%04X], effectLen[%d]\r\n", opt, count, typeCount, type, sendCard, port, recvCardNumber, subFunc, group, effectLen);
LogHex((const uint8_t *)(data) + 17, (len) - 21, 1, NULL, 0);
LOG_UNLOCK(); LOG_UNLOCK();
return 1; return 1;
} }
void HDLogHex(const uint8_t *data, int len, uint8_t checkPrint, uint32_t *offset) void HDLogHex(const uint8_t *data, int len, uint8_t checkPrint, uint32_t *offset)
{ {
if (checkPrint && HBitGet(sLogItem, kLogLevelHex) == 0) LogHex(data, len, checkPrint, offset, 1);
{
return;
}
if (len <= 0)
{
return;
}
LOG_LOCK();
#define PRINT_HEX(...) printf(__VA_ARGS__);
if (offset == NULL || *offset == 0)
{
PRINT_HEX(" ");
// 16进制打印, 打印15个换行, 开头打印0A-0F 开头样式, 数据列每行00-FF
for (int i = 0; i < 16; ++i)
{
PRINT_HEX("0%X ", i);
}
PRINT_HEX("\r\n");
for (int i = 0; i < 17; ++i)
{
PRINT_HEX("---");
;
}
PRINT_HEX("\r\n");
}
int index = offset ? *offset : 0;
for (int i = 0; i < len; ++i, ++index)
{
if (index % 16 == 0)
{
PRINT_HEX("%X%X| ", index / 256, index / 16 % 16);
}
PRINT_HEX("%02X ", data[i]);
if (index % 16 == 15)
{
PRINT_HEX("\r\n");
}
}
if (offset)
{
*offset = index;
}
else
{
PRINT_HEX("\r\n");
}
#undef PRINT_HEX
LOG_UNLOCK();
} }
void HDLogData(const uint8_t *data, int len, uint8_t checkPrint) void HDLogData(const uint8_t *data, int len, uint8_t checkPrint)