[读代码]openlogDataType其实是无处不在的TLV格式

为什么对外只需要一个journal.save_log(&logData)就可以?

第一步:
打包数据 再调用该函数
journal.save_log(&logData);

openlogDataType	logData;
typedef struct
{
    openLogTypeEnum type;-----------------OPENLOG_FORM_CARD
    uint32_t        length;---------------openResult
    uint8_t         data[256];------------(uint8_t *)tag 这里是万能的 不同开门方式不同 
}openlogDataType;


第一步:继续看如何保存:
void journal_save_log( openlogDataType *saveLog )
{
	journalTaskQueueType message;//队列

    memset(&message , 0x00 , sizeof(journalTaskQueueType));
	message.cmd = LOG_ADD;
	message.sn = 0;
    memcpy(&message.openlog , saveLog , sizeof(openlogDataType));
    
	xQueueSend( xLogQueue, ( void* )&message, NULL );   //通过队列 把整个saveLog发出去 套壳子!!!!
}

第三部:处理消息队列
case LOG_ADD:
	log(DEBUG,"接到增加LOG命令, get sn =%d ,device sn = %d\n" , pst.sn , journalSn);
	journal_add_log(&pst);

第四部:继续看如何加入:
void journal_add_log(journalTaskQueueType *pkt)
	case OPENLOG_FORM_CARD:
	{
		journal_add_into_card(&pkt->openlog);//卸载壳子!!!!前面memcpy(&message.openlog 现在回来了
	}break;
		 
	openLog.hdr.openTime = rtc.read_stamp();



						
		 

猜你喜欢

转载自blog.csdn.net/weixin_42381351/article/details/89947664
今日推荐