美文网首页
RTPS Types:GUID(The Globally Uni

RTPS Types:GUID(The Globally Uni

作者: 江河湖海洋 | 来源:发表于2024-01-25 17:00 被阅读0次

1.位和字节的表示
使用以下表示法来表示八位字节


image.png

在这种表示法中,最左边的位(第7位)是最高有效位(MSB),最右边的位(第0位)是最低有效位(LSB)。
字节流按每行4字节排序,如下所示:

image.png

在这种表示中,流中第一个出现的字节位于左边。最左边的部分是
第一个字节的MSB;最右边的位是第4字节的LSB

2.全局唯一标识符GUID(The Globally Unique Identifier )
GUID是存在于所有RTPS实体中的一个属性,它在DDS域中唯一地标识它们。PIM将GUID定义为由一个能够容纳12字节的GuidPrefix_t前缀和一个EntityId_t entityId能够容纳4个字节。
PSM将GuidPrefix_t映射到以下结构:
typedef octet GuidPrefix_t[12];
将PIM定义的保留常量GUIDPREFIX_UNKNOWN映射到
#define GUIDPREFIX_UNKNOWN {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
EntityId_t是Participant内Endpoint点的唯一标识。PSM将EntityId_t映射到以下结构:
typedef octet OctetArray3[3];
struct EntityId_t {
OctetArray3 entityKey;
octet entityKind;
};
PIM定义的保留常量ENTITYID_UNKNOWN映射为:
#define ENTITYID_UNKNOWN {{0x00, 0x00, 0x00}, 0x00}
EntityId_t中的entityKind字段编码实体的类型(Participant, Reader, Writer, Reader Group,
Writer Group) 以及该实体是内置实体,用户定义实体,还是特定于供应商的实体。

如果没有预先定义,中间件实现可以任意选择EntityId_t中的entityKey字段,只要生成的EntityId_t在Participant中是唯一的。
关于对象是内置实体、供应商特定实体还是用户定义实体的信息编码在entityKind的两位最高有效位中。这两个位设置为:
•' 8表示用户定义的实体。
•' 11 '表示内置实体。
•“01”表示供应商特定实体。

Entity类型的信息编码在entityKind字段的最后六位。表9.1提供了协议版本2.5中支持的entityKind可能值的完整列表。
Table 9.1 - entityKind octet of an EntityId_t

Kind of Entity User-defined Entity Built-in Entity
unknown 0x00 0xc0
Participant N/A 0xc1
Writer (with Key) 0x02 0xc2
Writer (no Key) 0x03 0xc3
Reader (no Key) 0x04 0xc4
Reader (with Key) 0x07 0xc7
Writer Group 0x08 0xc8
Reader Group 0x09 0xc9

3.预定义EntityIds
内置实体的实体id由RTPS协议完全预定义。

Entity Corresponding value for entityId_t (NAME = value)
participant ENTITYID_PARTICIPANT = {{00,00,01},c1}
SEDPbuiltinTopicWriter ENTITYID_SEDP_BUILTIN_TOPICS_ANNOUNCER ={{00,00,02},c2}
SEDPbuiltinTopicReader ENTITYID_SEDP_BUILTIN_TOPICS_DETECTOR ={{00,00,02},c7}
SEDPbuiltinPublicationsWriter ENTITYID_SEDP_BUILTIN_PUBLICATIONS_ANNOUNCER ={{00,00,03},c2}
SEDPbuiltinPublicationsReader ENTITYID_SEDP_BUILTIN_PUBLICATIONS_DETECTOR ={{00,00,03},c7}
SEDPbuiltinSubscriptionsWriter ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_ANNOUNCER ={{00,00,04},c2}
SEDPbuiltinSubscriptionsReader ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_DETECTOR ={{00,00,04},c7}
SPDPbuiltinParticipantWriter ENTITYID_SPDP_BUILTIN_PARTICIPANT_ANNOUNCER ={{00,01,00},c2}
SPDPbuiltinParticipantReader ENTITYID_SPDP_BUILTIN_PARTICIPANT_DETECTOR ={{00,01,00},c7}
BuiltinParticipantMessageWriter ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER ={{00,02,00},c2}
BuiltinParticipantMessageReader ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER= {{00,02,00},c7}

4.由其他规范保留的EntityIds

Specification Reserved EntityId
DDS-Security 1.1(see section 7.3.7.1) EntityIds that have both an entityKey in the range {ff, 00, 00} – {ff, ff, ff} and an entityKind in the range 0xc0-0xff (inclusive).
DDS-Security 1.1(see section 7.3.7.1) {{00, 02, 01}, c3} and {{00, 02, 01}, c4}
DDS-XTypes 1.2(see section 7.6.2.3.3) DDS-XTypes 1.3(see section 7.6.3.3.3) {{00, 03, 00}, c3}, {{00, 03, 00}, c4},{{00, 03, 01}, c3}, {{00, 03, 01}, c4}

5.协议2.2版本中已弃用的entityid

Entity Corresponding entityId
Client 0x05
Server 0x06
writerApplications {{00,00,01},c2}
readerApplications {{00,00,01},c7}
writerClients {{00,00,05},c2}
readerClients {{00,00,05},c7}
writerServices {{00,00,06},c2}
readerServices {{00,00,06},c7}
writerManagers {{00,00,07},c2}
readerManagers {{00,00,07},c7}
writerApplicationsSelf {{00,00,08},c2}

6.GUID_t的映射
PSM将GUID_t映射到以下结构:
struct GUID_t {
GuidPrefix_t guidPrefix;
EntityId_t entityId;
} ;
同一个DomainParticipant中的所有RTPS Entities共享相同的guidPrefix。
RTPS协议的实现应该设置guidPrefix的前两个字节来匹配分配给它们的vendorId。
RTPS协议的实现可以自由地使用合适的技术来为guidPrefix生成唯一的值,只要他们满足以下约束:
guidPrefix[0] = vendorId[0] guidPrefix[1] = vendorId[1]
RTPS 2.x的未来版本生成guidPrefix也应遵循此规则
前面两个字节的值按照上面指定的方式设置,唯一的目的是启用跨实现生成唯一的guidPrefix。此值不应用于其他目的。这确保了更改不会破坏与以前版本的协议的互操作性
PIM定义的保留常量GUID_UNKNOWN被映射为:
#define GUID_UNKNOWN{ GUIDPREFIX_UNKNOWN, ENTITYID_UNKNOWN }

相关文章

网友评论

      本文标题:RTPS Types:GUID(The Globally Uni

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