#ifndef __RECORDS_H_ #define __RECORDS_H_ #define VALID_FILE_MARD "Sz5028Td" //有效文件标识,放在文件开头 #define RECORD_START_INDEX strlen(VALID_FILE_MARD) #define MAX_NUM_DEV_RECORD 1000 //最多同时存储设备消息记录个数 #define MAX_NUM_GNSS_RECORD 1000 //最多同时存储GNSS消息记录个数 #define MAX_NUM_NEAR_RECORD 200 //最多同时存储附近消息记录个数 #define MARD_EMPTY "5a" //无记录,长度必须与MARK_TAIL一致 #define MARK_TAIL "6c" //有记录尾标识 #define MARDS_SIZE 2 //标识大小,需要与markTail大小一致 #define EXT_SIZE_ACC 1 //因为#if条件里面不能使用sizeof来实现,因此这个值用于至少给dummy赋有一个元素,就不用#if了 本值没有太大意义 #define REC_DEV_REAL_SIZE (MARDS_SIZE+sizeof(DEVICEINFO_DEF)-EXT_SIZE_ACC) //设备消息记录实际大小 #define REC_DEV_DUMMY_SIZE (8-(REC_DEV_REAL_SIZE%8)-2) //为凑足8的倍数 -2 markTail 大小 #define REC_GNSS_REAL_SIZE (MARDS_SIZE+sizeof(GNSSINFO_DEF)-EXT_SIZE_ACC) //GNSS消息记录实际大小 #define REC_GNSS_DUMMY_SIZE (8-(REC_GNSS_REAL_SIZE%8)-2) //为凑足8的倍数 -2 markTail 大小 #define REC_NEAR_REAL_SIZE (MARDS_SIZE+sizeof(NEARINFO_DEF)-EXT_SIZE_ACC) //NEAR消息记录实际大小 #define REC_NEAR_DUMMY_SIZE (8-(REC_NEAR_REAL_SIZE%8)-2) //为凑足8的倍数 -2 markTail 大小 //设备,GNSS,NEAR共占用 32*MAX_NUM_DEV_RECORD + 32*MAX_NUM_GNSS_RECORD + 152*MAX_NUM_NEAR_RECORD typedef struct{//保存设备信息单元 DEVICEINFO_DEF record; unsigned char dummy[EXT_SIZE_ACC+REC_DEV_DUMMY_SIZE]; unsigned char markTail[MARDS_SIZE]; }__attribute__((packed)) DEV_SAVE_DEF;//32 typedef struct{//保存GNSS信息单元 GNSSINFO_DEF record; unsigned char dummy[EXT_SIZE_ACC+REC_GNSS_DUMMY_SIZE]; unsigned char markTail[MARDS_SIZE]; }__attribute__((packed)) GNSS_SAVE_DEF;//32 typedef struct{//保存附近设备信息单元 NEARINFO_DEF record; unsigned char dummy[EXT_SIZE_ACC+REC_NEAR_DUMMY_SIZE]; unsigned char markTail[MARDS_SIZE]; }__attribute__((packed)) NEAR_SAVE_DEF;//152 extern DEV_SAVE_DEF sut_saveRecDev; extern GNSS_SAVE_DEF sut_saveRecGnss; extern NEAR_SAVE_DEF sut_saveRecNear; void recordsInit(void); char recordSave(unsigned char rectype, void *smsinfo); char recordRead(unsigned char rectype, void *smsinfo); void updateRecordTail(unsigned char rectype); #endif