Std_ReturnType Fls_Compare( Fls_AddressType SourceAddress, const uint8 *TargetAddressPtr, Fls_LengthType Length ) { #if FLS_BASE_ADDRESS > 0 /* Avoid compiler warning */ SourceAddress += FLS_BASE_ADDRESS; #endif /** @req SWS_Fls_00241 */ /** @req SWS_Fls_00186 */ /** @req SWS_Fls_00152 */ VALIDATE_W_RV(Fls_Global.status != MEMIF_UNINIT,FLS_COMPARE_ID, FLS_E_UNINIT,E_NOT_OK ); /** @req SWS_Fls_00153 */ VALIDATE_W_RV( Fls_Global.status != MEMIF_BUSY, FLS_COMPARE_ID, FLS_E_BUSY, E_NOT_OK ); /** @req SWS_Fls_00273 */ VALIDATE_W_RV( TargetAddressPtr != NULL , FLS_COMPARE_ID, FLS_E_PARAM_DATA, E_NOT_OK ); /** @req SWS_Fls_00150 */ VALIDATE_W_RV( E_OK == checkValidAddress(SourceAddress), FLS_COMPARE_ID, FLS_E_PARAM_ADDRESS, E_NOT_OK ); /** @req SWS_Fls_00151 */ VALIDATE_W_RV( (Length != 0uL) && (E_OK == checkValidAddress( SourceAddress + Length - 1uL)), FLS_COMPARE_ID, FLS_E_PARAM_LENGTH, E_NOT_OK ); #if defined(CFG_MPC5777M) VALIDATE_W_RV((E_OK == checkValidChunk(SourceAddress, SourceAddress + Length - 1)), FLS_COMPARE_ID, FLS_E_INVALID_AREA, E_NOT_OK); #endif // Always check if status is not busy if (Fls_Global.status == MEMIF_BUSY ) { return E_NOT_OK; } Fls_Global.status = MEMIF_BUSY; /* @req SWS_Fls_00342 */ Fls_Global.jobResultType = MEMIF_JOB_PENDING; /* @req SWS_Fls_00343 */ Fls_Global.jobType = FLS_JOB_COMPARE; if( Fls_Global.mode == MEMIF_MODE_FAST ) { Fls_Global.readChunkSize = Fls_Global.config->FlsMaxReadFastMode; } else { Fls_Global.readChunkSize = Fls_Global.config->FlsMaxReadNormalMode; } /** @req SWS_Fls_00341 */ Fls_Global.flashAddr = SourceAddress; Fls_Global.ramAddr = (uint8*)TargetAddressPtr; /*lint !e9005 !e926 Would make core more complex. IMPROVMENT: Remove cast */ Fls_Global.length = Length; return E_OK; }
/** * Read from flash memory * * @param SourceAddress * @param TargetAddressPtr * @param Length * @return */ Std_ReturnType Fls_Read( Fls_AddressType SourceAddress, uint8 *TargetAddressPtr, Fls_LengthType Length) { #if FLS_BASE_ADDRESS > 0 /* Avoid compiler warning */ SourceAddress += FLS_BASE_ADDRESS; #endif /** @req SWS_Fls_00236 */ /** @req SWS_Fls_00239 */ /** @req SWS_Fls_00099 */ VALIDATE_W_RV(Fls_Global.status != MEMIF_UNINIT,FLS_READ_ID, FLS_E_UNINIT,E_NOT_OK ); /** @req SWS_Fls_00100 */ VALIDATE_W_RV( Fls_Global.status != MEMIF_BUSY, FLS_READ_ID, FLS_E_BUSY, E_NOT_OK ); /** @req SWS_Fls_00158 */ VALIDATE_W_RV( TargetAddressPtr != NULL , FLS_READ_ID, FLS_E_PARAM_DATA, E_NOT_OK ); /** @req SWS_Fls_00097 */ VALIDATE_W_RV( E_OK == checkValidAddress(SourceAddress), FLS_READ_ID, FLS_E_PARAM_ADDRESS, E_NOT_OK ); /** @req SWS_Fls_00098 */ VALIDATE_W_RV( (Length != 0) && (E_OK == checkValidAddress(SourceAddress + Length -1)), FLS_READ_ID, FLS_E_PARAM_LENGTH, E_NOT_OK ); #if defined(CFG_MPC5777M) VALIDATE_W_RV((E_OK == checkValidChunk(SourceAddress, SourceAddress + Length - 1)), FLS_READ_ID, FLS_E_INVALID_AREA, E_NOT_OK); #endif // Always check if status is not busy if (Fls_Global.status == MEMIF_BUSY) { return E_NOT_OK; } Fls_Global.status = MEMIF_BUSY; Fls_Global.jobResultType = MEMIF_JOB_PENDING; Fls_Global.jobType = FLS_JOB_READ; LOG_HEX2("Fls_Read() ",(uint32)TargetAddressPtr," ", Length); /** @req SWS_Fls_00337 */ Fls_Global.flashAddr = SourceAddress; Fls_Global.ramAddr = TargetAddressPtr; Fls_Global.length = Length; if( Fls_Global.mode == MEMIF_MODE_FAST ) { Fls_Global.readChunkSize = Fls_Global.config->FlsMaxReadFastMode; } else { Fls_Global.readChunkSize = Fls_Global.config->FlsMaxReadNormalMode; } return E_OK; }
/// Write-only accessor to _destAddress. /// @param newVal A stirng containing a numerical IPv4 or IPv6 address. /// @throw InvalidIPv4Address If the IP address was not in numerical 0.0.0.0 format. virtual void setDestAddress(const std::string& newVal) { if (newVal.empty() || checkValidAddress(_destAddress)) _destAddress = newVal; else throw InvalidIPv4Address("Improper IPv4 address given to devUdp4::setAddress"); _dest_addr.sin_addr.s_addr = IPv4Addr(newVal).get(); }
Std_ReturnType Fls_Write(Fls_AddressType TargetAddress, const uint8 *SourceAddressPtr, Fls_LengthType Length) { #if FLS_BASE_ADDRESS > 0 /* Avoid compiler warning */ TargetAddress += FLS_BASE_ADDRESS; #endif /** @req SWS_Fls_00223 */ /** @req SWS_Fls_00225 */ /** @req SWS_Fls_00226 */ /** @req SWS_Fls_00066 */ VALIDATE_W_RV(Fls_Global.status != MEMIF_UNINIT,FLS_WRITE_ID, FLS_E_UNINIT,E_NOT_OK ); /** @req SWS_Fls_00030 */ VALIDATE_W_RV(Fls_Global.status != MEMIF_BUSY,FLS_WRITE_ID, FLS_E_BUSY,E_NOT_OK ); /** @req SWS_Fls_00157 */ VALIDATE_W_RV(SourceAddressPtr != NULL,FLS_WRITE_ID, FLS_E_PARAM_DATA,E_NOT_OK ); /** @req SWS_Fls_00026 */ VALIDATE_W_RV( ((TargetAddress % FLASH_PAGE_SIZE) == 0) && (E_OK == checkValidAddress(TargetAddress)), FLS_WRITE_ID, FLS_E_PARAM_ADDRESS, E_NOT_OK ); /** @req SWS_Fls_00027 */ VALIDATE_W_RV( ((Length != 0) && ((((TargetAddress + Length) % FLASH_PAGE_SIZE) == 0) && (E_OK == checkValidAddress(TargetAddress + Length -1 )))), FLS_WRITE_ID, FLS_E_PARAM_LENGTH, E_NOT_OK ); #if defined(CFG_MPC5777M) VALIDATE_W_RV((E_OK == checkValidChunk(TargetAddress, TargetAddress + Length - 1)), FLS_WRITE_ID, FLS_E_INVALID_AREA, E_NOT_OK); #endif // Destination is FLS_BASE_ADDRESS + TargetAddress /** @req SWS_Fls_333 */ Fls_Global.jobResultType = MEMIF_JOB_PENDING; /** @req SWS_Fls_332 */ Fls_Global.status = MEMIF_BUSY; Fls_Global.jobType = FLS_JOB_WRITE; // Fill in the required fields for programming... /** @req SWS_Fls_331 */ Fls_Global.flashWriteInfo.source = (uint32)SourceAddressPtr; /*lint !e923 Intended use */ Fls_Global.flashWriteInfo.dest = TargetAddress; Fls_Global.flashWriteInfo.left = Length; if( Fls_Global.mode == MEMIF_MODE_FAST ) { Fls_Global.flashWriteInfo.chunkSize = Fls_Global.config->FlsMaxWriteFastMode; } else { Fls_Global.flashWriteInfo.chunkSize = Fls_Global.config->FlsMaxWriteNormalMode; } // unlock flash for the entire range. Flash_Lock(Fls_Global.config->FlsInfo,FLASH_OP_UNLOCK, TargetAddress, Length ); LOG_HEX2("Fls_Write() ",Fls_Global.flashWriteInfo.dest," ", Fls_Global.flashWriteInfo.left); /* Save to original request */ Fls_Global.flashWriteInfo.pDest = TargetAddress; Fls_Global.flashWriteInfo.pLeft = Length; /** @req SWS_Fls_146 */ if (EE_OK != Flash_ProgramPageStart( Fls_Global.config->FlsInfo, &Fls_Global.flashWriteInfo.dest, &Fls_Global.flashWriteInfo.source, &Fls_Global.flashWriteInfo.left, NULL)) { return E_NOT_OK; } return E_OK; /** @req SWS_Fls_334 */ }