197 lines
7.2 KiB
C
197 lines
7.2 KiB
C
|
#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*/
|