示例#1
0
void ComM_BusSM_ModeIndication( NetworkHandleType Channel, ComM_ModeType *Mode ){
    COMM_VALIDATE_INIT_NORV(COMM_SERVICEID_BUSSM_MODEINDICATION); /** @req COMM816 */
    COMM_VALIDATE_CHANNEL_NORV(Channel, COMM_SERVICEID_BUSSM_MODEINDICATION);
    ComM_ModeType ComMode;
    ComMode = *Mode;
    ComM_Internal_ChannelType* ChannelInternal = &ComM_Internal.Channels[Channel];
    const ComM_ChannelType* ChannelConf = &ComM_Config->Channels[Channel];

#if defined(USE_BSWM) || defined(USE_DCM)
    if( ChannelInternal->Mode != ComMode) {
#if defined(USE_BSWM)
        BswM_ComM_CurrentMode(Channel, ComMode); /* @req COMM976 */
#endif
#if defined(USE_DCM)
        /* @req COMM266 */
        /* !req COMM693 */
        switch(ComMode)  {
            case COMM_NO_COMMUNICATION:
                Dcm_ComM_NoComModeEntered(Channel);
                break;
            case COMM_SILENT_COMMUNICATION:
                Dcm_ComM_SilentComModeEntered(Channel);
                break;
            case COMM_FULL_COMMUNICATION:
                Dcm_ComM_FullComModeEntered(Channel);
                break;
            default:
                break;
        }
#endif
    }
#endif

    ChannelInternal->Mode = ComMode;
    ChannelInternal->SubMode = ChannelInternal->RequestedSubMode; /** @req COMM898 */ /** @req COMM899 */ /** @req COMM883 */

    switch(ComMode)
    {
        case COMM_NO_COMMUNICATION:
            break;
        case COMM_SILENT_COMMUNICATION:
            break;
        case COMM_FULL_COMMUNICATION:
            /* IMPROVMENT: What to do if return error */
            (void)ComM_Internal_NotifyNm(ChannelConf);
            break;
    }
}
示例#2
0
static inline Std_ReturnType ComM_Internal_Enter_ReadySleep(const ComM_ChannelType* ChannelConf,
															ComM_Internal_ChannelType* ChannelInternal) {
	Std_ReturnType status = E_OK;

	if (ChannelInternal->Mode != COMM_FULL_COMMUNICATION)
	{
		ChannelInternal->RequestedSubMode = COMM_FULL_COM_READY_SLEEP;
		status = ComM_Internal_PropagateComMode(ChannelConf, COMM_FULL_COMMUNICATION);
	}
	else
	{
		ChannelInternal->SubMode = COMM_FULL_COM_READY_SLEEP;
		status = ComM_Internal_NotifyNm(ChannelConf);
	}

	return status;
}
示例#3
0
文件: ComM.c 项目: uincore/OpenSAR
static inline Std_ReturnType ComM_Internal_Enter_ReadySleep(const ComM_ChannelType* ChannelConf,
															ComM_Internal_ChannelType* ChannelInternal) {
	boolean propagateToBusSM = (ChannelInternal->Mode != COMM_FULL_COMMUNICATION);
	ChannelInternal->LightTimeoutTimeLeft = ChannelConf->LightTimeout;
	ChannelInternal->Mode = COMM_FULL_COMMUNICATION;
	ChannelInternal->SubMode = COMM_SUBMODE_READY_SLEEP;

	Std_ReturnType status, globalStatus = E_OK;
	status = ComM_Internal_NotifyNm(ChannelConf);  /**< @req COMM133.1 */
	if (status > globalStatus){
		globalStatus = status;
	}
	if (propagateToBusSM) {
		status = ComM_Internal_PropagateComMode(ChannelConf);
		if (status > globalStatus){
			globalStatus = status;
		}
	}
	return globalStatus;
}
示例#4
0
文件: ComM.c 项目: uincore/OpenSAR
static inline Std_ReturnType ComM_Internal_Enter_NetworkRequested(const ComM_ChannelType* ChannelConf,
																ComM_Internal_ChannelType* ChannelInternal) {
	boolean propagateToBusSM = (ChannelInternal->Mode != COMM_FULL_COMMUNICATION);
	ChannelInternal->FullComMinDurationTimeLeft = COMM_T_MIN_FULL_COM_MODE_DURATION;
	ChannelInternal->Mode = COMM_FULL_COMMUNICATION;
	ChannelInternal->SubMode = COMM_SUBMODE_NETWORK_REQUESTED;

	Std_ReturnType status, globalStatus = E_OK;
	status = ComM_Internal_NotifyNm(ChannelConf);  /**< @req COMM129.2 */
	if (status > globalStatus){
		globalStatus = status;
	}
	if (propagateToBusSM) {
		status = ComM_Internal_PropagateComMode(ChannelConf);
		if (status > globalStatus){
			globalStatus = status;
		}
	}
	return globalStatus;
}