blob: fbecc71072629f0950713ae22778be8ba5d43408 [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include "pub_debug_info.h"
#define DEBUG_INFO_MAX_TOTAL_LEN (140)
#define DEBUG_INFO_MAX_DATA_LEN (128)
#define DEBUG_INFO_MEM_HEAD_LEN (8)
typedef unsigned int UINT32;
typedef unsigned short UINT16;
typedef unsigned char UINT8;
typedef struct
{
UINT16 module_id; // 模块id
UINT16 sub_len; // 用户数据长度
UINT32 time;
char sub_data[]; // 用户数据
} T_SHARED_MEM_DATA;
int sc_debug_info_record(unsigned int id, const char *format, ...)
{
int fd = -1;
ssize_t writelen;
int len;
va_list args;
char str_buf[DEBUG_INFO_MAX_TOTAL_LEN] __attribute__((aligned(4)));
T_SHARED_MEM_DATA *shareMemData;
shareMemData = (T_SHARED_MEM_DATA *)str_buf;
/* args是一个char*类型指针,指向format之后的第一个参数*/
va_start(args, format);
len = vsnprintf(shareMemData->sub_data, DEBUG_INFO_MAX_DATA_LEN, format, args);
va_end(args);
if (len < 0)
{
printf("[libdebug_info]: vsnprintf format error, %s.\n", strerror(errno));
return -1;
}
shareMemData->module_id = (UINT16)(id & 0xFFFF);
shareMemData->sub_len = len;
shareMemData->time = 0;
fd = open(DEBUG_INFO_DEV_PATH, O_WRONLY);
if (fd < 0)
{
printf("[libdebug_info]: sc_debug_info_record, open debug_info error, %s\n", strerror(errno));
return -1;
}
writelen = write(fd, (char *)shareMemData, (len + DEBUG_INFO_MEM_HEAD_LEN));
if (writelen < 0)
{
printf("[libdebug_info]: sc_debug_info_record, write debug_info error, %s\n", strerror(errno));
return -1;
}
if (fd >= 0)
{
close(fd);
}
return writelen;
}