/*
************************************* Copyright ******************************
*
* (C) Copyright 2022,Wenkic,China, GCU.
* All Rights Reserved
*
* By(Wenkic)
* https://blog.csdn.net/Wekic
*
* FileName : SaveDat.c
* Version : v1.0
* Author : Wenkic
* Date : 2022-05-23
* Description :
* Function List:
******************************************************************************
*/
/********************************End of Head************************************/
#include "SaveDat.h"
#include "config.h"
typedef struct _SaveList
{
void* pAddr; //地址
u8 size ; //大小
u16 addr ; //偏移位置(开机后自动计算)
}SaveListType;
static u8 FirstData ;
SaveListType StartAddr[]={
{(void*) &FirstData ,sizeof(FirstData ),0},/* 0 */
{(void*) &language ,sizeof(language ),0},/* 1 */
{(void*) &LCD_V0 ,sizeof(LCD_V0 ),0},/* 2 */
{(void*) &CoinOutWay ,sizeof(CoinOutWay ),0},/* 3 */
{(void*) &AdvertiseVolume ,sizeof(AdvertiseVolume ),0},/* 4 */
{(void*) &SeverTelephone ,sizeof(SeverTelephone ),0},/* 5 */
{(void*) &PaperMachine ,sizeof(PaperMachine ),0},/* 6 */
{(void*) &CoinValue ,sizeof(CoinValue ),0},/* 7 */
{(void*) &SetMeal ,sizeof(SetMeal ),0},/* 8 */
{(void*) &AccountCards ,sizeof(AccountCards ),0},/* 9 */
{(void*) &AccountCloud ,sizeof(AccountCloud ),0},/* 10*/
{(void*) &AccountPager ,sizeof(AccountPager ),0},/* 11*/
{(void*) &AccountCoins ,sizeof(AccountCoins ),0},/* 12*/
{(void*) &AccountAllOut ,sizeof(AccountAllOut ),0},/* 13*/
{(void*) &AccountSurplus ,sizeof(AccountSurplus ),0},/* 14*/
{(void*) &CloudPay ,sizeof(CloudPay ),0},/* 15*/
{(void*) &AccountPassword ,sizeof(AccountPassword ),0},/* 16*/
{(void*) &SetMealPassword ,sizeof(SetMealPassword ),0},/* 17*/
{(void*) &NowCoins ,sizeof(NowCoins ),0},/* 18*/
{(void*) &InventoryWarningLine ,sizeof(InventoryWarningLine ),0},/* 19*/
{(void*) &InventorySurplusCoin ,sizeof(InventorySurplusCoin ),0},/* 20*/
{(void*) &InventoryIsNoCoinStopMachine ,sizeof(InventoryIsNoCoinStopMachine ),0},/* 21*/
{(void*) &InventoryIsDisplaySurplusCoin ,sizeof(InventoryIsDisplaySurplusCoin ),0},/* 22*/
{(void*) &NowIn_Coins ,sizeof(NowIn_Coins ),0},/* 23*/
{(void*) &NowOutCoins ,sizeof(NowOutCoins ),0},/* 24*/
{(void*) &TargetCoins ,sizeof(TargetCoins ),0},/* 25*/
{(void*) &InCoins ,sizeof(InCoins ),0},/* 26*/
{(void*) &OutCoins ,sizeof(OutCoins ),0},/* 27*/
{(void*) &FreeCoins ,sizeof(FreeCoins ),0},/* 28*/
//{(void*) &InventoryIsDisplaySurplusCoin ,sizeof(InventoryIsDisplaySurplusCoin),0},
};
void SaveDat_FileInit(void)
{
StartAddr[0].addr = 0; //地址初始位置
for (u8 i = 0; i < (sizeof(StartAddr)/sizeof(StartAddr[0])-1); i++)
{
StartAddr[i+1].addr = StartAddr[i].addr + StartAddr[i].size;
}
COM_Printf("Save Data Size: %d\r\n",StartAddr[Addr_Max-1].addr+StartAddr[Addr_Max-1].size);
SaveList_Read(AddrEnum(FirstData ));
if(FirstData !=FirstNumber)
{
COM_Printf("Save Data Init\r\n");
FirstData = FirstNumber;
for(u8 i= 0;i<Addr_Max;i++)
{
SaveList_Write(i);
}
}
for(u8 i= 0;i<Addr_Max;i++)
{
SaveList_Read(i);
}
}
//储存列表写
void SaveList_Write(u8 ID)
{
if(ID < (sizeof(StartAddr)/sizeof(StartAddr[0])))
{
FRAM_WriteString(MaxSaveBaseAddr+StartAddr[ID].addr,(u8*)StartAddr[ID].pAddr,StartAddr[ID].size);
}
}
//储存列表读
void SaveList_Read(u8 ID)
{
if(ID < (sizeof(StartAddr)/sizeof(StartAddr[0]))){
FRAM_ReadString(MaxSaveBaseAddr+StartAddr[ID].addr,(u8*)StartAddr[ID].pAddr,StartAddr[ID].size);
}
}
/**
************************************* Copyright ******************************
* (C) Copyright 2022,Wenkic,China, GCU.
* All Rights Reserved
*
* By(Wenkic)
* https://blog.csdn.net/Wekic
*
* FileName : SaveDat.h
* Version : v1.0
* Author : Wenkic
* Date : 2022-05-23
* Description :
* Function List:
******************************************************************************
*/
/********************************End of Head************************************/
#ifndef _SaveDat_H
#define _SaveDat_H
/* C++ detection */
#ifdef __cplusplus
extern "C" {
#endif
#include "main.h"
#define AddrEnum(name) Addr_##name
enum{
AddrEnum(FirstData )=0,/* 0 */
AddrEnum(language ),/* 1 */
AddrEnum(LCD_V0 ),/* 2 */
AddrEnum(CoinOutWay ),/* 3 */
AddrEnum(AdvertiseVolume ),/* 4 */
AddrEnum(SeverTelephone ),/* 5 */
AddrEnum(PaperMachine ),/* 6 */
AddrEnum(CoinValue ),/* 7 */
AddrEnum(SetMeal ),/* 8 */
AddrEnum(AccountCards ),/* 9 */
AddrEnum(AccountCloud ),/* 10*/
AddrEnum(AccountPager ),/* 11*/
AddrEnum(AccountCoins ),/* 12*/
AddrEnum(AccountAllOut ),/* 13*/
AddrEnum(AccountSurplus ),/* 14*/
AddrEnum(CloudPay ),/* 15*/
AddrEnum(AccountPassword ),/* 16*/
AddrEnum(SetMealPassword ),/* 17*/
AddrEnum(NowCoins ),/* 18*/
AddrEnum(InventoryWarningLine ),/* 19*/
AddrEnum(InventorySurplusCoin ),/* 20*/
AddrEnum(InventoryIsNoCoinStopMachine ),/* 21*/
AddrEnum(InventoryIsDisplaySurplusCoin ),/* 22*/
AddrEnum(NowIn_Coins ),/* 23*/
AddrEnum(NowOutCoins ),/* 24*/
AddrEnum(TargetCoins ),/* 25*/
AddrEnum(InCoins ),/* 26*/
AddrEnum(OutCoins ),/* 27*/
AddrEnum(FreeCoins),/* 28*/
AddrEnum(Max),
};
void SaveDat_FileInit(void); //保存数据初始化
void SaveList_Write(u8 ID); //储存列表写
void SaveList_Read(u8 ID); //储存列表读
/* C++ detection */
#ifdef __cplusplus
}
#endif
#endif
/********************************End of File************************************/