美文网首页
CommonAPI C++(fdepl)介绍

CommonAPI C++(fdepl)介绍

作者: Lee_5566 | 来源:发表于2021-12-08 11:33 被阅读0次
image.png

fdepl文件

定义独立于中间件(vSomeIp/D-Bus)的C++ API的一个问题是,需要针对API的各个部分使用不同的配置参数,这部分需要取决于中间件。例如,参数,数组或字符串的最大长度等。

Franca IDL可以根据中间件或特定于平台的部署模型(*.fdepl文件)中使用的中间件来指定部署参数。
一个明确的目标是,针对Common API编写的应用程序可以与不同的Common API IPC后端链接,而无需更改应用程序代码。

因此,有一个重要的隐性限制:Franca IDL(*.fidl文件)中定义的接口只与CommonAPI以及用户调用相关。专用于IPC后端的部署模型(.fdepl)不得影响所生成的API。但是允许使用非特定的部署模型。

image.png

fdepl文件的基本构成

类别1 类别2 说明 举例
for interface 对接口进行一些部署,设置ServiceID值,也可以设置枚举支持的类型 *Reliable = false表示使用UDP协议,Reliable = true表示使用TCP协议
attribute 为属性的getter, setter等方法提供ID值 attribute x { SomeIpGetterID = 3000 SomeIpSetterID = 3001 SomeIpNotifierID = 33010 SomeIpEventGroups = { 33010 } SomeIpGetterReliable = false SomeIpSetterReliable = false SomeIpNotifierReliable = false}
method 设置method的ID值,并设置输入输出字符串类型的编码/解码格式;也可以订阅方法调用的超时 method foo { SomeIpMethodID = 30000 SomeIpReliable = false in { x2 { SomeIpStringEncoding = utf16le } } out { y2 {SomeIpStringEncoding =utf16le} } }
broadcast 设置广播事件以及广播事件组的ID值,并设置输出字符串类型的编码/解码格式 broadcast myStatus { SomeIpEventID = 33020 SomeIpEventGroups = { 33020 } }
array 定义数组的长度 SomeIpArrayLengthWidth = 2
enumeration 设置枚举的数据类型 EnumBackingType = UInt64
for provider 提供实例
instance 设置实例名称以及实例ID值,并设置实例的地址和端口号 instance commonapi.mthd.Method { InstanceId = “commonapi.mthd.Method” SomeIpInstanceID = 22136 SomeIpUnicastAddress = “192.168.0.2” SomeIpReliableUnicastPort = 30500 SomeIpUnreliableUnicastPort = 30501 }
for typeCollection 用户自己定义的各种数据类型的集合
array 定义数组的长度 SomeIpArrayLengthWidth = 2
enumeration 设置枚举的数据类型 EnumBackingType = UInt64

使用实例展示:

/* Copyright (C) 2015 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
import "platform:/plugin/org.genivi.commonapi.someip/deployment/CommonAPI-4-SOMEIP_deployment_spec.fdepl"
import "E01HelloWorld.fidl"

define org.genivi.commonapi.someip.deployment for interface commonapi.examples.E01HelloWorld {
    SomeIpServiceID = 4660

    method sayHello {
        SomeIpMethodID = 30000
        SomeIpReliable = true
        
        in {
            name {
                SomeIpStringEncoding = utf16le
            }
        }
    }
}

define org.genivi.commonapi.someip.deployment for provider as Service {
    instance commonapi.examples.E01HelloWorld {
        InstanceId = "commonapi.examples.HelloWorld"
        
        SomeIpInstanceID = 22136
    
        SomeIpUnicastAddress = "192.168.0.2"
        SomeIpReliableUnicastPort = 30499
        SomeIpUnreliableUnicastPort = 30499
    }
}

for interface

for interface,对应于*.fidl文件中的interface,在这里面主要是配置中间件的ServiceID,以及其他method,broadcast,attribute等使用的methodID,eventID值等。

设置ServiceID:

SomeIpServiceID = 4660

也可以在此定义整个接口的CommonAPI C++级别上定义枚举支持的类型,默认是UInt32:

DefaultEnumBackingType: { UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64 }  (default: UInt32);

例如:

DefaultEnumBackingType = UInt8
attribute

为每个属性所使用的getter, setter等方法设置ID值,并设置这些方法的可靠性。

image.png
method

为方法method设置methodID值,并设置可靠性,

也可以为in, out的输入输出参数的字符串类型设置编码/解码格式,也可以不设置,从而使用默认设置。

image.png

也可以在此处设置超时:

Timeout : Integer (default: 0);

例如:

Timeout = 1
broadcast

为broadcast事件设置EventID值,Event Groups值(这个是将自己想要划分为一组的事件ID写在一起),设置可靠性,也可以定义out参数里面字符串类型的编码/解码格式。

image.png

for typeCollection

array

SomeIpArrayLengthWidth是决定长度字段的大小,表示数组序列化时在数组前面用于表示数组长度的字节数。

即SomeIpArrayLengthWidth =2表示数组在序列化时,前面需要加2个字节,用于表示数组的长度,允许的值是0、1、2、4。

0表示没有长度字段。

array myArray {
SomeIpArrayLengthWidth = 2
}
enumeration

可以在此设置枚举使用的数据类型:

EnumBackingType : {UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64} (optional);

例如:

EnumBackingType = UInt64
for provider

在此提供程序所依赖的所有服务实例(如果有),并为实例设置名称,ID值以及IP地址和端口号。

image.png

相关文章

  • CommonAPI C++(fdepl)介绍

    fdepl文件 定义独立于中间件(vSomeIp/D-Bus)的C++ API的一个问题是,需要针对API的各个部...

  • CommonAPI入门

    CommonAPI介绍 CommonAPI C++是一个标准化的C++ API规范,用于开发分布式的应用程序。这些...

  • CommonAPI C++(fidl)介绍

    CommonAPI的基础部分 第一部分是由CommonAPI代码生成器生成的基于Franca的部分,也就是根据*....

  • CommonAPI 介绍

    CommonAPI CommonAPI C++是用于开发分布式应用程序的标准C++ API规范,该分布式应用程序通...

  • Ubuntu 16.04 安装opencv的各种方法(含open

    本文主要介绍安装opencv C++接口和python接口的几种方法。 首先介绍C++接口的,然后介绍Python...

  • 宽德资本一面面经(3.30)

    通过同学介绍去面的。 自我介绍 C++ 因为我不会C++,因此C++的问题我有点忘了,只能大概凭印象写下。 定义一...

  • AOSP 使用 CommonAPI/SomeIP流水账

    SOME/IP可以在单独使用,也可以结合CommonAPI/SOMEIP使用(更加方便) 依赖项 1、boost ...

  • 抽象工厂模式创建对象

    结合反射应用,使用class.forName反射创建对象,通过泛型约束参数类型新产品只需实现CommonAPI即可...

  • C++ 程序设计语言(特别版 扫描版).pdf

    【下载地址】 《C++程序设计语言》介绍了标准C++以及由C++所支持的关键性编程技术和设计技术。标准C++较以前...

  • 南理工预推免面试

    首先 介绍你的校园(没准备英文就中文),介绍一门你学的课程(最好是操作系统) 学过C++吗?C++ include...

网友评论

      本文标题:CommonAPI C++(fdepl)介绍

      本文链接:https://www.haomeiwen.com/subject/dnazxrtx.html