示例#1
0
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;
}
示例#2
0
/**
 * 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();
 }
示例#4
0
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 */
}