流程:
第一步把开门日志整理到结构体logData 它是一个大容器 万能对接的!
memset(&logData , 0x00 , sizeof(openlogDataType));
logData.type = OPENLOG_FORM_CARD;
logData.length = openResult;
memcpy(logData.data , (uint8_t *)tag , sizeof(tagBufferType));
journal.save_log(&logData);
也就是在各种开门中只需要调用journal.save_log(&logData);即可!
第二步:保存函数回到log模块做了消息队列
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 );
}它的技术是在装了一层壳子 队列在任务循环中被处理
第三部:log任务处理
if(xQueueReceive( xLogQueue, &pst, 1000 ) == pdTRUE)
{
switch(pst.cmd)
{
case LOG_ADD:
log(DEBUG,"接到增加LOG命令, get sn =%d ,device sn = %d\n" , pst.sn , journalSn);
journal_add_log(&pst);
}
它会去执行函数 journal_add_log 依次退去壳子
最后直接 journal_send_queue(LOG_SEND , 0 );回到任务
有网诺就发出去 没网诺就不发
其实他做了一个定时器 一直在给任务发消息 你去发日志给平台吧!
+++++++++++++补充 随处可见的金蚕脱壳++++++++++++++++
typedef struct
{
tagTypeEnum type;
uint8_t cardType;
tagPowerEnum tagPower;
uint8_t allDataCrc;
uint8_t UID[16];
uint8_t UIDLength;
uint8_t buffer[128];
uint8_t sak;
uint8_t readFinshFlag;
}tagBufferType;
结构体tagBufferType主要是代码内部处理,真正有用的信息是uint8_t buffer[128];它对应多个的结构体来对倒。
第一个特斯联用户卡:
typedef struct _tagUserDataType{
//0区 1块 密码KeyA 111111111111
communityType community; // 主住户信息 8字节
uint8_t house0[2]; //房间号
uint8_t name[6]; //业主姓名
//0区 2块
uint8_t setting; // 设置 1字节
uint8_t start[3]; // 发卡时间 3字节
uint8_t stop[3]; // 截止时间 3字节
uint8_t crc0; // 校验 1字节
uint8_t cardID[4]; //卡号 4字节
uint8_t version; //版本 1
uint8_t cardType; //卡类 1
uint8_t crc16_0[2]; //CRC 2
//1区 0块
uint8_t id[9]; //身份证 9(当最后一位为x 时 用A代替)
//2区 0块1块
communityType communitys[4];// 主住户信息 4*8字节
//2区 2块
uint8_t house1[2]; //房间号1
uint8_t house2[2]; //房间号2
uint8_t house3[2]; //房间号3
uint8_t house4[2]; //房间号4
uint8_t crc1; // 校验 1字节
uint8_t fdgs1[4]; //分断 1*4
uint16_t userFloor;
uint8_t crc16_1[2]; //CRC 16
}tagUserDataType; //用户卡 共89字节
对倒:比如临时变量
tagUserDataType tagUser;
memcpy((uint8_t*)&tagUser,tag→buffer,sizeof(tagUserDataType));
如此很快的完成数组→结构体赋值。