1. 统合日志, 修改fpga打印
This commit is contained in:
parent
32ca8cf7b4
commit
958af7f4cb
@ -56,7 +56,7 @@
|
||||
|
||||
#if USE_HD_LOG_DATA
|
||||
#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)
|
||||
#else
|
||||
#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, ...);
|
||||
|
||||
/**
|
||||
* @brief 打印FPGA头
|
||||
* @param data FPGA头数据
|
||||
* @brief 打印FPGA
|
||||
* @param data FPGA数据
|
||||
* @param len 数据长度
|
||||
* @param isWrite 是否是写
|
||||
* @param checkFpga 是否更新检查FPGA数据
|
||||
* @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 十六进制格式打印数据
|
||||
|
||||
205
src/HDLog.c
205
src/HDLog.c
@ -46,6 +46,7 @@ static HShellMatch sLogMatch[] = {
|
||||
HSHELL_MATCH_ITEM(kLogLevelError, "logError"),
|
||||
HSHELL_MATCH_ITEM(kLogLevelHex, "logHex"),
|
||||
HSHELL_MATCH_ITEM(kLogLevelStack, "logStack"),
|
||||
HSHELL_MATCH_ITEM(kLogLevelHeap, "logHeap"),
|
||||
#if USE_HD_FPGA_CHECK
|
||||
HSHELL_MATCH_ITEM(CHECK_FPGA_INFO_ID, "checkFpga"),
|
||||
HSHELL_MATCH_ITEM(CHECK_FPGA_INFO_ID + 1, "clearCheckFpga"),
|
||||
@ -99,6 +100,73 @@ static uint32_t *GetFpgaType(uint8_t type, uint8_t isWrite)
|
||||
}
|
||||
#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)
|
||||
{
|
||||
@ -258,7 +326,36 @@ static void HDLogFpgaError(const uint8_t *data, int len, uint8_t isWrite, uint8_
|
||||
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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
if (len <= 21)
|
||||
if (HDLogCheckFpgaHeader(data, len) == 0)
|
||||
{
|
||||
HDLogFpgaError(data, len, isWrite, checkFpga);
|
||||
LOG_UNLOCK();
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < 7; ++i)
|
||||
{
|
||||
if (0x55 != data[i])
|
||||
{
|
||||
HDLogFpgaError(data, len, isWrite, checkFpga);
|
||||
LOG_UNLOCK();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
const uint8_t type = data[8];
|
||||
const uint8_t sendCard = (data[9] >> 3) & 0x1F;
|
||||
const uint8_t port = data[9];
|
||||
const uint8_t recvCardNumber = data[10];
|
||||
const uint16_t subFunc = (uint16_t)((data[11] << 8) | data[12]);
|
||||
const uint16_t group = (uint16_t)((data[13] << 8) | data[14]);
|
||||
const uint16_t effectLen = (uint16_t)((data[15] << 8) | data[16]);
|
||||
|
||||
uint32_t count = 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";
|
||||
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();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void HDLogHex(const uint8_t *data, int len, uint8_t checkPrint, uint32_t *offset)
|
||||
{
|
||||
if (checkPrint && HBitGet(sLogItem, kLogLevelHex) == 0)
|
||||
{
|
||||
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();
|
||||
LogHex(data, len, checkPrint, offset, 1);
|
||||
}
|
||||
|
||||
void HDLogData(const uint8_t *data, int len, uint8_t checkPrint)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user