1.位和字节的表示
使用以下表示法来表示八位字节
![](https://img.haomeiwen.com/i27529495/054aa876fa5ce8ea.png)
在这种表示法中,最左边的位(第7位)是最高有效位(MSB),最右边的位(第0位)是最低有效位(LSB)。
字节流按每行4字节排序,如下所示:
![](https://img.haomeiwen.com/i27529495/b8925f4135ff3f6d.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 }
网友评论