L-PDU channel modes 转换

L-PDU channel modes 转换

下图显示了可能的 L-PDU channel modes。每个 L-PDU channel 可以 OFFLINE(无发送)或 ONLINE(发送有效)。

在这里插入图片描述

1.CANIF_OFFLINE

CanIf_SetPduMode(ControllerId, CANIF_SET_OFFLINE)            // 1.1 调用函数
	>CanIf 应该按以下原则处理分配给该 physical channel(通过 ControllerId 定义)的所有 L-PDUs:
		 阻止进一步的发送请求-即取消向 CanDrv 调用的 CanIf_Transmit(),向上层调用模块返回 E_NOT_OK。 
		 清除相关的 CanIf transmit buffers。 
		 阻止调用上层的接收指示回调函数。
		 阻止调用上层的发送确认回调函数。       

CanIf_SetPduMode(ControllerId, CANIF_SET_TX_OFFLINE)         // 1.2 调用函数         
	>CanIf 应该按以下原则处理分配给该 physical channel(通过 ControllerId 定义)的所有 L-PDUs:
		 阻止进一步的发送请求-即取消向 CanDrv 调用的 CanIf_Transmit(),向上层调用模块返回 E_NOT_OK。
		 清除相关的 CanIf transmit buffers。 
		 阻止调用上层的发送确认回调函数。       

CanIf_SetPduMode(ControllerId, CANIF_SET_ RX _OFFLINE)         // 1.3 调用函数         
	>CanIf 应该按以下原则处理分配给该 physical channel(通过 ControllerId 定义)的所有 L-PDUs:
		
		 阻止调用上层模块的接收指示函数。
		
		处于 CANIF_SET_TX_OFFLINE 和 CANIF_SET_OFFLINE ,会隐式地禁止住BusOff notification,这是因为,
	在这种状态下,没有 L-PDUs 会被发送,因而 CAN controller 不会因为新请求的发送 L-PDUs 而进入 BusOff 状态。

  在转换为 CANIF_SET_TX_OFFLINE 或 CANIF_SET_OFFLINE mode 后,如果CAN 硬件 transmit object 中的那些已经在等待发送的 transmit L-PDUs 被迅速发送出去,随后导致了 BusOff ,CanIf 并不阻止 BusOff notification <User_ControllerBusOff>(ControllerId)的执行,
此时,CANIf 随后向上层模块执行发送确认通知(<User_TxConfirmation>()).PDU channel mode 的改变不影响 wake up notification

2.CANIF_ONLINE

CanIf_SetPduMode(ControllerId, CANIF_SET_ONLINE)             // 2.1 调用函数
	>  CanIf应该按以下原则处理分配给该 physical channel(通过 ControllerId 定义)的所有 L-PDUs:
		 使能进一步的发送请求-即向 CanDrv 调用的 CanIf_Transmit()。 
		 使能调用上层的接收指示回调函数。
		 使能调用上层的发送确认回调函数。

CanIf_SetPduMode(ControllerId, CANIF_SET_TX_ONLINE)          // 2.2 调用函数  
	>CanIf应该按以下原则处理分配给该physical channel(通过ControllerId定义)的所有发送 L-PDUs:     
		 使能进一步的发送请求-即向 CanDrv 调用的 CanIf_Transmit()。
		 使能调用上层的发送确认回调函数。  

CanIf_SetPduMode(ControllerId, CANIF_SET_RX_ONLINE)          // 2.3 调用函数
	>CanIf应该按以下原则处理分配给该physical channel(通过ControllerId定义)的所有接收 L-PDUs: 
		 使能调用上层的接收指示回调函数。 

3.CANIF_OFFLINE_ACTIVE

/**
*		CanIf 通过 CANIF_GET_OFFLINE_ACTIVE 模式提供成功发送的模拟。该模式只影响 CanIf 的发送路径。
* 通过调用CanIf_SetPduMode(ControllerId,CANIF_SET_TX_OFFLINE_ACTIVE)来使能 OFFLINE 'Active' mode。
* 通过调用CanIf_SetPduMode(ControllerId,CANIF_SET_ONLINE)或CanIf_SetPduMode(ControlleId,CANIF_SET_TX_OFFLINE)离开。
*
*/

CanIf_SetPduMode(ControllerId, CANIF_SET_TX_OFFLINE_ACTIVE)    // 3.1 调用函数 
	>CanIf 应该按以下原则处理分配给该 physical channel(通过 ControllerId 定义,refer to CANIF382)的所有 L-PDUs:
		 禁止进一步的发送请求-即向 CanDrv 调用的 CanIf_Transmit(),但是并不向上层调用模块返回 E_NOT_OK。 
		 在调用 CanIf_Transmit()发送请求结束的同时,使能调用上层的发送确认回调函数。
		 使能调用上层的发送确认回调函数。          

  在逻辑视图上,CANIF_GET_OFFLINE_ACTIVE 模式是 CANIF_OFFLINE 模式的一个子模式,然而,** 在 CANIF_ONLINE 模式或 CANIF_OFFLINE 模式都可以使能CANIF_OFFLINE_ACTIVE 模式。**
注意:在 CANIF_GET_OFFLINE_ACTIVE 模式时,上层模块必须处理发送确认的执行。发送请求结束后应该立刻执行发送确认的处理(seeCANIF072)

猜你喜欢

转载自blog.csdn.net/mido94/article/details/126832482
今日推荐