#ifndef __APP_FLASH_H__ #define __APP_FLASH_H__ /************************************* *INCLUDES */ #include "hal_flash.h" #include "app_step.h" #include "app_err.h" #include "app_power.h" #include "nrf_gpio.h" #include "nrf_delay.h" #include "nrf_sdm.h" /************************************* *STRUCTIONS */ //__attribute__((packed,aligned(4))) : 先按实际字节占位算,最后才4字节对齐。 //size:20 typedef struct __attribute__((packed,aligned(4))) _FlashBackup{ uint32_t head; uint8_t macAddr_L[6]; uint8_t macAddr_R[6]; uint16_t hardVersion; uint16_t sotfVersion; uint8_t isConfig; /*此处加新的成员*/ uint32_t m_struct_size; //结构体自身大小 uint32_t tail_crc16; //crc16校准只能做成员 head ~ m_struct_size,因为未知的填充字节原因,tail_crc16和未知填充字节(默认为0)都为0好计算。 }FlashBackup_t; //size:36 typedef struct __attribute__((packed,aligned(4))) _FlashStep{ uint8_t startTime[8]; //记录时间 uint8_t newStartTime[8]; //当前时间 uint32_t stepCur[2]; //当前永久步数 uint32_t step[2]; //每小时记录的左右鞋永久步数0左1右 uint32_t num; //已经记录的每小时步数数量 }FlashStep_t; //size:12 typedef struct __attribute__((packed,aligned(4))) _FlashClient{ uint8_t isConfig; uint16_t hardVersion; uint16_t sotfVersion; uint8_t macAddr[6]; }FlashClient_t; //size: typedef struct __attribute__((packed,aligned(4))) _FlashLog{ uint8_t Errorflag; uint8_t logData[50]; }FlashLog; //size:64 typedef struct __attribute__((packed,aligned(4))) _Flash_Param{ //后期版本修改结构体,不能删除或修改现有成员,只能追加新的成员。 uint32_t head; uint8_t isHost; uint8_t macHost[6]; FlashStep_t mStep; FlashClient_t mClient; uint8_t mytest_add; FlashLog mFlashLog; struct __attribute__((packed,aligned(4))){ uint32_t except_data_back_mag : 1; uint32_t except_data_front_acc : 1; uint32_t except_data_front_gry : 1; uint32_t except_data_front_mag : 1; uint32_t except_data_charge : 1; uint32_t except_number_of_exist : 8; }exception; /*此处加新的成员*/ uint32_t m_struct_size; //结构体自身大小 uint32_t tail_crc16; //crc16校准只能做成员 head ~ m_struct_size,因为未知的填充字节原因,tail_crc16和未知填充字节(默认为0)都为0好计算。 }Flash_t; extern Flash_t mFlash; extern FlashBackup_t mBackup; /*1.当新API读到旧的数据的时候,新API多的参数用默认值填充,写回的时候按照新API的格式写回。(向后兼容) 2.当旧API读到新数据,自己不认识的那段buff,要保存起来,写回的时候,将这段buff原样memcpy。(向前兼容,没实现) */ /******************************************** *API FUCTIONS */ void Flash_Initialize(void); //存储步数 uint32_t Flash_SaveStep(void); //获取步数区域首地址 uint32_t Flash_GetStepZoneStartAddr(void); //获取步数区域数据 uint32_t Flash_GetStep(uint32_t destination_addr, uint32_t *pData, uint32_t dataLen); //删除所有步数 uint32_t Flash_DeleteAllStep(void); //存储基本信息 uint32_t Flash_SaveInfomation(void); //获取基本信息 uint32_t Flash_GetInfomation(Flash_t *pflash); //存储备份信息 uint32_t Flash_SaveBackup(void); //获取备份信息 uint32_t Flash_GetBackup(FlashBackup_t *pbackup); //保存日志信息 uint32_t Flash_SaveLog(uint32_t id, uint32_t pc, uint32_t info); //返回主机标志位 uint8_t Get_isHost(void); //测试接口 void TestHalFlashInterface(void); #endif