CAPL学习-SOME/IP交互层-底层API函数

Low-level API

SomeIpCreateMessage

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpCreateMessage

函数

该函数用于创建SOME/IP消息,创建后的消息可通过 SomeIpOutputMessage 或 SomeIpPostMessage 发送。

语法
capl 复制代码
dword SomeIpCreateMessage(dword messageId, dword requestId, dword protocolVersion, dword interfaceVersion, dword messageType, dword returnCode); // 形式1  
dword SomeIpCreateMessage(dword bufferLength, byte buffer[]); // 形式2  
dword SomeIpCreateMessage(dword bufferLength, byte buffer[], dword offset); // 形式3  
详细说明
  • 形式1

    若CANoe配置中已分配FIBEX数据库,将检查消息ID(messageId参数)是否存在于该数据库中。

    • 若存在:根据数据库描述创建负载并初始化为0,SOME/IP消息头的长度字段自动设置。
    • 若不存在:仅创建SOME/IP消息头,需通过 SomeIpSetData 创建负载;若无负载,需在 SomeIpSetData 中指定空负载。
  • 形式2

    创建时,消息头长度从 buffer 参数指定的数据流中获取,不纠正错误的长度值。

    若后续通过 SomeIpGetValue... 或 SomeIpSetValue... 函数成功访问消息,且FIBEX数据库中存在该消息ID,则消息长度将根据数据库自动调整。

  • 形式3

    可通过 offset 参数指定字节流中SOME/IP消息的起始位置(单位:字节,见示例代码)。

创建的消息可通过 SomeIpReleaseMessage 删除。

参数
  • messageId:SOME/IP消息的消息标识符。
  • requestId:SOME/IP消息头的请求标识符。
  • protocolVersion:SOME/IP消息头的协议版本。
  • interfaceVersion:SOME/IP消息头的接口版本。
  • messageType:SOME/IP消息头的消息类型。
  • returnCode:SOME/IP消息头的返回码。
  • bufferLength :buffer 参数的长度(字节)。
  • buffer:包含完整SOME/IP消息字节流的缓冲区。
  • offset:字节流中SOME/IP消息的起始偏移量。
返回值
  • 0 :发生错误,可通过 SomeIpGetLastError 函数获取错误信息。
  • >0:创建的消息句柄。
可用性
  • 版本:8.1及以上
  • 限制:仅适用于仿真/测试环境
示例
capl 复制代码
on key 's'  
{  
  DWORD messageId = 0x12340004; // 服务ID = 0x1234,方法ID = 0x0004  
  DWORD requestId = 0; // 客户端ID = 0,会话ID = 0  
  DWORD protocolVersion = 1;  
  DWORD interfaceVersion = 1;  
  DWORD messageType = 0x2; // 通知消息  
  DWORD returnCode = 0; // 未使用  
  DWORD aep = 0; // 应用端点句柄  
  DWORD messageHandle = 0; // 创建的SOME/IP消息句柄  
  BYTE payload[5]; // 消息负载  
  DWORD count = 0; // 计数器  

  // 初始化负载  
  =0  
 payloadcount++] x1  
 payload[count++] = 0x22;  
  payload[count++] = 0x33;  
  payload[count++] = 0x44;  
  payload[count++] = 0x55;  

  // 打开应用端点  
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);  

  // 创建SOME/IP消息并设置负载  
  messageHandle = SomeIpCreateMessage(messageId, requestId, protocolVersion, interfaceVersion, messageType, returnCode);  
  SomeIpSetData(messageHandle, elcount(payload), payload);  

  // 发送SOME/IP消息  
  SomeIpOutputMessage(aep, 0xFFFFFFFF, 40001, messageHandle);  

  // 释放SOME/IP消息  
  SomeIpReleaseMessage(messageHandle);  
}  

SomeIpOutputMessage

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpOutputMessage

函数

该函数用于立即发送SOME/IP消息。所有通过 SomeIpPostMessage 预先缓冲的消息(若源和目标相同)将与当前消息一同发送。

语法
capl 复制代码
long SomeIpOutputMessage(dword aepHandle, dword remoteIPv4Address, dword remotePort, dword messageHandle); // 形式1  
long SomeIpOutputMessage(dword aepHandle, IP_Endpoint remoteIPEndpoint, dword messageHandle); // 形式2  
参数
  • aepHandle:本地应用端点句柄。
  • remoteIPv4Address:目标IPv4地址(网络字节序)。
  • remotePort:目标UDP/TCP端口号。
  • remoteIPEndpoint :包含远程端点地址/端口的 IP_Endpoint 对象。
  • messageHandle :通过 SomeIpCreateMessage 创建的消息句柄。
返回值
  • 0:执行成功。
  • >0:错误代码。
可用性
  • 形式1:8.1及以上
  • 形式2:12.0 SP2及以上
  • 限制:仅适用于仿真/测试环境
示例

(同 SomeIpCreateMessage 示例,包含 SomeIpOutputMessage 调用)

SomeIpPostMessage

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpPostMessage

函数

该函数用于缓冲SOME/IP消息。所有缓冲的消息将在当前CAPL函数退出后发送;若同一CAPL函数中多次调用 SomeIpPostMessage,则具有相同源和目标的消息将被合并发送。调用 SomeIpOutputMessage 也会触发缓冲消息的发送。

语法
capl 复制代码
long SomeIpPostMessage(dword aepHandle, dword remoteIPv4Address, dword remotePort, dword messageHandle); // 形式1  
long SomeIpPostMessage(dword aepHandle, IP_Endpoint remoteIPEndpoint, dword messageHandle); // 形式2  
参数

(同 SomeIpOutputMessage)

返回值
  • 0:执行成功。
  • >0:错误代码。
可用性
  • 形式1:8.1及以上
  • 形式2:12.0 SP2及以上
  • 限制:仅适用于仿真/测试环境
示例
capl 复制代码
on key 's'  
{  
  // ...(省略与SomeIpCreateMessage示例相同的初始化代码)  

  // 缓冲两条消息  
  SomeIpPostMessage(aep, 0xFFFFFFFF, 40002, messageHandle);  
  SomeIpPostMessage(aep, 0xFFFFFFFF, 40001, messageHandle);  

  // CAPL函数退出后,两条缓冲消息将被发送  
}  

SomeIpReleaseMessage

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpReleaseMessage

函数

该函数用于删除通过 SomeIpCreateMessage 创建的消息。

语法
capl 复制代码
long SomeIpReleaseMessage(dword messageHandle);  
参数
  • messageHandle :通过 SomeIpCreateMessage 创建的消息句柄。
返回值
  • 0:执行成功。
  • >0:错误代码。
可用性
  • 版本:8.1及以上
  • 限制:仅适用于仿真/测试环境
示例

(同 SomeIpCreateMessage 示例,包含 SomeIpReleaseMessage 调用)

相关推荐
花间相见8 小时前
【计算基础|网络14】网络层:IP、ICMP 与 ping
网络·网络协议·tcp/ip
kaixin_啊啊8 小时前
【用于更准确 G×E 基因组预测的大规模作物数据集与基于深度学习的多模态融合框架】论文学习
人工智能·深度学习·学习
xier_ran8 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
OnlineProxy8 小时前
为 LangChain 和 CrewAI 构建自定义工具:将代理 IP 轮换封装至智能体函数中
网络协议·tcp/ip·langchain
别动我齐刘海10 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
m4Rk_11 小时前
【论文阅读】Agent 记忆机制(99):PrisMem——从整体分数搜索走向能力驱动的记忆自进化
论文阅读·人工智能·学习·开源·github
睿智の男孩11 小时前
MIG IP核对DDR3的输出时序分析记录
网络·网络协议·tcp/ip
PC2005-cloud12 小时前
Mysql学习笔记:InnoDB Cluster 集群从零搭建实战,基于 Docker 实现高可用读写分离架构
笔记·学习·mysql
小陈phd13 小时前
深入理解agent学习笔记(七)——动态提示词与Skills
笔记·学习
我命由我1234513 小时前
田野笔记极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法