CAPL学习-SOME/IP交互层-端点类API函数

Endpoints

1. IP Address Byte Ordering

以太网 >> TCP/IP API >> IP地址字节顺序

说明

IPv4地址作为DWORD类型的规范对应小端序(Little Endian)表示。需将地址a.b.c.d表示为数值0x0d0c0b0a

示例

IP地址192.168.2.1的数值表示对应0x0102a8c0

注意
  • 若CAPL函数Write的格式中未指定数量,前导零会被忽略(例如显示为0x201A8C0而非0x0102a8c0)。反向计算十六进制字符数时需考虑此点,避免错误匹配。

  • 8位十六进制表示的格式应为:%.8x0x%.8x

  • 可使用CAPL函数SwapDWord将IPv4地址转换为可读形式:

    capl 复制代码
    dword addr = SwapDWord(0xc0a80102); // 转换后为可读的IP地址格式
IPv6地址表示

IPv6地址使用按可读顺序填充的字节数组。

示例

IPv6地址2001:DB8:85A3:8D3:1319:8A2E:370:7344的字节数组表示为:

capl 复制代码
{ 0x20, 0x01, 0x0d, 0xb8, 0x85, 0xa3, 0x08, 0xd3, 0x13, 0x19, 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x44 }

2.SomeIpCloseLocalApplicationEndpoint

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

函数功能

关闭通过SomeIpOpenLocalApplicationEndpoint打开的应用端点。关闭时,服务及分配的对象(事件组、事件、字段、方法)将被移除。若需重新打开端点,必须重新创建所有对象。

语法
capl 复制代码
LONG SomeIpCloseLocalApplicationEndpoint( dword aepHandle );
参数
  • aepHandle:待关闭的应用端点句柄(见SomeIpOpenLocalApplicationEndpoint)。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 版本:8.1及以上
  • 限制:仅以太网
  • 支持场景:仿真/测试环境
示例
capl 复制代码
on key 't'
{
  DWORD aep; // 应用端点句柄
  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002); 
  // ... 执行操作 ...
  // 关闭应用端点
  SomeIpCloseLocalApplicationEndpoint(aep); 
}

3.SomeIpOpenLocalApplicationEndpoint

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

函数功能

打开SOME/IP RPC消息的端点(表示一个 socket)。IP地址为当前接口的地址,由总线上下文确定。可通过SomeIpCreateProvidedServiceInstanceSomeIpCreateConsumedServiceInstance为端点分配服务,通过SomeIpCloseLocalApplicationEndpoint关闭端点。

语法
capl 复制代码
// 形式1
dword SomeIpOpenLocalApplicationEndpoint( dword transportProtocol, dword port ); 
// 形式2
dword SomeIpOpenLocalApplicationEndpoint( dword transportProtocol, dword port, dword ipv4Address ); 
// 形式3
dword SomeIpOpenLocalApplicationEndpoint( dword transportProtocol, dword port, byte ipv6Address[] ); 
// 形式4
dword SomeIpOpenLocalApplicationEndpoint( IP_Endpoint localIPEndpoint ); 
参数
  • transportProtocol :传输协议(6=TCP,17=UDP)。
  • port
    • UDP:可收发消息的端口。
    • TCP:单向收发端口(需双向通信时需创建两个端点)。
  • ipv4Address:绑定的IPv4地址(网络字节序)。
  • ipv6Address:绑定的IPv6地址数组(16字节,网络字节序)。
  • localIPEndpointIP_Endpoint类型对象,包含本地端点的地址/端口。
注意
  • 仅适用于节点TCP/IP栈;Windows TCP/IP栈无法通过总线上下文确定接口。
  • SOME/IP SD端点可通过SOME/IP IL属性配置(见SomeIpSetProperty)。
返回值
  • 0:发生错误(可通过SomeIpGetLastError获取详情)。
  • >0:创建的应用端点句柄。
可用性
  • 形式1:版本8.1及以上
  • 形式2-3:版本9.0及以上
  • 形式4:版本12.0 SP2及以上
  • 限制:仅以太网
  • 支持场景:仿真/测试环境
示例
capl 复制代码
void Initialize()
{
  DWORD aep;       // 应用端点句柄
  DWORD psi;       // 提供的服务实例句柄
  DWORD peg;       // 提供的事件组句柄
  DWORD pev;       // 提供的事件句柄
  
  // 打开应用端点(UDP协议,IP地址192.168.0.1,端口50002)
  aep = SomeIpOpenLocalApplicationEndpoint(IP_Endpoint(UDP:192.168.0.1:50002)); 
  
  // 创建服务实例(服务ID=10,实例ID=1)
  psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1); 
  
  // 创建事件组(事件组ID=1)
  peg = SomeIpAddProvidedEventGroup(psi, 1); 
  
  // 创建事件并添加到事件组
  pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1"); 
  SomeIpAddEventToEventgroup(peg, pev); 
  
  // 设置事件周期发送(周期1000ms)
  SomeIpSetProperty(pev, "CycleTimeMs", 1000); 
}

// 事件发送前的准备函数
void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)
{
  // 可在此处设置事件参数
}
相关推荐
郝学胜-神的一滴4 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
胖咕噜的稞达鸭4 小时前
网络基础:初识TCP/IP协议
网络·网络协议·tcp/ip
全栈工程师修炼指南4 小时前
Nginx | stream content 阶段:UDP 协议四层反向代理浅析与实践
运维·网络·网络协议·nginx·udp
cur1es5 小时前
【UDP的报文结构】
网络·网络协议·udp·md5
闲人编程5 小时前
使用FastAPI和WebSocket构建高性能实时聊天系统
websocket·网络协议·网络编程·fastapi·持久化·实时聊天·codecapsule
惊讶的猫5 小时前
OpenFeign(声明式HTTP客户端)
网络·网络协议·http·微服务·openfeign
心.c6 小时前
TCP协议深入解析
网络·网络协议·tcp/ip
摇滚侠6 小时前
HTTP 404 - No response body available
网络·网络协议·http
全栈工程师修炼指南6 小时前
Nginx | stream content 阶段:TCP 协议四层反向代理浅析与实践
运维·网络·网络协议·tcp/ip·nginx
CSCN新手听安6 小时前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json