static void BankHeaderOldWrite(uint8 bank)\r
{\r
/* Mark the bank as old */\r
- memset(RWBuffer.BankCtrl.Data, 0xff, BLOCK_DATA_PAGE_SIZE);\r
+ memset(RWBuffer.BankCtrl.Data, 0xff, BANK_CTRL_PAGE_SIZE);\r
RWBuffer.BankCtrl.BankStatus = BANK_STATUS_OLD;\r
if (Fls_Write(BankProp[bank].End - BANK_CTRL_PAGE_SIZE, RWBuffer.BankCtrl.Data, BANK_CTRL_PAGE_SIZE) == E_OK) {\r
SetFlsJobBusy();\r
CurrentJob.State = FEE_GARBAGE_COLLECT_DATA_READ_REQUESTED;\r
} else {\r
/* Yes, we are finished */\r
- VALIDATE_NO_RV(CurrentJob.AdminFlsBlockPtr->Status == BLOCK_STATUS_EMPTY, FEE_GARBAGE_WRITE_HEADER_ID, FEE_UNEXPECTED_STATUS);\r
+ VALIDATE_NO_RV(CurrentJob.AdminFlsBlockPtr->Status == BLOCK_STATUS_INVALIDATED, FEE_GARBAGE_WRITE_HEADER_ID, FEE_UNEXPECTED_STATUS);\r
CurrentJob.State = FEE_GARBAGE_COLLECT_MAGIC_WRITE_REQUESTED;\r
}\r
} else {\r
memset(RWBuffer.Byte, 0xff, BLOCK_CTRL_PAGE_SIZE);\r
RWBuffer.BlockCtrl.DataPage.Data.Status = BLOCK_STATUS_INVALIDATED;\r
RWBuffer.BlockCtrl.DataPage.Data.BlockNo = CurrentJob.BlockNumber;\r
- RWBuffer.BlockCtrl.DataPage.Data.BlockDataAddress = 0;\r
+ RWBuffer.BlockCtrl.DataPage.Data.BlockDataAddress = AdminFls.NewBlockDataAddress;\r
RWBuffer.BlockCtrl.DataPage.Data.BlockDataLength = 0;\r
memcpy(RWBuffer.BlockCtrl.MagicPage.Byte, MagicMaster, BLOCK_MAGIC_LEN);\r
\r
- if (Fls_Write(CurrentJob.Op.Invalidate.WriteAdminAddress + BLOCK_CTRL_DATA_POS_OFFSET, RWBuffer.Byte, BLOCK_DATA_PAGE_SIZE) == E_OK) {\r
+ if (Fls_Write(CurrentJob.Op.Invalidate.WriteAdminAddress + BLOCK_CTRL_DATA_POS_OFFSET, RWBuffer.Byte, BLOCK_CTRL_PAGE_SIZE) == E_OK) {\r
SetFlsJobBusy();\r
AdminFls.NewBlockDataAddress += CurrentJob.Length;\r
AdminFls.NewBlockAdminAddress -= BLOCK_CTRL_PAGE_SIZE;\r
CurrentJob.Op.Invalidate.WriteAdminAddress = AdminFls.NewBlockAdminAddress;\r
\r
CurrentJob.State = FEE_WRITE_INVALIDATE_HEADER_REQUESTED;\r
- BlockHeaderInvalidWrite();\r
} else {\r
AbortJob(Fls_GetJobResult());\r
}\r
if (Fls_GetStatus() == MEMIF_IDLE) {\r
CurrentJob.State = FEE_WRITE_INVALIDATE_HEADER;\r
BlockHeaderInvalidWrite();\r
- } else {\r
- AbortJob(Fls_GetJobResult());\r
}\r
}\r
\r
if (CheckFlsJobFinnished()) {\r
if (Fls_GetJobResult() == MEMIF_JOB_OK) {\r
// Update the block admin table\r
- CurrentJob.AdminFlsBlockPtr->Status = BLOCK_STATUS_INUSE;\r
+ CurrentJob.AdminFlsBlockPtr->Status = BLOCK_STATUS_INVALIDATED;\r
CurrentJob.AdminFlsBlockPtr->BlockAdminAddress = CurrentJob.Op.Invalidate.WriteAdminAddress;\r
CurrentJob.AdminFlsBlockPtr->BlockDataAddress = CurrentJob.Op.Invalidate.WriteDataAddress;\r
\r
void Fee_Init(void)\r
{\r
uint16 i,j;\r
-#if 0\r
- uint16 t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11;\r
- t1 = sizeof(FlsBankStatusType);\r
- t2 = BANK_CTRL_PAGE_SIZE;\r
- t3 = sizeof(FlsBankCtrlPageType);\r
-\r
- t4 = sizeof(BlockStatusType);\r
- t5 = sizeof(FlsBlockDataType);\r
- t6 = BLOCK_DATA_PAGE_SIZE;\r
- t7 = sizeof(FlsBlockDataPageType);\r
-\r
-\r
- t8 = sizeof(FlsBlockMagicPageType);\r
- t9 = BLOCK_MAGIC_PAGE_SIZE;\r
- t10 = sizeof(FlsBlockControlType);\r
- t11 = BLOCK_CTRL_PAGE_SIZE;\r
-#endif\r
-\r
-\r
\r
/* Reporting information */\r
ModuleStatus = MEMIF_BUSY_INTERNAL;\r