DDS中idl文件解析
DDS中的idl
文件所代表的含义:
例如:
module HelloWorldData {
struct Mag {
long userID;
string message;
};
};
在这个文件中,定义了一个名为HelloWorldData
的模块,该模块包含了一个名为Mag的结构体。结构体Mag包含两个成员变量,一个是名为userID的长整型变量,另一个是名为message的字符串变量。
这个文件的作用是定义了DDS中的数据类型,用于在系统中传递和存储数据。通过定义结构体Mag,我们可以创建包含userID和message数据的实例,并将其用于DDS中的发布和订阅机制。
需要注意的是,这个文件中只定义了数据类型的结构,具体的数据处理逻辑和功能实现需要在其他文件中完成,例如生成的HelloWorldPublisher.cpp和HelloWorldSubscriber.cpp文件。
SOMEIP中的fidl文件解析
SOMEIP中.fidl
文件:
//package用于定义包名,表示该接口所属的包或命名空间,目的就是为了在不同的服务接口下不会冲突
package commonapi
//定义接口名称、版本号以及接口属性:该fidl文件定义了一个HelloWorld的接口
interface HelloWorld {
//version语句用于指定接口的版本号:major 1 minor 0 表示接口的主版本号为1,次版本号为0,也就是说该接口的版本号为1.0
version { major 1 minor 0 }
//定义了一个名为:YYYStruct 的结构体类型,包含两个UInt64类型的字段
struct YYYStruct{
UInt64 XXX_timestamp
UInt64 YYYTimeStamp
}
//定义了一个名为:XXXCTimeData的方法,用来发送当前UTC时间数据
//该方法的通信方式:通信不回复
//fireAndForget是请求不回复的这种通信方式的方法标识符
method XXXCTimeData fireAndForget{
in {
YYYStruct CurrentUtcTimeData
}
}
// 定义了一个方法用来获取初始化时间,方法名为:SoC1GetDataInitTime,该方法有输入参数和输出参数,用于传递数据
// 该方法的通信方式:通信回复
method SoC1GetDataInitTime{
in 通过参数将数据传递给别人,out 通过参数将数据带回来
// 输入参数为UInt8类型的getInitTime
in {
UInt8 getInitTime
}
// 输出参数为UInt64l类型的returnInitTime
out {
UInt64 returnInitTime
}
}
//定义了一个名为:sendUtcTimeData的广播消息,并且指定了该广播消息的输出参数为:名为CurrentUtcTimeData的YYYStruct类型的参数
broadcast sendUtcTimeData {
out {
YYYStruct CurrentUtcTimeData
}
}
}
protocol
: 定义协议名称和版本号。
interface
: 定义接口名称、版本号和接口属性。
method
: 定义方法名称和方法属性。
parameter
: 定义方法的输入参数。
returnvalue:
定义方法的返回值。
eventgroup
: 定义事件组名称、版本号和事件组属性。
event
: 定义事件名称和事件属性。
field
: 定义参数或返回值的字段。
enumeration
: 定义枚举类型。
constant:
定义常量。
struct
: 定义结构体类型。
array
: 定义数组类型。
map
: 定义映射类型。
set
: 定义集合类型。
function
: 定义函数类型。
每个语句可以有不同的属性和参数,用于描述接口、方法、参数、返回值等的详细信息。
使用这些语句可以定义出完整的服务接口,包括接口定义、方法定义、参数定义等等。
这些定义可以被编译器解析并生成对应的代码,用于实现和使用服务接口。
idl文件与idlc文件结合产生.cpp .hpp文件
idlc文件的作用以及如何与idl文件结合产生.cpp .hpp文件可以参考此文:
C版本CycloneDDS源码在X86架构Linux系统上编译产生idlc执行文件的作用示例(cyclonedds-master/build/bin/idlc)
# fidl文件与code_generator结合产生 .hpp文件
commonapi someip支持数据序列化,所以使用的工具为:commonapi_core_generator_Linux_x86_64
执行指令:
./commonapi_core_generator_Linux_x86_64 -dest ../../src_gen -sk ../../HelloWorld.fidl
,其中:
-desk < path >
:指定产生的头文件.hpp存放的路径
-sk
:指定吃啥呢还给你头文件的命名规则,../../HelloWorld.fidl
是指以这个目录下的fidl文件的名去命名,即头文件为HelloWorld.hpp