Server-Side API
SomeIpAddEvent
CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpAddEvent
函数
该函数用于向由 SomeIpCreateProvidedServiceInstance 创建的提供方服务实例(Provided Service Instance)添加事件(Event)。
可通过 SomeIpTriggerEvent 触发事件发送,随后会调用 CAPL 回调函数 <OnSomeIpPrepareEvent>,应用程序可借此机会修改或更新 SOME/IP 事件的值。
事件可通过 SomeIpRemoveEvent 函数移除。
语法
capl
dword SomeIpAddEvent( dword psiHandle, dword eventId, char onPrepareEventCallback[] );
参数
- psiHandle:提供方服务实例的句柄。
- eventId:事件标识符。
- onPrepareEventCallback :CAPL 回调函数名称,详见 CAPL 回调
<OnSomeIpPrepareEvent>。
返回值
- 0 :发生错误,可通过
SomeIpGetLastError函数获取错误信息。 - >0:创建的事件句柄。
可用性
- 版本:8.1 及以上
- 限制:仅适用于仿真/测试环境
示例
capl
void Initialize()
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供方服务句柄
DWORD peg; // 提供方事件组句柄
DWORD pev; // 提供方事件句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 1);
// 创建事件并添加到事件组
pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
SomeIpAddEventToEventgroup(peg, pev);
// 设置事件周期性发送(周期 1000ms)
SomeIpSetProperty(pev, "CycleTimeMs", 1000);
}
void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)
{
// 事件发送前调用此函数,可在此处设置参数
}
SomeIpAddEventToEventgroup
CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpAddEventToEventgroup
函数
该函数用于将由 SomeIpAddEvent 创建的事件分配给由 SomeIpAddProvidedEventGroup 创建的事件组(Event Group)。
事件可通过 SomeIpRemoveEventFromEventGroup 从事件组中移除。
语法
capl
LONG SomeIpAddEventToEventgroup( dword pevgHandle, dword pevHandle );
参数
- pevgHandle :事件组句柄(详见
SomeIpAddProvidedEventGroup)。 - pevHandle :事件句柄(详见
SomeIpAddEvent)。
返回值
- 0:函数执行成功。
- >0:错误代码。
可用性
- 版本:8.1 及以上
- 限制:仅适用于仿真/测试环境
示例
capl
void Initialize()
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供方服务句柄
DWORD peg; // 提供方事件组句柄
DWORD pev; // 提供方事件句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 1);
// 创建事件并添加到事件组
pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
SomeIpAddEventToEventgroup(peg, pev);
// 设置事件周期性发送(周期 1000ms)
SomeIpSetProperty(pev, "CycleTimeMs", 1000);
}
void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)
{
// 事件发送前调用此函数,可在此处设置参数
}
SomeIpAddField
CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpAddField
函数
该函数用于向由 SomeIpCreateProvidedServiceInstance 创建的提供方服务实例添加字段(Field)。
字段内容可通过访问函数(如 SomeIpSetValue...)设置,但需调用 SomeIpCommitField 才能应用更改。
字段可通过 SomeIpRemoveField 函数移除。
语法
capl
dword SomeIpAddField( dword psiHandle, long notificationId, long getterId, long setterId );
参数
- psiHandle :提供方服务实例句柄(由
SomeIpCreateProvidedServiceInstance创建)。 - notificationId :字段通知标识符。若字段不支持通知,需设为 -1。
- getterId :字段读取方法(Getter)标识符。若消费者调用 Getter,默认返回字段内容;如需自定义行为,需通过
SomeIpAddMethod创建对应方法。若不支持 Getter,设为 -1。 - setterId :字段写入方法(Setter)标识符。若消费者调用 Setter,默认覆盖字段内容并返回响应;如需自定义行为,需通过
SomeIpAddMethod创建对应方法。若不支持 Setter,设为 -1。
返回值
- 0 :发生错误,可通过
SomeIpGetLastError获取错误信息。 - >0:创建的字段句柄。
可用性
- 版本:8.1 SP2 及以上
- 限制:仅适用于仿真/测试环境
示例
假设字段已在 CANoe 配置的 FIBEX 数据库中定义,通知 ID 为 30,Getter ID 为 31,Setter ID 为 32,数据类型为 UINT8:
capl
variables
{
DWORD gPfld_A; // 提供方字段句柄
}
void Initialize()
{
CONST DWORD FieldNotificationID = 30;
CONST DWORD FieldGetterID = 31;
CONST DWORD FieldSetterID = 32;
DWORD aep; // 应用端点句柄
DWORD psi; // 提供方服务句柄
DWORD peg; // 提供方事件组句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 12, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 300);
// 创建字段并添加到事件组
gPfld_A = SomeIpAddField(psi, FieldNotificationID, FieldGetterID, FieldSetterID);
SomeIpAddFieldToEventGroup(peg, gPfld_A);
}
on key 'n'
{
// 设置字段值(标准数据类型无需路径)
SomeIpSetValueDWord(gPfld_A, "", 100);
// 提交字段内容,触发通知发送
SomeIpCommitField(gPfld_A);
}
SomeIpAddFieldToEventgroup
CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpAddFieldToEventgroup
函数
该函数用于将由 SomeIpAddField 创建的字段分配给由 SomeIpAddProvidedEventGroup 创建的事件组。
字段可通过 SomeIpRemoveFieldFromEventGroup 从事件组中移除。
语法
capl
long SomeIpAddFieldToEventgroup( dword pevgHandle, dword pfHandle );
参数
- pevgHandle :事件组句柄(详见
SomeIpAddProvidedEventGroup)。 - pfHandle :字段句柄(详见
SomeIpAddField)。
返回值
- 0:函数执行成功。
- >0:错误代码。
可用性
- 版本:8.1 SP2 及以上
- 限制:仅适用于仿真/测试环境
示例
假设字段已在 CANoe 配置的 FIBEX 数据库中定义,通知 ID 为 30,Getter ID 为 31,Setter ID 为 32,数据类型为 UINT8:
capl
variables
{
DWORD gPfld_A; // 提供方字段句柄
}
void Initialize()
{
CONST DWORD FieldNotificationID = 30;
CONST DWORD FieldGetterID = 31;
CONST DWORD FieldSetterID = 32;
DWORD aep; // 应用端点句柄
DWORD psi; // 提供方服务句柄
DWORD peg; // 提供方事件组句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 12, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 300);
// 创建字段并添加到事件组
gPfld_A = SomeIpAddField(psi, FieldNotificationID, FieldGetterID, FieldSetterID);
SomeIpAddFieldToEventgroup(peg, gPfld_A);
}
on key 'n'
{
// 设置字段值(标准数据类型无需路径)
SomeIpSetValueDWord(gPfld_A, "", 100);
// 提交字段内容,触发通知发送
SomeIpCommitField(gPfld_A);
}
SomeIpAddMethod
CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpAddMethod
函数
该函数用于向由 SomeIpCreateProvidedServiceInstance 创建的提供方服务实例添加方法(Method)。
当客户端通过 SOME/IP 请求调用该方法时,会触发指定的 CAPL 回调函数。每个方法仅可注册一个回调函数。
注意:若使用形式 1 语法,客户端调用为异步模式,调用后不会阻塞等待响应。SOME/IP IL 不支持同步方法调用。
方法可通过 SomeIpRemoveMethod 函数移除。
语法
capl
// 形式 1
dword SomeIpAddMethod( dword psiHandle, dword methodId, char onMethodRequestCallback[] );
// 形式 2
dword SomeIpAddMethod( dword psiHandle, dword methodId, char onMethodRequestCallback[], long fireAndForget );
参数
- psiHandle:提供方服务实例句柄。
- methodId:方法标识符。
- onMethodRequestCallback :CAPL 回调函数名称,详见
<OnSomeIpMethodRequest>。 - fireAndForget :指定是否发送响应(形式 2):
- 1:不发送响应;
- 0:发送响应(默认)。
返回值
- 0 :发生错误,可通过
SomeIpGetLastError获取错误信息。 - >0:创建的方法句柄。
可用性
- 版本:8.1 及以上
- 限制:仅适用于仿真/测试环境
示例
假设方法已在 FIBEX 数据库中定义,方法 ID 为 31,含两个输入参数 Member_value1、Member_value2 和返回参数 Result:
capl
variables
{
DWORD gPm; // 提供方方法句柄
}
void Initialize()
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供方服务实例句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 11, 1);
// 创建方法
gPm = SomeIpAddMethod(psi, 31, "OnMethodRequest");
}
void OnMethodRequest(dword methodHandle, dword messageHandle, dword messageResponseHandle)
{
WORD val1; // 输入参数 1
WORD val2; // 输入参数 2
DWORD res; // 返回参数
// 获取请求参数
val1 = (WORD)SomeIpGetValueDWord(messageHandle, "Member_value1");
val2 = (WORD)SomeIpGetValueDWord(messageHandle, "Member_value2");
// 计算结果
res = val1 + val2;
// 设置响应值
SomeIpSetValueDWord(messageResponseHandle, "Result", res);
}
SomeIpAddProvidedEventGroup
CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpAddProvidedEventGroup
函数
该函数用于向由 SomeIpCreateProvidedServiceInstance 创建的提供方服务实例添加事件组(Event Group)。
可向事件组添加以下对象:
- 事件:通过
SomeIpAddEventToEventGroup - 字段:通过
SomeIpAddFieldToEventGroup
事件组可通过 SomeIpRemoveProvidedEventGroup 函数移除。
语法
capl
dword SomeIpAddProvidedEventGroup( dword psiHandle, dword eventGroupId );
参数
- psiHandle:提供方服务实例句柄。
- eventGroupId:事件组标识符。
返回值
- 0 :发生错误,可通过
SomeIpGetLastError获取错误信息。 - >0:创建的事件组句柄。
可用性
- 版本:8.1 及以上
- 限制:仅适用于仿真/测试环境
示例
capl
void Initialize()
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供方服务句柄
DWORD peg; // 提供方事件组句柄
DWORD pev; // 提供方事件句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 1);
// 创建事件并添加到事件组
pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
SomeIpAddEventToEventgroup(peg, pev);
// 设置事件周期性发送(周期 1000ms)
SomeIpSetProperty(pev, "CycleTimeMs", 1000);
}
void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)
{
// 事件发送前调用此函数,可在此处设置参数
}
SomeIpCommitField
功能
应用通过访问函数SomeIpSetValue...对字段执行的更改。
若字段值已变更,则发送该字段的通知消息。此操作需实际值发生变化,若设置的值与字段原有值相同,则不发送通知消息。
语法
long SomeIpCommitField( DWORD pfHandle );
参数
pfHandle:由SomeIpAddField创建的字段句柄。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1 SP2及以上
- 限制:仅适用于仿真/测试环境
示例
假设所用字段包含在CANoe配置关联的FIBEX数据库中,其通知ID为30、Getter ID为31、Setter ID为32,数据类型为标准类型(如UINT8)。
capl
variables
{
DWORD gPfld_A; // 提供的字段句柄
}
void Initialize()
{
CONST DWORD FieldNotificationID = 30;
CONST DWORD FieldGetterID = 31;
CONST DWORD FieldSetterID = 32;
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
DWORD peg; // 提供的事件组句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 12, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 300);
// 创建字段并添加到事件组
gPfld_A = SomeIpAddField(psi, FieldNotificationID, FieldGetterID, FieldSetterID);
SomeIpAddFieldToEventGroup(peg, gPfld_A);
}
on key 'n'
{
// 设置字段内容值(字段为通用数据类型,无需值路径)
SomeIpSetValueDWord(gPfld_A, "", 100);
// 提交字段内容......发送通知
SomeIpCommitField(gPfld_A);
}
SomeIpCreateProvidedServiceInstance
功能
创建提供的服务实例并将其添加到由SomeIpOpenLocalApplicationEndpoint创建的应用端点。可通过以下函数为服务实例分配对象:
- 事件组:SomeIpAddProvidedEventGroup
- 事件:SomeIpAddEvent
- 字段:SomeIpAddField
- 方法:SomeIpAddMethod
服务实例可通过SomeIpReleaseProvidedServiceInstance删除。
语法
capl
dword SomeIpCreateProvidedServiceInstance( dword aepHandle, dword serviceId, dword instanceId ); // 形式1
dword SomeIpCreateProvidedServiceInstance( dword aepHandle, dword serviceId, dword instanceId, dword majorVersion, dword minorVersion ); // 形式2
参数
aepHandle:应用端点句柄(见SomeIpOpenLocalApplicationEndpoint)serviceId:服务标识符instanceId:实例标识符majorVersion:服务接口主版本(形式2)minorVersion:服务接口次版本(形式2)
返回值
- 0:发生错误(可通过SomeIpGetLastError获取错误详情)
-
0:生成的提供的服务实例句柄
可用性
- 版本:8.1及以上(形式1),8.5 SP4及以上(形式2)
- 限制:仅适用于仿真/测试环境
示例
capl
void Initialize()
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
DWORD peg; // 提供的事件组句柄
DWORD pev; // 提供的事件句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 1);
// 创建事件并添加到事件组
pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
SomeIpAddEventToEventgroup(peg, pev);
// 设置事件周期性发送
SomeIpSetProperty(pev, "CycleTimeMs", 1000);
}
void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)
{
// 事件发送前调用此函数,可在此指定参数
}
SomeIpReleaseProvidedServiceInstance
功能
删除由SomeIpCreateProvidedServiceInstance创建的提供的服务实例。关闭服务实例时,所有关联对象(事件组、事件、字段、方法)也将被关闭。若重新创建服务实例,需重新创建所有对象。
语法
long SomeIpReleaseProvidedServiceInstance( dword psiHandle );
参数
psiHandle:待删除的提供的服务实例句柄(见SomeIpCreateProvidedServiceInstance)。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1及以上
- 限制:仅适用于仿真/测试环境
示例
capl
on key 't'
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// ... 执行操作 ...
// 关闭提供的服务实例
SomeIpReleaseProvidedServiceInstance(psi);
// ... 应用端点仍可继续使用 ...
}
SomeIpRemoveEvent
功能
从提供的服务实例中移除由SomeIpAddEvent添加的事件。移除后,SomeIpAddEvent注册的回调不再被调用,SOME/IP IL不再发送该事件。
语法
long SomeIpRemoveEvent( dword pevHandle );
参数
pevHandle:待移除事件的句柄(由SomeIpAddEvent创建)。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1及以上
- 限制:仅适用于仿真/测试环境
示例
capl
on key 't'
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
DWORD peg1; // 提供的事件组句柄1
DWORD peg2; // 提供的事件组句柄2
DWORD pev; // 提供的事件句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg1 = SomeIpAddProvidedEventGroup(psi, 1);
peg2 = SomeIpAddProvidedEventGroup(psi, 1);
// 创建事件并添加到两个事件组
pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
SomeIpAddEventToEventgroup(peg1, pev);
SomeIpAddEventToEventgroup(peg2, pev);
// 设置事件周期性发送
SomeIpSetProperty(pev, "CycleTimeMs", 1000);
// ... 执行操作 ...
// 移除事件
SomeIpRemoveEvent(pev);
// ... 事件从两个事件组中移除,不再发送 ...
// ... 应用端点、服务实例和事件组仍可使用 ...
}
SomeIpRemoveEventFromEventgroup
功能
从由SomeIpAddProvidedEventGroup创建的事件组中移除由SomeIpAddEvent创建的事件,事件本身不被删除。
语法
long SomeIpRemoveEventFromEventgroup( dword pevgHandle, dword pevHandle );
参数
pevgHandle:待移除事件的事件组句柄(见SomeIpAddProvidedEventGroup)。pevHandle:待移除的事件句柄(见SomeIpAddEvent)。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1及以上
- 限制:仅适用于仿真/测试环境
示例
capl
on key 't'
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
DWORD peg1; // 提供的事件组句柄1
DWORD peg2; // 提供的事件组句柄2
DWORD pev; // 提供的事件句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg1 = SomeIpAddProvidedEventGroup(psi, 1);
peg2 = SomeIpAddProvidedEventGroup(psi, 1);
// 创建事件并添加到两个事件组
pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
SomeIpAddEventToEventgroup(peg1, pev);
SomeIpAddEventToEventgroup(peg2, pev);
// 设置事件周期性发送
SomeIpSetProperty(pev, "CycleTimeMs", 1000);
// ... 执行操作 ...
// 从事件组1中移除事件
SomeIpRemoveEventFromEventgroup(peg1, pev);
// ... 事件仍分配给事件组2 ...
// ... 应用端点、服务实例和事件组仍可使用 ...
}
SomeIpRemoveField
功能
从提供的服务实例中移除字段。移除后,SomeIpAddField注册的通知回调不再被调用,SOME/IP IL不再发送字段通知,也不再响应字段Setter和Getter方法。
语法
long SomeIpRemoveField( DWORD pfHandle );
参数
pfHandle:待移除字段的句柄(由SomeIpAddField创建)。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1 SP2及以上
- 限制:仅适用于仿真/测试环境
示例
capl
variables
{
DWORD gPfld_A; // 提供的字段句柄
}
on start()
{
CONST DWORD FieldNotificationID = 30;
CONST DWORD FieldGetterID = 31;
CONST DWORD FieldSetterID = 32;
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
DWORD peg; // 提供的事件组句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 12, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 300);
// 创建字段并添加到事件组
gPfld_A = SomeIpAddField(psi, FieldNotificationID, FieldGetterID, FieldSetterID);
SomeIpAddFieldToEventGroup(peg, gPfld_A);
}
on key 'r'
{
SomeIpRemoveField(gPfld_A);
}
SomeIpRemoveFieldFromEventgroup
功能
从由SomeIpAddProvidedEventGroup创建的事件组中移除由SomeIpAddField创建的字段,字段本身不被删除。
语法
long SomeIpRemoveFieldFromEventgroup( dword pevgHandle, dword pfHandle );
参数
pevgHandle:待移除字段的事件组句柄(见SomeIpAddProvidedEventGroup)。pfHandle:待移除的字段句柄(见SomeIpAddField)。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1 SP2及以上
- 限制:仅适用于仿真/测试环境
示例
capl
variables
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
DWORD peg; // 提供的事件组句柄
DWORD pev; // 提供的事件句柄
}
on start()
{
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 1);
// 创建事件并添加到事件组
pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
SomeIpAddEventToEventgroup(peg, pev);
// 设置事件周期性发送
SomeIpSetProperty(pev, "CycleTimeMs", 1000);
}
void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)
{
// 事件发送前调用此函数,可在此指定参数
}
on key 'r'
{
SomeIpRemoveFieldFromEventGroup(peg, pev);
}
SomeIpRemoveMethod
功能
从提供的服务实例中移除方法。移除后,SomeIpAddMethod注册的回调不再被调用。
语法
long SomeIpRemoveMethod( dword methodHandle );
参数
methodHandle:待移除方法的句柄(见SomeIpAddMethod)。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1及以上
- 限制:仅适用于仿真/测试环境
示例
假设创建的方法包含在CANoe配置关联的FIBEX数据库中,方法ID为31,包含两个输入参数(Member_value1、Member_value2)和一个返回参数(Result)。
capl
variables
{
DWORD gPm; // 提供的方法句柄
}
void Initialize()
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务实例句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 11, 1);
// 创建方法
gPm = SomeIpAddMethod(psi, 31, "OnMethodRequest");
}
on key 'r'
{
// 移除方法
SomeIpRemoveMethod(gPm);
}
SomeIpRemoveProvidedEventGroup
功能
从提供的服务实例中移除由SomeIpAddProvidedEventGroup添加的事件组。关闭事件组时,分配给该组的事件和字段不会被删除。
语法
long SomeIpRemoveProvidedEventGroup( dword pevgHandle );
参数
pevgHandle:待移除的事件组句柄(见SomeIpAddProvidedEventGroup)。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1及以上
- 限制:仅适用于仿真/测试环境
示例
capl
on key 't'
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
DWORD peg; // 提供的事件组句柄
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 1);
// ... 执行操作 ...
// 移除事件组
SomeIpRemoveProvidedEventGroup(peg);
// ... 应用端点和服务实例仍可使用 ...
}
SomeIpTriggerEvent
功能
触发事件发送。之后,CAPL回调函数将被调用,应用可在事件发送给订阅者(通过多播)前修改或更新SOME/IP事件的值。
语法
long SomeIpTriggerEvent( dword pevHandle );
参数
pevHandle:待发送事件的句柄(需事先通过SomeIpAddEvent创建)。
返回值
- 0:函数执行成功。
-
0:错误代码。
可用性
- 版本:8.1及以上
- 限制:仅适用于仿真/测试环境
示例
capl
variables
{
DWORD aep; // 应用端点句柄
DWORD psi; // 提供的服务句柄
DWORD peg; // 提供的事件组句柄
DWORD pev; // 提供的事件句柄
}
on start()
{
// 打开应用端点
aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
// 创建服务实例
psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
// 创建事件组
peg = SomeIpAddProvidedEventGroup(psi, 1);
// 创建事件并添加到事件组
pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
SomeIpAddEventToEventgroup(peg, pev);
// 设置事件周期性发送
SomeIpSetProperty(pev, "CycleTimeMs", 1000);
}
void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)
{
// 事件发送前调用此函数,可在此指定参数
}
on key 't'
{
SomeIpTriggerEvent(pev);
}