#define VALIDATE_RV(_exp,_api,_err,_rv ) \\r
if( !(_exp) ) { \\r
Det_ReportError(MODULE_ID_FEE, 0, _api, _err); \\r
- return _rv; \\r
+ /* PC-Lint exception (MISRA 14.7) - Allow return statement before end of function in validate macros */ \\r
+ /*lint -e(904)*/return _rv; \\r
}\r
\r
#define VALIDATE_NO_RV(_exp,_api,_err ) \\r
if( !(_exp) ) { \\r
Det_ReportError(MODULE_ID_FEE, 0, _api, _err); \\r
- return; \\r
+ /* PC-Lint exception (MISRA 14.7)- Allow return statement before end of function in validate macros */ \\r
+ /*lint -e(904)*/ return; \\r
}\r
\r
#define DET_REPORTERROR(_module,_instance,_api,_err) Det_ReportError(_module,_instance,_api,_err)\r
\r
+#define MIN_BLOCKNR ((uint16)((uint16)1 << NVM_DATASET_SELECTION_BITS))\r
+\r
#else\r
#define VALIDATE(_exp,_api,_err )\r
#define VALIDATE_RV(_exp,_api,_err,_rv )\r
/*\r
* Block numbering recalculation macros
*/\r
-#define GET_BLOCK_INDEX_FROM_BLOCK_NUMBER(_blocknr) (((_blocknr) >> NVM_DATASET_SELECTION_BITS) - 1)\r
-#define GET_DATASET_FROM_BLOCK_NUMBER(_blocknr) ((_blocknr) & ((1 << NVM_DATASET_SELECTION_BITS) - 1))\r
-#define BLOCK_INDEX_AND_SET_TO_BLOCKNR(_blocknr, _set) ((_blocknr + 1) << NVM_DATASET_SELECTION_BITS | set)\r
+#define GET_BLOCK_INDEX_FROM_BLOCK_NUMBER(_blocknr) (((_blocknr) >> NVM_DATASET_SELECTION_BITS) - 1u)\r
+#define GET_DATASET_FROM_BLOCK_NUMBER(_blocknr) ((_blocknr) & ((uint16)((uint16)1u << NVM_DATASET_SELECTION_BITS) - 1u))\r
+#define BLOCK_INDEX_AND_SET_TO_BLOCKNR(_blocknr, _set) ((uint16)((_blocknr + 1u) << NVM_DATASET_SELECTION_BITS) | set)\r
\r
/*\r
* Page alignment macros
*/\r
-#define PAGE_ALIGN(_size) ((((_size) + FEE_VIRTUAL_PAGE_SIZE - 1) / FEE_VIRTUAL_PAGE_SIZE) * FEE_VIRTUAL_PAGE_SIZE)\r
+#define PAGE_ALIGN(_size) ((uint16)((((_size) + FEE_VIRTUAL_PAGE_SIZE - 1) / FEE_VIRTUAL_PAGE_SIZE) * FEE_VIRTUAL_PAGE_SIZE))\r
\r
/*\r
* Bank properties list
\r
#define BLOCK_CTRL_PAGE_SIZE PAGE_ALIGN(sizeof(FlsBlockControlType))\r
\r
-#define BLOCK_CTRL_DATA_POS_OFFSET 0\r
+#define BLOCK_CTRL_DATA_POS_OFFSET (/*lint --e(835)*/0) // Inform PC-Lint that I want the constant to be zero\r
#define BLOCK_CTRL_MAGIC_POS_OFFSET BLOCK_CTRL_DATA_PAGE_SIZE\r
\r
typedef union {\r
FEE_READ_REQUESTED,\r
FEE_READ,\r
\r
- FEE_CANCEL_REQUESTED,\r
- FEE_CANCEL_PENDING,\r
-\r
FEE_INVALIDATE_REQUESTED,\r
FEE_INVALIDATE_MARK_BANK_OLD,\r
FEE_WRITE_INVALIDATE_HEADER_REQUESTED,\r
FEE_GARBAGE_COLLECT_DATA_WRITE,\r
FEE_GARBAGE_COLLECT_MAGIC_WRITE_REQUESTED,\r
FEE_GARBAGE_COLLECT_MAGIC_WRITE,\r
- FEE_GARBAGE_COLLECT_ERASE,\r
+ FEE_GARBAGE_COLLECT_ERASE\r
} CurrentJobStateType;\r
\r
typedef struct {\r
AdminFlsBlockType *AdminFlsBlockPtr;\r
union {\r
struct {\r
- uint16 NrOfBanks;\r
- uint16 BankNumber;\r
+ uint8 NrOfBanks;\r
+ uint8 BankNumber;\r
Fls_AddressType BlockAdminAddress;\r
}Startup;\r
struct {\r
Fls_AddressType WriteDataAddress;\r
}Invalidate;\r
struct {\r
- uint16 NrOfBanks;\r
- uint16 BankNumber;\r
+ uint8 BankNumber;\r
Fls_AddressType WriteAdminAddress;\r
Fls_AddressType WriteDataAddress;\r
- sint16 BytesLeft;\r
+ uint16 BytesLeft;\r
uint16 DataOffset;\r
}GarbageCollect;\r
} Op;\r
static CurrentJobType CurrentJob = {\r
.State = FEE_IDLE,\r
.InStateCounter = 0\r
+ //lint -e{785} PC-Lint (785) - rest of structure members is initialized when used.\r
};\r
\r
/*\r
***************************************/\r
\r
#if (FEE_POLLING_MODE == STD_ON)\r
-static void SetFlsJobBusy()\r
-{\r
- /* Nothing needed here */\r
-}\r
+#define SetFlsJobBusy() /* Nothing needs to be done here */\r
\r
static boolean CheckFlsJobFinnished(void)\r
{\r
if (Fls_GetStatus() == MEMIF_IDLE) {\r
CurrentJob.State = FEE_STARTUP_READ_BANK1_STATUS;\r
/* Read bank status of bank 1 */\r
- if (Fls_Read(BankProp[0].End - BANK_CTRL_PAGE_SIZE, (uint8*)&AdminFls.BankStatus[0], sizeof(FlsBankStatusType)) == E_OK) {\r
+ // PC-Lint exception (MISRA 11.4) - Pointer to pointer conversion ok by AUTOSAR\r
+ if (Fls_Read(BankProp[0].End - BANK_CTRL_PAGE_SIZE, /*lint -e(926)*/(uint8*)&AdminFls.BankStatus[0], sizeof(FlsBankStatusType)) == E_OK) {\r
SetFlsJobBusy();\r
} else {\r
AbortStartup(Fls_GetJobResult());\r
if (Fls_GetStatus() == MEMIF_IDLE) {\r
/* Read bank status of bank 2 */\r
CurrentJob.State = FEE_STARTUP_READ_BANK2_STATUS;\r
- if (Fls_Read(BankProp[1].End - BANK_CTRL_PAGE_SIZE, (uint8*)&AdminFls.BankStatus[1], sizeof(FlsBankStatusType)) == E_OK) {\r
+ // PC-Lint exception (MISRA 11.4) - Pointer to pointer conversion ok by AUTOSAR\r
+ if (Fls_Read(BankProp[1].End - BANK_CTRL_PAGE_SIZE, /*lint -e(926)*/(uint8*)&AdminFls.BankStatus[1], sizeof(FlsBankStatusType)) == E_OK) {\r
SetFlsJobBusy();\r
} else {\r
AbortStartup(Fls_GetJobResult());\r
if (jobResult != MEMIF_JOB_OK) {\r
AbortStartup(jobResult);\r
} else {\r
- CurrentJob.Op.Startup.BlockAdminAddress = BankProp[CurrentJob.Op.Startup.BankNumber].End - BLOCK_CTRL_PAGE_SIZE - BANK_CTRL_PAGE_SIZE;\r
+ CurrentJob.Op.Startup.BlockAdminAddress = BankProp[CurrentJob.Op.Startup.BankNumber].End - (BLOCK_CTRL_PAGE_SIZE + BANK_CTRL_PAGE_SIZE);\r
CurrentJob.State = FEE_STARTUP_READ_BLOCK_ADMIN_REQUESTED;\r
}\r
}\r
VALIDATE(CurrentJob.Op.Startup.NrOfBanks != 0, FEE_STARTUP_ID, FEE_FLASH_CORRUPT);\r
CurrentJob.Op.Startup.NrOfBanks--;\r
CurrentJob.Op.Startup.BankNumber = (CurrentJob.Op.Startup.BankNumber + 1) % 2;\r
- CurrentJob.Op.Startup.BlockAdminAddress = BankProp[CurrentJob.Op.Startup.BankNumber].End - BLOCK_CTRL_PAGE_SIZE - BANK_CTRL_PAGE_SIZE;\r
+ CurrentJob.Op.Startup.BlockAdminAddress = BankProp[CurrentJob.Op.Startup.BankNumber].End - (BLOCK_CTRL_PAGE_SIZE + BANK_CTRL_PAGE_SIZE);\r
} else { /* Block not empty */\r
- if ((memcmp(RWBuffer.BlockCtrl.MagicPage.Byte, BlockMagicMaster, BLOCK_MAGIC_LEN) == 0) &&\r
+ if ((memcmp(RWBuffer.BlockCtrl.MagicPage.Magic, BlockMagicMaster, BLOCK_MAGIC_LEN) == 0) &&\r
((RWBuffer.BlockCtrl.DataPage.Data.Status == BLOCK_STATUS_INUSE) || (RWBuffer.BlockCtrl.DataPage.Data.Status == BLOCK_STATUS_INVALIDATED))) {\r
/* This is a valid admin block */\r
uint16 blockIndex;\r
/* If current bank is marked as old we need to switch to a new bank */\r
if (AdminFls.BankStatus[AdminFls.BankNumber] == BANK_STATUS_OLD) {\r
AdminFls.BankNumber = (AdminFls.BankNumber + 1) % 2;\r
- AdminFls.NewBlockAdminAddress = BankProp[AdminFls.BankNumber].End - BLOCK_CTRL_PAGE_SIZE - BANK_CTRL_PAGE_SIZE;\r
+ AdminFls.NewBlockAdminAddress = BankProp[AdminFls.BankNumber].End - (BLOCK_CTRL_PAGE_SIZE + BANK_CTRL_PAGE_SIZE);\r
AdminFls.NewBlockDataAddress = BankProp[AdminFls.BankNumber].Start;\r
}\r
/* We are done! */\r
AdminFls.BankStatus[AdminFls.BankNumber] = BANK_STATUS_OLD;\r
\r
/* Change of bank */\r
- AdminFls.BankNumber ^= 0x1;\r
+ AdminFls.BankNumber ^= 0x1u;\r
AdminFls.NewBlockDataAddress = BankProp[AdminFls.BankNumber].Start;\r
- AdminFls.NewBlockAdminAddress = BankProp[AdminFls.BankNumber].End - BLOCK_CTRL_PAGE_SIZE - BANK_CTRL_PAGE_SIZE;\r
+ AdminFls.NewBlockAdminAddress = BankProp[AdminFls.BankNumber].End - (BLOCK_CTRL_PAGE_SIZE + BANK_CTRL_PAGE_SIZE);\r
\r
CurrentJob.Op.Write.WriteDataAddress = AdminFls.NewBlockDataAddress;\r
CurrentJob.Op.Write.WriteAdminAddress = AdminFls.NewBlockAdminAddress;\r
if (Fls_GetStatus() == MEMIF_IDLE) {\r
CurrentJob.State = FEE_WRITE_MAGIC;\r
memset(RWBuffer.BlockCtrl.MagicPage.Byte, 0xff, BLOCK_CTRL_MAGIC_PAGE_SIZE);\r
- memcpy(RWBuffer.BlockCtrl.MagicPage.Byte, BlockMagicMaster, BLOCK_MAGIC_LEN);\r
+ memcpy(RWBuffer.BlockCtrl.MagicPage.Magic, BlockMagicMaster, BLOCK_MAGIC_LEN);\r
if (Fls_Write(CurrentJob.Op.Write.WriteAdminAddress + BLOCK_CTRL_MAGIC_POS_OFFSET, RWBuffer.BlockCtrl.MagicPage.Byte, BLOCK_CTRL_MAGIC_PAGE_SIZE) == E_OK) {\r
SetFlsJobBusy();\r
} else {\r
*/\r
static void GarbageCollectStartJob(void)\r
{\r
- uint16 blockIndex,set;\r
+ uint16 blockIndex;\r
+ uint16 set;\r
boolean found = FALSE;\r
- uint8 sourceBank, destBank;\r
+ uint8 sourceBank;\r
\r
if (Fls_GetStatus() == MEMIF_IDLE) {\r
- if (AdminFls.BankStatus[0] == BANK_STATUS_OLD) {\r
- sourceBank = 0;\r
- destBank = 1;\r
- } else if (AdminFls.BankStatus[1] == BANK_STATUS_OLD) {\r
- sourceBank = 1;\r
- destBank = 0;\r
- } else {\r
- CurrentJob.State = FEE_IDLE;\r
- return;\r
- }\r
+ if ((AdminFls.BankStatus[0] == BANK_STATUS_OLD) || (AdminFls.BankStatus[1] == BANK_STATUS_OLD)) {\r
+ if (AdminFls.BankStatus[0] == BANK_STATUS_OLD) {\r
+ sourceBank = 0;\r
+ } else {\r
+ sourceBank = 1;\r
+ }\r
\r
- for (blockIndex = 0; (blockIndex < FEE_NUM_OF_BLOCKS) && !found; blockIndex++) {\r
- for (set = 0; (set < FEE_MAX_NUM_SETS) && !found; set++) {\r
- if (AdminFls.BlockDescrTbl[blockIndex][set].Status != BLOCK_STATUS_EMPTY) {\r
- if ((AdminFls.BlockDescrTbl[blockIndex][set].BlockAdminAddress >= BankProp[sourceBank].Start) && (AdminFls.BlockDescrTbl[blockIndex][set].BlockAdminAddress < (BankProp[sourceBank].End))) {\r
- CurrentJob.AdminFlsBlockPtr = &AdminFls.BlockDescrTbl[blockIndex][set];\r
- CurrentJob.BlockConfigPtr = &Fee_Config.BlockConfig[blockIndex];\r
- CurrentJob.BlockNumber = BLOCK_INDEX_AND_SET_TO_BLOCKNR(blockIndex, set);\r
- if (AdminFls.BlockDescrTbl[blockIndex][set].Status == BLOCK_STATUS_INVALIDATED) {\r
- CurrentJob.Length = 0;\r
- } else {\r
- CurrentJob.Length = PAGE_ALIGN(CurrentJob.BlockConfigPtr->BlockSize);\r
+ for (blockIndex = 0; (blockIndex < FEE_NUM_OF_BLOCKS) && (!found); blockIndex++) {\r
+ for (set = 0; (set < FEE_MAX_NUM_SETS) && (!found); set++) {\r
+ if (AdminFls.BlockDescrTbl[blockIndex][set].Status != BLOCK_STATUS_EMPTY) {\r
+ if ((AdminFls.BlockDescrTbl[blockIndex][set].BlockAdminAddress >= BankProp[sourceBank].Start) && (AdminFls.BlockDescrTbl[blockIndex][set].BlockAdminAddress < (BankProp[sourceBank].End))) {\r
+ CurrentJob.AdminFlsBlockPtr = &AdminFls.BlockDescrTbl[blockIndex][set];\r
+ CurrentJob.BlockConfigPtr = &Fee_Config.BlockConfig[blockIndex];\r
+ CurrentJob.BlockNumber = BLOCK_INDEX_AND_SET_TO_BLOCKNR(blockIndex, set);\r
+ if (AdminFls.BlockDescrTbl[blockIndex][set].Status == BLOCK_STATUS_INVALIDATED) {\r
+ CurrentJob.Length = 0;\r
+ } else {\r
+ CurrentJob.Length = PAGE_ALIGN(CurrentJob.BlockConfigPtr->BlockSize);\r
+ }\r
+\r
+ found = TRUE;\r
}\r
-\r
- found = TRUE;\r
}\r
}\r
}\r
- }\r
\r
- if (found) {\r
- CurrentJob.Op.GarbageCollect.WriteDataAddress = AdminFls.NewBlockDataAddress;\r
- CurrentJob.Op.GarbageCollect.WriteAdminAddress = AdminFls.NewBlockAdminAddress;\r
+ if (found) {\r
+ CurrentJob.Op.GarbageCollect.WriteDataAddress = AdminFls.NewBlockDataAddress;\r
+ CurrentJob.Op.GarbageCollect.WriteAdminAddress = AdminFls.NewBlockAdminAddress;\r
\r
- CurrentJob.State = FEE_GARBAGE_COLLECT_HEADER_WRITE;\r
- BlockHeaderDataWrite();\r
- } else {\r
- if (Fls_Erase(BankProp[sourceBank].Start, BankProp[sourceBank].End - BankProp[sourceBank].Start) == E_OK) {\r
- SetFlsJobBusy();\r
+ CurrentJob.State = FEE_GARBAGE_COLLECT_HEADER_WRITE;\r
+ BlockHeaderDataWrite();\r
} else {\r
- AbortJob(Fls_GetJobResult());\r
+ if (Fls_Erase(BankProp[sourceBank].Start, BankProp[sourceBank].End - BankProp[sourceBank].Start) == E_OK) {\r
+ SetFlsJobBusy();\r
+ } else {\r
+ AbortJob(Fls_GetJobResult());\r
+ }\r
+ CurrentJob.Op.GarbageCollect.BankNumber = sourceBank;\r
+ CurrentJob.State = FEE_GARBAGE_COLLECT_ERASE;\r
}\r
- CurrentJob.Op.GarbageCollect.BankNumber = sourceBank;\r
- CurrentJob.State = FEE_GARBAGE_COLLECT_ERASE;\r
+ } else {\r
+ CurrentJob.State = FEE_IDLE;\r
}\r
}\r
}\r
{\r
if (CheckFlsJobFinnished()) {\r
if (Fls_GetJobResult() == MEMIF_JOB_OK) {\r
- CurrentJob.Op.GarbageCollect.DataOffset += RWBUFFER_SIZE;\r
- CurrentJob.Op.GarbageCollect.BytesLeft -= RWBUFFER_SIZE;\r
- if (CurrentJob.Op.GarbageCollect.BytesLeft <= 0) {\r
+ if (CurrentJob.Op.GarbageCollect.BytesLeft <= RWBUFFER_SIZE) {\r
/* Yes, we are finished */\r
CurrentJob.State = FEE_GARBAGE_COLLECT_MAGIC_WRITE_REQUESTED;\r
} else {\r
/* More data to move */\r
+ CurrentJob.Op.GarbageCollect.DataOffset += RWBUFFER_SIZE;\r
+ CurrentJob.Op.GarbageCollect.BytesLeft -= RWBUFFER_SIZE;\r
CurrentJob.State = FEE_GARBAGE_COLLECT_DATA_READ_REQUESTED;\r
}\r
} else {\r
if (Fls_GetStatus() == MEMIF_IDLE) {\r
CurrentJob.State = FEE_GARBAGE_COLLECT_MAGIC_WRITE;\r
memset(RWBuffer.BlockCtrl.MagicPage.Byte, 0xff, BLOCK_CTRL_MAGIC_PAGE_SIZE);\r
- memcpy(RWBuffer.BlockCtrl.MagicPage.Byte, BlockMagicMaster, BLOCK_MAGIC_LEN);\r
+ memcpy(RWBuffer.BlockCtrl.MagicPage.Magic, BlockMagicMaster, BLOCK_MAGIC_LEN);\r
if (Fls_Write(CurrentJob.Op.GarbageCollect.WriteAdminAddress + BLOCK_CTRL_MAGIC_POS_OFFSET, RWBuffer.BlockCtrl.MagicPage.Byte, BLOCK_CTRL_MAGIC_PAGE_SIZE) == E_OK) {\r
SetFlsJobBusy();\r
} else {\r
RWBuffer.BlockCtrl.DataPage.Data.BlockNo = CurrentJob.BlockNumber;\r
RWBuffer.BlockCtrl.DataPage.Data.BlockDataAddress = AdminFls.NewBlockDataAddress;\r
RWBuffer.BlockCtrl.DataPage.Data.BlockDataLength = 0;\r
- memcpy(RWBuffer.BlockCtrl.MagicPage.Byte, BlockMagicMaster, BLOCK_MAGIC_LEN);\r
+ memset(RWBuffer.BlockCtrl.MagicPage.Byte, 0xff, BLOCK_CTRL_MAGIC_PAGE_SIZE);\r
+ memcpy(RWBuffer.BlockCtrl.MagicPage.Magic, BlockMagicMaster, BLOCK_MAGIC_LEN);\r
\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.BankStatus[AdminFls.BankNumber] = BANK_STATUS_OLD;\r
\r
// Change of bank\r
- AdminFls.BankNumber ^= 0x1;\r
+ AdminFls.BankNumber ^= 0x1u;\r
AdminFls.NewBlockDataAddress = BankProp[AdminFls.BankNumber].Start;\r
- AdminFls.NewBlockAdminAddress = BankProp[AdminFls.BankNumber].End - BLOCK_CTRL_PAGE_SIZE - BANK_CTRL_PAGE_SIZE;\r
+ AdminFls.NewBlockAdminAddress = BankProp[AdminFls.BankNumber].End - (BLOCK_CTRL_PAGE_SIZE + BANK_CTRL_PAGE_SIZE);\r
\r
CurrentJob.Op.Invalidate.WriteDataAddress = AdminFls.NewBlockDataAddress;\r
CurrentJob.Op.Invalidate.WriteAdminAddress = AdminFls.NewBlockAdminAddress;\r
\r
AdminFls.BankNumber = 0;\r
AdminFls.NewBlockDataAddress = BankProp[AdminFls.BankNumber].Start;\r
- AdminFls.NewBlockAdminAddress = BankProp[AdminFls.BankNumber].End - BLOCK_CTRL_PAGE_SIZE - BANK_CTRL_PAGE_SIZE;\r
+ AdminFls.NewBlockAdminAddress = BankProp[AdminFls.BankNumber].End - (BLOCK_CTRL_PAGE_SIZE + BANK_CTRL_PAGE_SIZE);\r
\r
for (i = 0; i < NUM_OF_BANKS; i++) {\r
AdminFls.BankStatus[i] = BANK_STATUS_NEW;\r
#if ( FLS_SET_MODE_API == STD_ON )\r
Fls_SetMode(mode);\r
#else\r
+ //lint --e{715} PC-Lint (715) - variable "mode" not used in this case\r
DET_REPORTERROR(MODULE_ID_FEE, 0, FEE_SET_MODE_ID, FEE_E_NOT_SUPPORTED);\r
#endif\r
}\r
VALIDATE_RV(ModuleStatus != MEMIF_UNINIT, FEE_READ_ID, FEE_E_UNINIT, E_NOT_OK);\r
VALIDATE_RV(ModuleStatus == MEMIF_IDLE, FEE_READ_ID, FEE_E_BUSY, E_NOT_OK);\r
\r
- VALIDATE_RV(blockNumber >= (1 << NVM_DATASET_SELECTION_BITS), FEE_READ_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
+ VALIDATE_RV(blockNumber >= MIN_BLOCKNR, FEE_READ_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
blockIndex = GET_BLOCK_INDEX_FROM_BLOCK_NUMBER(blockNumber);\r
VALIDATE_RV(blockIndex < FEE_NUM_OF_BLOCKS, FEE_READ_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
VALIDATE_RV(dataBufferPtr != NULL, FEE_READ_ID, FEE_E_INVALID_DATA_PTR, E_NOT_OK);\r
VALIDATE_RV(ModuleStatus != MEMIF_UNINIT, FEE_WRITE_ID, FEE_E_UNINIT, E_NOT_OK);\r
VALIDATE_RV(ModuleStatus == MEMIF_IDLE, FEE_WRITE_ID, FEE_E_BUSY, E_NOT_OK);\r
\r
- VALIDATE_RV(blockNumber >= (1 << NVM_DATASET_SELECTION_BITS), FEE_WRITE_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
+ VALIDATE_RV(blockNumber >= MIN_BLOCKNR, FEE_WRITE_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
blockIndex = GET_BLOCK_INDEX_FROM_BLOCK_NUMBER(blockNumber);\r
VALIDATE_RV(blockIndex < FEE_NUM_OF_BLOCKS, FEE_WRITE_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
VALIDATE_RV(dataBufferPtr != NULL, FEE_WRITE_ID, FEE_E_INVALID_DATA_PTR, E_NOT_OK);\r
VALIDATE_RV(ModuleStatus != MEMIF_UNINIT, FEE_INVALIDATE_BLOCK_ID, FEE_E_UNINIT, E_NOT_OK);\r
VALIDATE_RV(ModuleStatus == MEMIF_IDLE, FEE_INVALIDATE_BLOCK_ID, FEE_E_BUSY, E_NOT_OK);\r
\r
- VALIDATE_RV(blockNumber >= (1 << NVM_DATASET_SELECTION_BITS), FEE_INVALIDATE_BLOCK_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
+ VALIDATE_RV(blockNumber >= MIN_BLOCKNR, FEE_INVALIDATE_BLOCK_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
blockIndex = GET_BLOCK_INDEX_FROM_BLOCK_NUMBER(blockNumber);\r
VALIDATE_RV(blockIndex < FEE_NUM_OF_BLOCKS, FEE_INVALIDATE_BLOCK_ID, FEE_E_INVALID_BLOCK_NO, E_NOT_OK);\r
\r
*/\r
Std_ReturnType Fee_EraseImmediateBlock(uint16 blockNumber)\r
{\r
+ //lint --e{715} PC-Lint (715) - function is not implemented and thus variable "blockNumber" is not used yet\r
+\r
DET_REPORTERROR(MODULE_ID_FEE, 0, FEE_ERASE_IMMEDIATE_ID, FEE_E_NOT_IMPLEMENTED_YET);\r
\r
+\r
return E_NOT_OK;\r
}\r
\r