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 调用)