/** @req COMM429 */
void ComM_MainFunction(NetworkHandleType Channel) {
	const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];
	ComM_Internal_ChannelType* ChannelInternal = &ComM_Internal.Channels[Channel];

	if ((ChannelConf->NmVariant == COMM_NM_VARIANT_NONE) ||
		(ChannelConf->NmVariant == COMM_NM_VARIANT_LIGHT)) {
		Std_ReturnType status = ComM_Internal_TickFullComMinTime(ChannelConf, ChannelInternal);
		if (status != E_OK) {
			// IMPROVEMENT: Report DET error?
		}
	}
	if (ChannelConf->NmVariant == COMM_NM_VARIANT_LIGHT) {
		Std_ReturnType status = ComM_Internal_TickLightTime(ChannelConf, ChannelInternal);
		if (status != E_OK) {
		    // IMPROVEMENT: Report DET error?
		}
	}

	if (ChannelInternal->Mode == COMM_NO_COMMUNICATION &&
		ChannelInternal->SubMode == COMM_NO_COM_REQUEST_PENDING )
	{
		Std_ReturnType status = ComM_Internal_UpdateChannelState(ChannelConf, FALSE);
		if (status != E_OK) {
		    // IMPROVEMENT: Report DET error?
		}
	}
}
void ComM_DCM_InactiveDiagnostic(NetworkHandleType Channel){
	COMM_VALIDATE_INIT_NORV(COMM_SERVICEID_DCM_INACTIVEDIAGNOSTIC);
	COMM_VALIDATE_CHANNEL_NORV(Channel, COMM_SERVICEID_DCM_INACTIVEDIAGNOSTIC);

	const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];
	ComM_Internal.Channels[Channel].DCM_Requested = FALSE;

	/* IMPROVEMENT: Report DET error if returning error */
	(void)ComM_Internal_UpdateChannelState(ChannelConf, FALSE);
}
Exemple #3
0
static inline Std_ReturnType ComM_Internal_TickFullComMinTime(const ComM_ChannelType* ChannelConf, ComM_Internal_ChannelType* ChannelInternal) {
	Std_ReturnType status = E_OK;
	if (ChannelInternal->Mode == COMM_FULL_COMMUNICATION) {
		if (ChannelConf->MainFunctionPeriod >= ChannelInternal->FullComMinDurationTimeLeft) {
			ChannelInternal->FullComMinDurationTimeLeft = 0;
			status = ComM_Internal_UpdateChannelState(ChannelConf, FALSE);
		} else {
			ChannelInternal->FullComMinDurationTimeLeft -= ChannelConf->MainFunctionPeriod;
		}
	}
	return status;
}
/** @req COMM392 */
void ComM_Nm_BusSleepMode( NetworkHandleType Channel ){
	COMM_VALIDATE_INIT_NORV(COMM_SERVICEID_NM_BUSSLEEPMODE); /** @req COMM810 */
	COMM_VALIDATE_CHANNEL_NORV(Channel, COMM_SERVICEID_NM_BUSSLEEPMODE);
	const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];
	ComM_Internal_ChannelType* ChannelInternal = &ComM_Internal.Channels[Channel];

	ChannelInternal->NmIndicationMask |= COMM_NM_INDICATION_BUS_SLEEP;
	Std_ReturnType status = ComM_Internal_UpdateChannelState(ChannelConf, FALSE);
	if (status != E_OK) {
	    // IMPROVEMENT: Report DET error?
	}
}
Exemple #5
0
static inline Std_ReturnType ComM_Internal_TickLightTime(const ComM_ChannelType* ChannelConf, ComM_Internal_ChannelType* ChannelInternal) {
	Std_ReturnType status = E_OK;
	if ((ChannelInternal->Mode == COMM_FULL_COMMUNICATION) &&
		(ChannelInternal->SubMode == COMM_SUBMODE_READY_SLEEP)) {
		if (ChannelConf->MainFunctionPeriod >= ChannelInternal->LightTimeoutTimeLeft) {
			ChannelInternal->LightTimeoutTimeLeft = 0;
			status = ComM_Internal_UpdateChannelState(ChannelConf, FALSE);
		} else {
			ChannelInternal->LightTimeoutTimeLeft -= ChannelConf->MainFunctionPeriod;
		}
	}
	return status;
}
/** @req COMM792 */
void ComM_Nm_RestartIndication( NetworkHandleType Channel ){
	COMM_VALIDATE_INIT_NORV(COMM_SERVICEID_NM_RESTARTINDICATION); /** @req COMM812 */
	COMM_VALIDATE_CHANNEL_NORV(Channel, COMM_SERVICEID_NM_RESTARTINDICATION);
	const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];
	ComM_Internal_ChannelType* ChannelInternal = &ComM_Internal.Channels[Channel];

	ChannelInternal->NmIndicationMask |= COMM_NM_INDICATION_RESTART;
	Std_ReturnType status = ComM_Internal_UpdateChannelState(ChannelConf, TRUE);
	if (status != E_OK) {
	    // IMPROVEMENT: Report DET error?
	}

}
/** @req COMM383 */
void ComM_Nm_NetworkStartIndication( NetworkHandleType Channel ){
	COMM_VALIDATE_INIT_NORV(COMM_SERVICEID_NM_NETWORKSTARTINDICATION); /** @req COMM805 */
	COMM_VALIDATE_CHANNEL_NORV(Channel, COMM_SERVICEID_NM_NETWORKSTARTINDICATION);
	const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];
	ComM_Internal_ChannelType* ChannelInternal = &ComM_Internal.Channels[Channel];

	// Used to simulate Wake-up
	ChannelInternal->NmIndicationMask |= COMM_NM_INDICATION_RESTART;
	Std_ReturnType status = ComM_Internal_UpdateChannelState(ChannelConf, FALSE);
	if (status != E_OK) {
		// IMPROVMENT: Add DET error
	}
}
/** @req COMM800.partially */
Std_ReturnType ComM_LimitChannelToNoComMode( NetworkHandleType Channel, boolean Status ){
	COMM_VALIDATE_INIT(COMM_SERVICEID_LIMITCHANNELTONOCOMMODE);
	COMM_VALIDATE_CHANNEL(Channel, COMM_SERVICEID_LIMITCHANNELTONOCOMMODE);
#if (COMM_MODE_LIMITATION_ENABLED == STD_ON)
	const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];
	ComM_Internal_ChannelType* ChannelInternal = &ComM_Internal.Channels[Channel];
	if (Status) {
		ChannelInternal->InhibitionStatus |=  (COMM_INHIBITION_STATUS_NO_COMMUNICATION);
	} else {
		ChannelInternal->InhibitionStatus &= ~(COMM_INHIBITION_STATUS_NO_COMMUNICATION);
	}
	return ComM_Internal_UpdateChannelState(ChannelConf, FALSE);
#else
	(void)Status; /* Avoid compiler warning */
	return E_NOT_OK;
#endif
}
Exemple #9
0
/** @req COMM429 */
void ComM_MainFunction(NetworkHandleType Channel) {
	const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];
	ComM_Internal_ChannelType* ChannelInternal = &ComM_Internal.Channels[Channel];

	Std_ReturnType status = ComM_Internal_UpdateChannelState(ChannelConf, TRUE);

	if ((ChannelConf->NmVariant == COMM_NM_VARIANT_NONE) ||
		(ChannelConf->NmVariant == COMM_NM_VARIANT_LIGHT)) {
		status = ComM_Internal_TickFullComMinTime(ChannelConf, ChannelInternal);
	}
	if (ChannelConf->NmVariant == COMM_NM_VARIANT_LIGHT) {
		status = ComM_Internal_TickLightTime(ChannelConf, ChannelInternal);
	}

	if (status != E_OK) {
		// Report error?
	}
}
/** @req COMM801.partially */
Std_ReturnType ComM_LimitECUToNoComMode( boolean Status ){
	COMM_VALIDATE_INIT(COMM_SERVICEID_LIMITECUTONOCOMMODE);
#if (COMM_MODE_LIMITATION_ENABLED == STD_ON)
	ComM_Internal.NoCommunication = Status;
	uint8 Channel;
	Std_ReturnType totalStatus = E_OK;
	for (Channel = 0; Channel < COMM_CHANNEL_COUNT; Channel++) {
		const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];
		Std_ReturnType status = ComM_Internal_UpdateChannelState(ChannelConf, FALSE);
		if (status > totalStatus) {
			totalStatus = status;
		}
	}
	return totalStatus;
#else
	(void)Status;  /* Avoid compiler warning */
	return E_NOT_OK;
#endif
}
static Std_ReturnType ComM_Internal_RequestComMode(
				ComM_UserHandleType User, ComM_ModeType ComMode ){

	const ComM_UserType* UserConfig = &ComM_Config->Users[User]; /** @req COMM795 */
	ComM_Internal_UserType* UserInternal = &ComM_Internal.Users[User];

	UserInternal->RequestedMode = ComMode;  /**<  @req COMM500  @req COMM92 */
	uint32 userMask = (1LU << User);

	Std_ReturnType requestStatus = E_OK;

	/* Go through users channels. Relay to SMs. Collect overall success status */
	for (uint8 i = 0; i < UserConfig->ChannelCount; ++i) {
		const ComM_ChannelType* Channel = UserConfig->ChannelList[i];
		ComM_Internal_ChannelType* ChannelInternal = &ComM_Internal.Channels[Channel->Number];

		/** @req COMM625 */
		// Put user request into mask
		if (ComMode == COMM_NO_COMMUNICATION) {
			ChannelInternal->UserRequestMask &= ~(userMask);
		} else if (ComMode == COMM_FULL_COMMUNICATION) {
			ChannelInternal->UserRequestMask |= userMask; /** @req COMM839 */
		} else {
			//Nothing to be done.
		}

		// take request -> new state
		Std_ReturnType status = ComM_Internal_UpdateChannelState(Channel, TRUE);
		if (status > requestStatus){
			requestStatus = status;
		}

	}

	return requestStatus;
}