|
|
@@ -1,3 +1,4 @@
|
|
|
+#include <string.h>
|
|
|
#include "nv_storage.h"
|
|
|
#include "bsp/AT24CXX.h"
|
|
|
#include "app/sox/soc.h"
|
|
|
@@ -11,6 +12,42 @@ static void nv_save_soc_by_backup(int index);
|
|
|
#define SOC_ADDR 0
|
|
|
static shark_timer_t _save_backup_timer = {.handler = backup_timer_hander};
|
|
|
#define SOC_SIZE (((sizeof(soc_t) + sizeof(uint16_t)) + 0xF)&(0xFFF0)) //ÐèÒª16×Ö½Ú¶ÔÆë
|
|
|
+
|
|
|
+#define SN_ADDR (SOC_ADDR + (SOC_SIZE * 2))
|
|
|
+
|
|
|
+
|
|
|
+int nv_save_sn(uint8_t *sn, int len){
|
|
|
+ sn_t sn_info;
|
|
|
+ if (len > sizeof(sn_info.sn)){
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ memcpy(sn_info.sn, sn, len);
|
|
|
+ sn_info.len = len;
|
|
|
+ sn_info.crc = shark_crc16_update(0, (const u8 *)sn_info.sn, len);
|
|
|
+
|
|
|
+ return AT24CXX_Write(SN_ADDR, (uint8_t *)&sn_info, sizeof(sn_info));
|
|
|
+}
|
|
|
+
|
|
|
+int nv_read_sn(uint8_t *sn, int len){
|
|
|
+ sn_t sn_info;
|
|
|
+ if (len < sizeof(sn_info.sn)){
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (AT24CXX_Read(SN_ADDR, (uint8_t *)&sn_info, sizeof(sn_info)) < 0) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ if (len > sizeof(sn_info.sn)){
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ uint16_t crc = shark_crc16_update(0, (const u8 *)sn_info.sn, sn_info.len);
|
|
|
+ if (crc != sn_info.crc){
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ memcpy(sn, sn_info.sn, sn_info.len);
|
|
|
+ return sn_info.len;
|
|
|
+}
|
|
|
+
|
|
|
void nv_save_soc(void){
|
|
|
nv_save_soc_by_backup(0);
|
|
|
shark_timer_post(&_save_backup_timer, 10);
|