#include #include #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*/