MAX_CARLINK_A270S/MXC_A27-PCB4.5-270T/ArkmicroFiles/libcpu-amt630hv100/source/sfud_data.c

197 lines
7.2 KiB
C
Raw Permalink Normal View History

2025-01-21 16:49:37 +08:00
#include <stdio.h>
#include <string.h>
#include "FreeRTOS.h"
#include "board.h"
#include "sfud.h"
#include "sysinfo.h"
#include "sfud_data.h"
#include "pwm.h"
#ifndef WITH_MVVM
SfudData_t sfud_data_saved ={0};
#define SFUD_DATA_FLASH_OFFSET 0x1fff000 //32Mflash
SfudMileData_t sfud_mile_data ={0};
static uint32_t save_addr = 0;
static uint16_t User_data_index = 0;
#define SFUD_MILE_DATA_FLASH_OFFSET 0xffe000//0xffe000
#define MILE_FLASH_OFFSET 0x1000
/*
void read_mileage(uint32_t trip_data,uint32_t total_data)
{
uint32_t i;
sfud_flash *sflash = sfud_get_device(0);
save_addr = SFUD_MILE_DATA_FLASH_OFFSET;
sfud_read(sflash, save_addr, sizeof(SfudMileData_t), (void*)&sfud_mile_data);
//生产时初始化为0
if(sfud_mile_data.TOTAL_mileage == 0XFFFFFFFF)
{
sfud_mile_data.TOTAL_mileage = 0;
sfud_mile_data.TRIP_mileage = 0;
User_data_index = 0;
sfud_write(sflash,save_addr,sizeof(SfudMileData_t),(void*)&sfud_mile_data);
printf("Init mileage\r\n");
}
else
{
for(i=0;i<256;i++) //数据区长度4k
{
sfud_read(sflash, save_addr, sizeof(SfudMileData_t), (void*)&sfud_mile_data);
if(sfud_mile_data.TOTAL_mileage == 0XFFFFFFFF)
{
break;
}
save_addr += 8;
}
save_addr -= 8;
sfud_read(sflash, save_addr, sizeof(SfudMileData_t), (void*)&sfud_mile_data);
if(sfud_mile_data.TRIP_mileage > sfud_mile_data.TOTAL_mileage)
sfud_mile_data.TRIP_mileage = sfud_mile_data.TOTAL_mileage;
Set_sys_trip_mileage(sfud_mile_data.TRIP_mileage);
Set_sys_total_mileage(sfud_mile_data.TOTAL_mileage);
User_data_index = i;
printf("Read mileage\r\n");
}
}
// void ReadMileageData(void){
// SfudMileData_t flash_data = {0};
// sfud_flash *sflash = sfud_get_device(0);
// if(sfud_read(sflash, SFUD_MILE_DATA_FLASH_OFFSET, sizeof(SfudMileData_t), (void*)&flash_data)==SFUD_SUCCESS){
// printf("sfud_read >>>>>>>>>>>>>>>>> OK .add = %08X , %08X , %08X .\r\n",SFUD_MILE_DATA_FLASH_OFFSET,flash_data.TOTAL_mileage,flash_data.TRIP_mileage);
// }
// }
void SaveMileageData(uint32_t trip_data,uint32_t total_data){
SfudMileData_t flash_data = {0};
sfud_flash *sflash = sfud_get_device(0);
uint8_t buff[sizeof(SfudMileData_t)];//定义buff用于保存结构体
memset(buff,0,sizeof(buff));//将buff内存清零
for(uint8_t i = 0;i<8;i++){
if(User_data_index < 255)
{
User_data_index++;
save_addr += 8;
}else{
User_data_index = 0;
save_addr = SFUD_MILE_DATA_FLASH_OFFSET;
sfud_erase(sflash, save_addr, MILE_FLASH_OFFSET);
printf("erase data\r\n");
}
((SfudMileData_t *)buff)->TRIP_mileage = trip_data;
((SfudMileData_t *)buff)->TOTAL_mileage = total_data;
printf("User_data_index = %d ,save_addr =%08X .\r\n",User_data_index,save_addr);
if (sfud_write(sflash,save_addr,sizeof(buff),buff)!=SFUD_SUCCESS){
printf("i = %d .save sfud mile error.\r\n",i);
}else{
break;
}
}
}
*/
void Classify_SaveDataToFlash(SfudData_t user_data,uint8_t type){
uint8_t buff[sizeof(SfudData_t)];//定义buff用于保存结构体
memset(buff,0,sizeof(buff));//将buff内存清零
switch(type){
case 0:
((SfudData_t *)buff)->language = user_data.language;
break;
case 1:
((SfudData_t *)buff)->theme = user_data.theme;
break;
case 2:
((SfudData_t *)buff)->theme_state = user_data.theme_state;
break;
case 3:
((SfudData_t *)buff)->light_value = user_data.light_value;
break;
case 4:
((SfudData_t *)buff)->bt_on_off = user_data.bt_on_off;
break;
case 5:
strcpy(((SfudData_t *)buff)->f_mac_address,user_data.f_mac_address);
break;
case 6:
strcpy(((SfudData_t *)buff)->r_mac_address,user_data.r_mac_address);
break;
default:
break;
}
sfud_flash *sflash = sfud_get_device(0);
if (sfud_erase_write(sflash,SFUD_DATA_FLASH_OFFSET,sizeof(buff),buff)!=SFUD_SUCCESS){
printf("sfud data write error.\r\n");
}
}
void SaveDataToFlash(SfudData_t user_data){
uint8_t buff[sizeof(SfudData_t)];//定义buff用于保存结构体
memset(buff,0,sizeof(buff));//将buff内存清零
// printf("**************save flash***********************\r\n");
// printf("user_data==> %d-%d-%d-%d-%d,%d",user_data.language,user_data.display_unit,user_data.theme
// ,user_data.theme_state,user_data.light_value,user_data.bt_on_off);
// printf("mac:%02X%02X%02X%02X%02X%02X , %02X%02X%02X%02X%02X%02X end\r\n",user_data.f_mac_address[0],user_data.f_mac_address[1],user_data.f_mac_address[2]
// ,user_data.f_mac_address[3],user_data.f_mac_address[4],user_data.f_mac_address[5]
// ,user_data.r_mac_address[0],user_data.r_mac_address[1],user_data.r_mac_address[2]
// ,user_data.r_mac_address[3],user_data.r_mac_address[4],user_data.r_mac_address[5]);
// printf("data:%02X %02X%02X , %02X %02X%02X end\r\n"
// ,user_data.f_mac_address[6],user_data.f_mac_address[7],user_data.f_mac_address[8]
// ,user_data.r_mac_address[6],user_data.r_mac_address[7],user_data.r_mac_address[8]);
// printf("*************************************\r\n");
// printf("mile data: %02X,%02X end\r\n"
// ,user_data.maintenance_mileage,user_data.mileage_flag);
// printf("*************************************\r\n");
if(user_data.light_value==0)
user_data.light_value=1;
else if(user_data.light_value>6)
user_data.light_value=5;
((SfudData_t *)buff)->factory_reset = 1;
((SfudData_t *)buff)->language = user_data.language;
((SfudData_t *)buff)->display_unit = user_data.display_unit;
((SfudData_t *)buff)->theme = user_data.theme;
((SfudData_t *)buff)->theme_state = user_data.theme_state;
((SfudData_t *)buff)->light_value = user_data.light_value;
((SfudData_t *)buff)->bt_on_off = user_data.bt_on_off;
//((SfudData_t *)buff)->trip_uint = user_data.trip_uint;
strcpy(((SfudData_t *)buff)->f_mac_address,user_data.f_mac_address);
strcpy(((SfudData_t *)buff)->r_mac_address,user_data.r_mac_address);
((SfudData_t *)buff)->maintenance_mileage = user_data.maintenance_mileage;
((SfudData_t *)buff)->mileage_flag = user_data.mileage_flag;
((SfudData_t *)buff)->display_mileage = user_data.display_mileage;
((SfudData_t *)buff)->tcs_on_off = user_data.tcs_on_off;
((SfudData_t *)buff)->mile_state = user_data.mile_state;
((SfudData_t *)buff)->uuid_state = user_data.uuid_state;
((SfudData_t *)buff)->tp_state = user_data.tp_state;
sfud_flash *sflash = sfud_get_device(0);
if (sfud_erase_write(sflash,SFUD_DATA_FLASH_OFFSET,sizeof(buff),buff)!=SFUD_SUCCESS){
printf("sfud data write error.\r\n");
}
}
void ReadDataToFlash(void){
sfud_flash *sflash = sfud_get_device(0);
sfud_read(sflash, SFUD_DATA_FLASH_OFFSET, sizeof(SfudData_t), (void*)&sfud_data_saved);
}
SfudData_t* userData_getSfudSaved(void)
{
/*printf("userData_getSfudSaved: %d-%d-%d-%d-%d-%d \r\n",sfud_data_saved.language,
sfud_data_saved.display_unit,sfud_data_saved.theme,sfud_data_saved.theme_state,
sfud_data_saved.light_value,sfud_data_saved.bt_on_off);*/
return &sfud_data_saved;
}
#endif /*WITH_MVVM*/