[CP_AUTOSAR]_通信服务_CanTp模块(四)


  在前面 《[CP_AUTOSAR]_通信服务_CanTp模块(一)》 和 《[CP_AUTOSAR]_通信服务_CanTp模块(二)》《[CP_AUTOSAR]_通信服务_CanTp模块(三)》文章中介绍了CanTp 模块的主要功能、与其它模块的交互关系,以及功能规范。本文再接着介绍下CanTp 模块定义的API接口函数。

4、API 规范

4.1、函数定义

4.1.1、CanTp_Init

函数CanTp_Init
语法void CanTp_Init(const CanTp_ConfigType* CfgPtr)
服务 ID0x01
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy不可重入(重入:可以由多个任务并发调用,而不影响直接结果)
参数(in)CfgPtr,指向 CanTp 模块构建后的配置参数
参数(inout)None
参数(out)None
返回值None
描述初始化 CanTp 模块参数使用
获取CanTp.h

  上电后,CanTp 模块应该进入 CANTP_OFF 状态,该状态下 CanTp 模块仍未完成配置,也不能支持相关的通信任务。函数 CanTp_Init 初始化 CanTp 模块的所有全局参数,设置其状态为空闲状态(state = CANTP_ON,但接收和发送都不在进行中)。函数 CanTp_Init 是没有返回值,要求在参数配置过程中(如使用配置工具)能够监测配置数据错误。而且,如果硬件模块错误发生,应该可以通过硬件错误管理器模块汇报出当前错误。

功能需求描述
SWS_CanTp_00199在进一步使用 CanTp 模块之前,应该调用 CanTp_Init 函数来初始化;
SWS_CanTp_00161用于显示 BSW 模块是否被初始化的状态变量,应该使用 BSW 的 API函数来初始化为0;

4.1.2、CanTp_ GetVersionInfo

函数CanTp_GetVersionInfo
语法void CanTp_GetVersionInfo (Std_VersionInfoType* versioninfo)
服务 ID0x07
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy可重入(重入:可以由多个任务并发调用,而不影响直接结果)
参数(in)None
参数(inout)None
参数(out)versioninfo,存储了该模块的版本信息;
返回值None
描述返回 CanTp 模块的版本信息;
获取CanTp.h
功能需求描述
SWS_CanTp_00319如果开发中监测错误的功能开启了,参数是空指针,那么该函数应该能汇报错误 CanTp.CANTP_E_PARAM_POINTER;

4.1.3、CanTp_Shutdown

函数CanTp_Shutdown
语法void CanTp_GetVersionInfo (Std_VersionInfoType* versioninfo)
服务 ID0x02
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy不可重入(重入:可以由多个任务并发调用,而不影响直接结果)
参数(in)None
参数(inout)None
参数(out)None
返回值None
描述关闭 CanTp 模块;
获取CanTp.h
功能需求描述
SWS_CanTp_00202CanTp_Shutdown 函数被调用时,应该关闭所有挂起的传输协议连接,释放所有的资源,并且设置 CanTp 模块为 CANTP_OFF 状态;
SWS_CanTp_00200CanTp_Shutdown 函数不会引发关于挂起帧传输或者发送;

4.1.4、CanTp_Transmit

函数CanTp_Transmit
语法Std_ReturnType CanTp_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr)
服务 ID0x49
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy不同的 PduId 可重入,相同的 PduId 不可重入;(重入:可以由多个任务并发调用,而不影响直接结果)
参数(in)TxPduId,被发送的 PDU 的ID
参数(inout)PduInfoPtr,指向数组的指针,包括了 PDU 数据长度和元数据的指针;
参数(out)None
返回值Std_ReturnType;E_OK:发送的请求被接收;E_NOT_OK:发送的请求未被接收;
描述请求发送 PDU ;
获取CanTp.h
功能需求描述
SWS_CanTp_00231如果要发送的数据没有填充满 N-PDU ,函数 CanTp_Transmit() 应该发送 SF N-PDU(单帧);
SWS_CanTp_00232如果要发送的数据超出了一帧 N-PDU 数量,函数 CanTp_Transmit() 应该发送多帧;
SWS_CanTp_00354N-PDU 的最大发送长度来源于EcuC的配置参数 PduLength,该参数等于 ISO 15765-2 中的 TX_DL;
SWS_CanTp_00204当消息传送完成时,CanTp 模块应该调用 PduR_CanTpTxConfirmation 函数来通知上层;
SWS_CanTp_00205如果错误发生(比如,溢出、N_As 超时、N_Bs 超时等等),CanTp 模块应该停止发送消息,并调用函数 PduR_CanTpTxConfirmation (返回值为 E_NOT_OK);
SWS_CanTp_00206在当前 CanTp 传输层中会话中,CanTp_Transmit 正在被某个 N-PDU ID 调用,那么 函数 CanTp_Transmit 需要拒绝该请求;
SWS_CanTp_00298CanTp 模块缓存空间有限,因此要发送的 N-PDU 数据载荷不是在内部被拷贝的。CanTp 层通过函数 PduR_CanTpCopyTxData 服务从上层直接获取数据。因此,为了保证数据一致性,上层(比如DCM,PduR 或者是 AUTOSAR COM)必须锁住内存区域,直到确认通知产生。
SWS_CanTp_00299当上层调用函数 CanTp_Transmit 来发送一个没有元数据的 N-PDU,结构体 PduInfoPtr 只表示了数据长度信息;对于带有元数据的 N-PDU,除了数据的长度信息和指向元数据的指针,CanTp 模块需要调用 PduR_CanTpCopyTxData 函数去获取真实的发送数据;
SWS_CanTp_00321如果开发中监测错误的功能开启了,PduInfoPtr 是空指针,函数 CanTp_Transmit 应该汇报错误 CanTp.CANTP_E_PARAM_POINTER;
SWS_CanTp_00356如果开发中监测错误的功能开启了,函数 CanTp_Transmit 应该检查参数 TxPduId 的有效性。如果值无效,函数 CanTp_Transmit 应该汇报错误 CanTp.CANTP_E_INVALID_TX_ID.;

4.1.5、CanTp_CancelTransmit

函数CanTp_CancelTransmit
语法Std_ReturnType CanTp_CancelTransmit (PduIdType TxPduId)
服务 ID0x4a
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy不同的 PduId 可重入,相同的 PduId 不可重入;(重入:可以由多个任务并发调用,而不影响直接结果)
参数(in)TxPduId,被取消发送的 PDU 的ID
参数(inout)None
参数(out)None
返回值Std_ReturnType;E_OK:目标模块成功执行取消发送请求;E_NOT_OK:目标模块拒绝执行取消发送请求;
描述在下层通讯模块中,请求取消一个正在发送中的 PDU ;
获取CanTp.h

   该服务用于取消已经调用函数 CanTp_Transmit 发送 N-PDU 的请求。

功能需求描述
SWS_CanTp_00254如果开发中监测错误的功能开启了 ,函数 CanTp_CancelTransmit 应该检查参数 TxPduId 的有效性。如果值无效,函数 CanTp_CancelTransmit 应该汇报错误 CanTp.CANTP_E_INVALID_TX_ID.;如果参数值表示取消发送 N-PDU 的请求,而该 N-PDU 并没有正在发送中,CanTp 模块应该汇报运行时错误 CanTp.CANTP_E_OPER_NOT_SUPPORTED 给 Default Error Tracer 模块,并且函数返回值为 E_NOT_OK ;
SWS_CanTp_00256CanTp 模块应该停止发送当前 N-PDU,如果函数返回值为 E_OK;
SWS_CanTp_00255如果函数 CanTp_CancelTransmit 成功执行,那么 CanTp 模块应该调用 PduR_CanTpTxConfirmation 函数,其返回值为 E_NOT_OK;

4.1.6、CanTp_CancelReceive

函数CanTp_CancelReceive
语法Std_ReturnType CanTp_CancelReceive(PduIdType RxPduId)
服务 ID0x4c
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy不可重入(重入:可以由多个任务并发调用,而不影响直接结果);
参数(in)RxPduId,被取消接收的 PDU 的ID
参数(inout)None
参数(out)None
返回值Std_ReturnType;E_OK:目标模块成功执行取消发送请求;E_NOT_OK:目标模块拒绝执行取消发送请求;
描述在下层通讯模块中,请求取消一个正在接收中的 PDU ;
获取CanTp.h

   该服务用于取消已经调用 N-PDU 的接收,其开始于首帧的接收和函数 PduR_StartOfReception 的连续调用。当函数返回值,应再也没有一个给定的 N-PDU ID在接收中。

功能需求描述
SWS_CanTp_00260如果开发中监测错误的功能开启了 ,函数 CanTp_CancelReceive 应该检查参数 RxPduId 的有效性。如果值无效,函数 CanTp_CancelReceive 应该汇报错误 CanTp.CANTP_E_INVALID_RX_ID.;如果参数值表示取消接收 N-PDU 的请求,而该 N-PDU 并没有正在接收中,CanTp 模块应该汇报运行时错误 CanTp.CANTP_E_OPER_NOT_SUPPORTED 给 Default Error Tracer 模块,并且函数返回值为 E_NOT_OK ;
SWS_CanTp_00261CanTp 模块应该停止接收当前 N-PDU,如果函数返回值为 E_OK;
SWS_CanTp_00262如果单帧接收或者CanTp 模块正在接收最后一个连续帧 CF N-PDU(比如,该服务在 N_Cr 超时之后被调用来开始最后一个连续帧),CanTp 模块应该拒绝这个取消发送的请求,这种情况下,CanTp 返回值为 E_NOT_OK ;
SWS_CanTp_00263如果函数 CanTp_CancelReceive 成功执行,那么 CanTp 模块应该调用 PduR_CanTpRxIndication 函数,其返回值为 E_NOT_OK;

4.1.7、CanTp_ChangeParameter

函数CanTp_ChangeParameter
语法Std_ReturnType CanTp_ChangeParameter (PduIdType id, TPParameterType parameter, uint16 value)
服务 ID0x4b
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy不可重入(重入:可以由多个任务并发调用,而不影响直接结果);
参数(in)id,参数改变的 PDU ID;
parameter,被改变的参数;
value,参数的新值;
参数(inout)None
参数(out)None
返回值Std_ReturnType;E_OK:参数被成功改变;E_NOT_OK:参数被拒绝改变;
描述请求改变一个指定的传输层参数(比如,BS,block size) ;
获取CanTp.h

   该服务 CanTp_ChangeParameter 用于改变接收参数 BS 和 STmin 的值,其与每个接收的 N-PDU 有关。

功能需求描述
SWS_CanTp_00303改变一个参数只可能 N-PDU 不在接收过程中,即在接收首帧 FF 直到最后一帧连续帧被接收,改变一个参数是不可能的;
SWS_CanTp_00304如果改变一个正在接收的N-PDU 的参数值, CanTp_ChangeParameter 函数应立即返回 E_NOT_OK,并且不会改变任何值;
SWS_CanTp_00338当调用函数 CanTp_ChangeParameter 改变一个带有元数据的 N-PDU的参数值,那么该改变应该被应用到所有的通过连接上,以便于可以被接下来所有的N-PDU接收所使用;
SWS_CanTp_00305如果开发中监测错误的功能开启了 ,函数 CanTp_ChangeParameter 应该检查参数(parameter 和 value)的有效性。如果值 parameter 无效,函数应该汇报错误 CanTp.CANTP_E_PARAM_ID;如果值 value 无效,函数应该汇报错误 CanTp.CANTP_E_PARAM_CONFIG;
SWS_CanTp_00357如果开发中监测错误的功能开启了 ,函数 CanTp_ChangeParameter 应该检查参数( id )的有效性。如果值 id 无效,函数应该汇报错误 CanTp.CANTP_E_INVALID_RX_ID;

4.1.8、CanTp_ReadParameter

函数CanTp_ReadParameter
语法Std_ReturnType CanTp_ReadParameter (PduIdType id, TPParameterType parameter, uint16 * value)
服务 ID0x0b
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy不可重入(重入:可以由多个任务并发调用,而不影响直接结果);
参数(in)id,读取参数的 PDU ID;
parameter,指定读取的参数;
参数(inout)None
参数(out)value,指向参数的指针
返回值Std_ReturnType;E_OK:请求被接受了;E_NOT_OK:请求被拒绝;
描述该服务用于读取 N-PDU 接收参数(BS,STmin)的当前值;
获取CanTp.h
功能需求描述
SWS_CanTp_00324如果开发中监测错误的功能开启了 ,函数 CanTp_ReadParameter 应该检查参数(parameter)的有效性。如果值 parameter 无效,函数应该汇报错误 CanTp.CANTP_E_PARAM_ID;
SWS_CanTp_00358如果开发中监测错误的功能开启了 ,函数 CanTp_ReadParameter 应该检查参数(id)的有效性。如果值 id 无效,函数应该汇报错误 CanTp.CANTP_E_INVALID_RX_ID;

4.1.9、Main Function

函数CanTp_MainFunction
语法void CanTp_MainFunction (void)
服务 ID0x06
描述调度 CanTp 的主函数;
获取CanTp.h
功能需求描述
SWS_CanTp_00164调度 CanTp 模块的主函数(调度的入口);
该主函数被 Schedule Manager(调度管理器)或者 Free Running Timer 模块根据其调用周期来调用,CanTp_MainFunction 与处理 CAN TP 时序参数 N_As, N_Bs, N_Cs, N_Ar, N_Br, N_Cr 和 STMmin 有关;

4.2、回调函数

4.2.1、CanTp_RxIndication

函数CanTp_RxIndication
语法void CanTp_RxIndication(PduIdType RxPduId, const PduInfoType* PduInfoPtr)
服务 ID0x42
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy相同的 PduId 不可重入,不同的可以重入(重入:可以由多个任务并发调用,而不影响直接结果);
参数(in)1、RxPduId,接收 PDU 的 ID;
2、PduInfoPtr,包含接收 PDU 的长度(SduLength)和指向存有 PDU 元数据的指针(SduDataPtr)
参数(inout)None
参数(out)None
返回值None
描述表明从下层的通信接口模块中接收到一个 PDU
获取CanTp.h

   CanIf 模块在成功接收一个 Rx CAN L-PDU后,应该回调该函数。接下来数据会在 CanTp 模块中通过 PDU 结构体 PduInfoType(该结构体中包含了 PDU 长度、指向元数据的指针) 被拷贝,由于Rx CAN L-PDU 数据并不是全局变量,因此该数据需要被分配到相应的 CAN Transport Layer 中。

功能需求描述
SWS_CanTp_00235CanTp_RxIndication 函数可以在中断中被回调;
SWS_CanTp_00322如果开发中监测错误的功能开启了,当 PduInfoPtr 为空指针时,那么 CanTp_RxIndication 函数能够汇报 CanTp.CANTP_E_PARAM_POINTER;
SWS_CanTp_00359如果开发中监测错误的功能开启了,那么 CanTp_RxIndication 函数能够检查函数参数 RxPduId 的有效性,如果无效,则应该汇报 CanTp.CANTP_E_INVALID_RX_ID;

4.2.2、CanTp_TxConfirmation

函数CanTp_TxConfirmation
语法void CanTp_TxConfirmation(PduIdType RxPduId, Std_ReturnType result)
服务 ID0x40
Sync/Async同步:同步通信指的是发送方在发送请求后会等待接收方的响应,期间发送方通常会被阻塞,无法执行其他任务。
Reentrancy相同的 PduId 不可重入,不同的可以重入(重入:可以由多个任务并发调用,而不影响直接结果);
参数(in)1、TxPduId,被发送 PDU 的 ID;
2、result,值为 E_OK:表示 PDU 被发送;值为 E_NOT_OK:发送 PDU 失败;
参数(inout)None
参数(out)None
返回值None
描述下层的通信接口模块确认了被发送的 PDU 的成功或者失败;
获取CanTp.h

   在 CanTp 模块通过 CAN 网络发送了报文(单帧/首帧/连续帧/流控帧),CanIf 模块应该调用 CanTp_TxConfirmation 函数。

功能需求描述
SWS_CanTp_00236CanTp_TxConfirmation 函数可以在中断中被回调;
SWS_CanTp_00360如果开发中监测错误的功能开启了,那么 CanTp_RxIndication 函数能够检查参数 TxPduId 的有效性。如果值无效,函数能够汇报 CanTp.CANTP_E_INVALID_TX_ID;

   更多内容可参考 CP_AUTOSAR_总目录,点击跳转

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值