Blind implementation of READ/TAKE DDS READER operations
Finalized DDS Reader interface. Implemented read/take, read_next_sample/take_next_sample, read_instance/take_instance, read_next_instance/take_next_instance operations. Instance Get operations were made generic to allow returning 2 variants of instance data.
This commit is contained in:
parent
c3b656c654
commit
164bd508c1
13
src/REF.txt
13
src/REF.txt
@ -459,14 +459,15 @@ STATUS INFO
|
|||||||
-----------
|
-----------
|
||||||
31............24..............16..............8...............0
|
31............24..............16..............8...............0
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-----------------------------------------------------+-+-+-+-+
|
+---------------------------------------------------+-+-+-+-+-+
|
||||||
| UNUSED |V|L|W|D|
|
| UNUSED |M|V|L|W|D|
|
||||||
+-----------------------------------------------------+-+-+-+-+
|
+---------------------------------------------------+-+-+-+-+-+
|
||||||
|
|
||||||
D...NOT_ALIVE_DISPOSED
|
D...NOT_ALIVE_DISPOSED
|
||||||
W...NOT_ALIVE_NO_WRITERS
|
W...NOT_ALIVE_NO_WRITERS
|
||||||
L...LIVELINESS FLAG
|
L...LIVELINESS FLAG
|
||||||
V...VIEW STATE
|
V...VIEW STATE
|
||||||
|
M...MARK
|
||||||
|
|
||||||
|
|
||||||
OUTPUT DATA
|
OUTPUT DATA
|
||||||
@ -608,6 +609,12 @@ The act of reading a sample sets its sample_state to READ. If the sample belongs
|
|||||||
generation of the instance, it will also set the view_state of the instance to NOT_NEW. It will not
|
generation of the instance, it will also set the view_state of the instance to NOT_NEW. It will not
|
||||||
affect the instance_state of the instance.
|
affect the instance_state of the instance.
|
||||||
|
|
||||||
|
https://community.rti.com/static/documentation/connext-dds/5.2.0/doc/manuals/connext_dds/html_files/RTI_ConnextDDS_CoreLibraries_UsersManual/Content/UsersManual/DESTINATION_ORDER_QosPolicy.htm#sending_2410472787_644578
|
||||||
|
Data will be delivered by a DataReader in the order in which it was sent. If data arrives on the network
|
||||||
|
with a source timestamp earlier than the source timestamp of the last data delivered, the new data will
|
||||||
|
be dropped. This ordering therefore works best when system clocks are relatively synchronized among
|
||||||
|
writing machines.
|
||||||
|
|
||||||
INVALIDATION
|
INVALIDATION
|
||||||
============
|
============
|
||||||
|
|
||||||
|
|||||||
78
src/TODO.txt
78
src/TODO.txt
@ -63,14 +63,11 @@
|
|||||||
* What happens if we get a sample with a source timestamp earlier than the last sample that was accessed by the DataReader when using DESTINATION ORDER BY_SOURCE_TIMESTAMP? Is the smaple dropped?
|
* What happens if we get a sample with a source timestamp earlier than the last sample that was accessed by the DataReader when using DESTINATION ORDER BY_SOURCE_TIMESTAMP? Is the smaple dropped?
|
||||||
* The spec does not define the serialized Key (KEY=1 DATA MESSAGE)
|
* The spec does not define the serialized Key (KEY=1 DATA MESSAGE)
|
||||||
- fast-rtps assumes it is the Key Hash
|
- fast-rtps assumes it is the Key Hash
|
||||||
-
|
|
||||||
* Currently the builtin-endpoint does only acknowledge SN, but does not negatively acknowledge any SN (Bitamp is always empty).
|
* Currently the builtin-endpoint does only acknowledge SN, but does not negatively acknowledge any SN (Bitamp is always empty).
|
||||||
A writer usually responds with repqirs only to negative acknowledgements.
|
A writer usually responds with repqirs only to negative acknowledgements.
|
||||||
* Currently a RTPS Writer with DURABILITY TARNSIENT_LOCAL does send historical data to all matched readrs, not depensing if they are VOLATILE or TRANSIENT_LOCAL.
|
* Currently a RTPS Writer with DURABILITY TARNSIENT_LOCAL does send historical data to all matched readers, not depending if they are VOLATILE or TRANSIENT_LOCAL.
|
||||||
* Assert Heartbeat period > Heartbeat Suppression Period
|
* Assert Heartbeat period > Heartbeat Suppression Period
|
||||||
* Can I request (NACK) SNs that were NOT announced by the writer (> last_sn in Heartbeat)?
|
* Can I request (NACK) SNs that were NOT announced by the writer (> last_sn in Heartbeat)?
|
||||||
* As it currently works, if a new sample is received and the QOS is not KEEP_ALL/RELIABLE, the oldest sample is removed.
|
|
||||||
In case of DESTINATION_ORDER = BY_SOURCE_TIMESTAMP it could happen that we effectively removed a sample that had a source timestamp later than the one we received.
|
|
||||||
|
|
||||||
* Fast-RTPS doen not follow DDSI-RTPS Specification
|
* Fast-RTPS doen not follow DDSI-RTPS Specification
|
||||||
- Open Github Issue
|
- Open Github Issue
|
||||||
@ -149,20 +146,23 @@ DESIGN DECISIONS
|
|||||||
Use the lowest bit of the Heartbeat/Acknack Deadline stored in the Participant Data to differentiate
|
Use the lowest bit of the Heartbeat/Acknack Deadline stored in the Participant Data to differentiate
|
||||||
between Delay and Suppression. This reduces the resolution from 0.23 ns to 0.47 ns
|
between Delay and Suppression. This reduces the resolution from 0.23 ns to 0.47 ns
|
||||||
|
|
||||||
* Originally we stored the mask of local matching endpoints in the memory frame of the remote endpoint in order
|
* Originally we stored the mask of local matching endpoints in the memory frame of the remote endpoint
|
||||||
to be able to send MATCH frames only to new matches, and UNMATCH frames only to previously matched local endpoints.
|
in order to be able to send MATCH frames only to new matches, and UNMATCH frames only to previously
|
||||||
This decision was reverted, and we just sent MATCH frames to the currently matched local endpoints (non depending on if they are already matched)
|
matched local endpoints. This decision was reverted, and we just sent MATCH frames to the currently
|
||||||
and UNMATCH frames to the rest of the local endpoints (non depending on if they were previously matched).
|
matched local endpoints (non depending on if they are already matched) and UNMATCH frames to the
|
||||||
So we basically push the responsibility to the local endpoints, which have to handle this situations accordingly.
|
rest of the local endpoints (non depending on if they were previously matched).
|
||||||
Since META traffic is not supposed to be generated as often , this should not produce any significant overhead.
|
So we basically push the responsibility to the local endpoints, which have to handle this situations
|
||||||
As optimization, on new matched remote endpoints UNMATCH frames can be ignored.
|
accordingly. Since META traffic is not supposed to be generated as often, this should not produce
|
||||||
|
any significant overhead. As optimization, on new matched remote endpoints UNMATCH frames can be
|
||||||
|
ignored.
|
||||||
|
|
||||||
* The HEARTBEATs are sent out together with the liveliness assertions. This adds a 96-Byte overhead to the output RTPS Message.
|
* The HEARTBEATs are sent out together with the liveliness assertions. This adds a 96-Byte overhead
|
||||||
This was done to prevent having to loop through the memory to find remote participant destination more than once.
|
to the output RTPS Message. This was done to prevent having to loop through the memory to find
|
||||||
|
remote participant destination more than once.
|
||||||
|
|
||||||
* The Publisher, Subscriber, and Message Data is written on separate RTPS Messages, even though they are
|
* The Publisher, Subscriber, and Message Data is written on separate RTPS Messages, even though they are
|
||||||
sent simutanously. This decision was made to support as many local Endpoints as possible. We could
|
sent simutanously. This decision was made to support as many local Endpoints as possible. We could
|
||||||
make a compile-time if check and sent them in the same RTPS Message/UDP Packet, but the overhead is
|
make a compile-time check and sent them in the same RTPS Message/UDP Packet, but the overhead is
|
||||||
quite small and not worth the hassle.
|
quite small and not worth the hassle.
|
||||||
|
|
||||||
* Even though the Reader does not need to keep track of received SN with respect to each Writer with
|
* Even though the Reader does not need to keep track of received SN with respect to each Writer with
|
||||||
@ -176,29 +176,31 @@ DESIGN DECISIONS
|
|||||||
In order to acoomodate for that, we could store the lowest (and possibly highest) SN of a requested
|
In order to acoomodate for that, we could store the lowest (and possibly highest) SN of a requested
|
||||||
lost SN and always send ALL GAPs in that range.
|
lost SN and always send ALL GAPs in that range.
|
||||||
|
|
||||||
* The meta_data (sample info) of a cache change is fixed size, and a cache change may be connected to data (payload),
|
* The meta_data (sample info) of a cache change is fixed size, and a cache change may be connected to
|
||||||
which may be variable in size. For this reason, we store the cache change and payload in separate memories.
|
data (payload), which may be variable in size. For this reason, we store the cache change and
|
||||||
The payload size may either be fixed (in which case the memory frame sizes are adjusted according to that),
|
payload in separate memories. The payload size may either be fixed (in which case the memory frame
|
||||||
or may be variable, in which case the payload is stored in a linked list of predefined sized memory frames.
|
sizes are adjusted according to that), or may be variable, in which case the payload is stored in
|
||||||
The first word of a payload contains the address of the next linked memory frame. If this is the last frame
|
a linked list of predefined sized memory frames. The first word of a payload contains the address
|
||||||
(or if the payload is static and there are no linked frames), the address is MAX_ADDRESS.
|
of the next linked memory frame. If this is the last frame (or if the payload is static and there
|
||||||
The last bit of this address is the "occupied" bit. This bit signifies if the memory frame is used or free,
|
are no linked frames), the address is MAX_ADDRESS. The last bit of this address is the "occupied"
|
||||||
and is used for the insert operation to find a new empty slot. This in effect means that all frame sizes
|
bit. This bit signifies if the memory frame is used or free, and is used for the insert operation
|
||||||
have to be a multiple of 2 (all frame addresses have to be aligned to 2).
|
to find a new empty slot. This in effect means that all frame sizes have to be a multiple of 2
|
||||||
|
(all frame addresses have to be aligned to 2).
|
||||||
|
|
||||||
* !REJECTED! The History Cache (HC) is the interface between RTPS and DDS. The History Cache contains the Sample Info
|
* !REJECTED! The History Cache (HC) is the interface between RTPS and DDS. The History Cache contains
|
||||||
and Payload memories. The HC has two input "sides", one is connected to the DDS and one to the RTPS entity.
|
the Sample Info and Payload memories. The HC has two input "sides", one is connected to the DDS
|
||||||
Housing the memories inside the HC entity and abstracting the direct memory address via opcode requests
|
and one to the RTPS entity. Housing the memories inside the HC entity and abstracting the direct
|
||||||
allows the memory interface to be replaced in future (e.g. AXI Lite).
|
memory address via opcode requests allows the memory interface to be replaced in future (e.g. AXI
|
||||||
Since all memory operations are handled by the same entity, this allows some state keeping to improve
|
Lite). Since all memory operations are handled by the same entity, this allows some state keeping
|
||||||
memory bandwidth. More specifically the "linked list" paradigm can be extended to also reference empty
|
to improve memory bandwidth. More specifically the "linked list" paradigm can be extended to also
|
||||||
slots (and next unread slots), to allow selecting empty slots without iterating through the whole memory.
|
reference empty slots (and next unread slots), to allow selecting empty slots without iterating
|
||||||
Originally the memory was to be implemented in a true dual port fashion, and two seperate procoesses
|
through the whole memory. Originally the memory was to be implemented in a true dual port fashion,
|
||||||
would each satisfy the requests from one input side. This would allow concurrent RTPS and DDS requests
|
and two seperate procoesses would each satisfy the requests from one input side. This would allow
|
||||||
to be handled. The write concurrency (add and remove change) does not allow for state keeping (first
|
concurrent RTPS and DDS requests to be handled. The write concurrency (add and remove change) does
|
||||||
empty slot address), since it is reset by the "adding" side, by set by the "removing" side.
|
not allow for state keeping (first empty slot address), since it is reset by the "adding" side, by
|
||||||
Because of this, it was decided against concurrent input handling in light of the fact that the history
|
set by the "removing" side. Because of this, it was decided against concurrent input handling in
|
||||||
cache will be most commonly quite large in size, and iterating through all
|
light of the fact that the history cache will be most commonly quite large in size, and iterating
|
||||||
|
through all...
|
||||||
|
|
||||||
* Since most of the DDS QoS need information that is directly available to the History Cache (HC),
|
* Since most of the DDS QoS need information that is directly available to the History Cache (HC),
|
||||||
it makes sense to integrate most of the DDS functionality directly into the HC to save up space
|
it makes sense to integrate most of the DDS functionality directly into the HC to save up space
|
||||||
@ -222,10 +224,8 @@ PROTOCOL UNCOMPLIANCE
|
|||||||
-> No validity check
|
-> No validity check
|
||||||
* Inline QoS validated in Endpoint
|
* Inline QoS validated in Endpoint
|
||||||
-> Cannot invalidate Rest of Message/Packet
|
-> Cannot invalidate Rest of Message/Packet
|
||||||
|
* RESOURCE_LIMITS applies also to "empty" samples (Samples with no valid data).
|
||||||
|
|
||||||
-- Input FIFO Guard
|
|
||||||
-- Output FIFO Guard
|
|
||||||
-- Deferred to package Body
|
|
||||||
|
|
||||||
RTPS ENDPOINT
|
RTPS ENDPOINT
|
||||||
=============
|
=============
|
||||||
|
|||||||
1413
src/dds_endpoint.vhd
1413
src/dds_endpoint.vhd
File diff suppressed because it is too large
Load Diff
@ -53,6 +53,8 @@ package rtps_config_package is
|
|||||||
type KEY_GENERATOR_OPCODE_TYPE is (NOP, WRITE_PAYLOAD, READ_KEY, READ_SIZE);
|
type KEY_GENERATOR_OPCODE_TYPE is (NOP, WRITE_PAYLOAD, READ_KEY, READ_SIZE);
|
||||||
type HISTORY_CACHE_RESPOSNE_TYPE is (UNDEFINED, ACK, ACCEPTED, REJECTED);
|
type HISTORY_CACHE_RESPOSNE_TYPE is (UNDEFINED, ACK, ACCEPTED, REJECTED);
|
||||||
type INSTANCE_STATE_TYPE is (ALIVE, NOT_ALIVE_DISPOSED, NOT_ALIVE_NO_WRITERS);
|
type INSTANCE_STATE_TYPE is (ALIVE, NOT_ALIVE_DISPOSED, NOT_ALIVE_NO_WRITERS);
|
||||||
|
type VIEW_STATE_TYPE is (NEW_INSTANCE, NOT_NEW_INSTANCE);
|
||||||
|
type SAMPLE_STATE is (READ, NOT_READ);
|
||||||
|
|
||||||
-- Sample Status Info Flags
|
-- Sample Status Info Flags
|
||||||
constant DISPOSED_FLAG : natural := 0;
|
constant DISPOSED_FLAG : natural := 0;
|
||||||
@ -66,6 +68,7 @@ package rtps_config_package is
|
|||||||
constant NOT_ALIVE_NO_WRITERS_FLAG : natural := 1;
|
constant NOT_ALIVE_NO_WRITERS_FLAG : natural := 1;
|
||||||
constant LIVELINESS_FLAG : natural := 2;
|
constant LIVELINESS_FLAG : natural := 2;
|
||||||
constant VIEW_FLAG : natural := 3;
|
constant VIEW_FLAG : natural := 3;
|
||||||
|
constant MARK_FLAG : natural := 4;
|
||||||
|
|
||||||
-- Marks the Reader Endpoint in the Endpoint Array
|
-- Marks the Reader Endpoint in the Endpoint Array
|
||||||
constant ENDPOINT_READERS : std_logic_vector(0 to NUM_ENDPOINTS-1) := (0 to NUM_READERS-1 => '1', others => '0');
|
constant ENDPOINT_READERS : std_logic_vector(0 to NUM_ENDPOINTS-1) := (0 to NUM_READERS-1 => '1', others => '0');
|
||||||
|
|||||||
@ -49,6 +49,35 @@ package rtps_package is
|
|||||||
constant MAX_BITMAP_WIDTH : natural := 256;
|
constant MAX_BITMAP_WIDTH : natural := 256;
|
||||||
constant KEY_HASH_WIDTH : natural := 128;
|
constant KEY_HASH_WIDTH : natural := 128;
|
||||||
constant STATUS_INFO_WIDTH : natural := 32;
|
constant STATUS_INFO_WIDTH : natural := 32;
|
||||||
|
-- DDS
|
||||||
|
constant RETURN_CODE_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant STATUS_KIND_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant SAMPLE_STATE_KIND_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant VIEW_STATE_KIND_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant INSTANCE_STATE_KIND_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant QOS_POLICY_ID_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant MAX_SAMPLES_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
|
||||||
|
constant DISPOSED_GENERATION_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant NO_WRITERS_GENERATION_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant SAMPLE_RANK_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant GENERATION_RANK_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant ABSOLUTE_GENERATION_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
|
||||||
|
constant INCONSISTENT_TOPIC_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant SAMPLE_LOST_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant SAMPLE_REJECTED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant LIVELINESS_LOST_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant LIVELINESS_CHANGED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant OFFERED_DEADLINE_MISSED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant REQUESTED_DEADLINE_MISSED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant OFFERED_INCOMPATIBLE_QOS_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant REQUESTED_INCOMPATIBLE_QOS_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant PUBLICATION_MATCHED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
constant SUBSCRIPTION_MATCHED_STATUS_COUNT_WIDTH : natural := CDR_LONG_WIDTH;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- *TYPES DEFINITION*
|
-- *TYPES DEFINITION*
|
||||||
-- Generic Types
|
-- Generic Types
|
||||||
@ -62,6 +91,9 @@ package rtps_package is
|
|||||||
type GUID_TYPE is array (0 to (GUID_WIDTH/WORD_WIDTH)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
|
type GUID_TYPE is array (0 to (GUID_WIDTH/WORD_WIDTH)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||||
type BITMAP_TYPE is array (0 to (MAX_BITMAP_WIDTH/WORD_WIDTH)-1) of std_logic_vector(0 to WORD_WIDTH-1);
|
type BITMAP_TYPE is array (0 to (MAX_BITMAP_WIDTH/WORD_WIDTH)-1) of std_logic_vector(0 to WORD_WIDTH-1);
|
||||||
type KEY_HASH_TYPE is array (0 to (KEY_HASH_WIDTH/WORD_WIDTH)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
|
type KEY_HASH_TYPE is array (0 to (KEY_HASH_WIDTH/WORD_WIDTH)-1) of std_logic_vector(WORD_WIDTH-1 downto 0);
|
||||||
|
-- DDS
|
||||||
|
subtype INSTANCE_HANDLE_TYPE is KEY_HASH_TYPE;
|
||||||
|
subtype PUBLICATION_HANDLE_TYPE is GUID_TYPE;
|
||||||
|
|
||||||
-- Helper Function
|
-- Helper Function
|
||||||
function gen_duration(s,ns : integer) return DURATION_TYPE;
|
function gen_duration(s,ns : integer) return DURATION_TYPE;
|
||||||
@ -86,6 +118,86 @@ package rtps_package is
|
|||||||
constant UDP_PORT_INVALID : std_logic_vector(UDP_PORT_WIDTH-1 downto 0) := (others => '0');
|
constant UDP_PORT_INVALID : std_logic_vector(UDP_PORT_WIDTH-1 downto 0) := (others => '0');
|
||||||
constant IPv4_ADDRESS_INVALID : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0) := (others => '0');
|
constant IPv4_ADDRESS_INVALID : std_logic_vector(IPv4_ADDRESS_WIDTH-1 downto 0) := (others => '0');
|
||||||
constant LENGTH_UNLIMITED : std_logic_vector(CDR_LONG_WIDTH-1 downto 0) := std_logic_vector(to_signed(-1,CDR_LONG_WIDTH));
|
constant LENGTH_UNLIMITED : std_logic_vector(CDR_LONG_WIDTH-1 downto 0) := std_logic_vector(to_signed(-1,CDR_LONG_WIDTH));
|
||||||
|
-- DDS
|
||||||
|
constant HANDLE_NIL : INSTANCE_HANDLE_TYPE := (others => (others => '0'));
|
||||||
|
|
||||||
|
-- *RETURN CODES* (DDS)
|
||||||
|
constant RETCODE_OK : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(0,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_ERROR : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(1,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_UNSUPPORTED : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(2,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_BAD_PARAMETER : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(3,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_PRECONDITION_NOT_MET : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(4,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_OUT_OF_RESOURCES : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(5,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_NOT_ENABLED : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(6,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_IMMUTABLE_POLICY : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(7,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_INCONSISTENT_POLICY : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(8,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_ALREADY_DELETED : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(9,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_TIMEOUT : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(10,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_NO_DATA : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(11,RETURN_CODE_WIDTH));
|
||||||
|
constant RETCODE_ILLEGAL_OPERATION : std_logic_vector(RETURN_CODE_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(12,RETURN_CODE_WIDTH));
|
||||||
|
|
||||||
|
-- *STATUS KIND* (DDS)
|
||||||
|
constant INCONSISTENT_TOPIC_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000001";
|
||||||
|
constant OFFERED_DEADLINE_MISSED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000002";
|
||||||
|
constant REQUESTED_DEADLINE_MISSED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000004";
|
||||||
|
constant OFFERED_INCOMPATIBLE_QOS_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000020";
|
||||||
|
constant REQUESTED_INCOMPATIBLE_QOS_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000040";
|
||||||
|
constant SAMPLE_LOST_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000080";
|
||||||
|
constant SAMPLE_REJECTED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000100";
|
||||||
|
constant DATA_ON_READERS_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000200";
|
||||||
|
constant DATA_AVAILABLE_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000400";
|
||||||
|
constant LIVELINESS_LOST_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00000800";
|
||||||
|
constant LIVELINESS_CHANGED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00001000";
|
||||||
|
constant PUBLICATION_MATCHED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00002000";
|
||||||
|
constant SUBSCRIPTION_MATCHED_STATUS : std_logic_vector(STATUS_KIND_WIDTH-1 downto 0) := x"00004000";
|
||||||
|
|
||||||
|
-- *SAMPLE STATE KIND* (DDS)
|
||||||
|
constant READ_SAMPLE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000001";
|
||||||
|
constant NOT_READ_SAMPLE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000002";
|
||||||
|
constant ANY_SAMPLE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"FFFFFFFF";
|
||||||
|
|
||||||
|
-- *VIEW STATE KIND* (DDS)
|
||||||
|
constant NEW_VIEW_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000001";
|
||||||
|
constant NOT_NEW_VIEW_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000002";
|
||||||
|
constant ANY_VIEW_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"FFFFFFFF";
|
||||||
|
|
||||||
|
-- *INSTANCE STATE KIND* (DDS)
|
||||||
|
constant ALIVE_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000001";
|
||||||
|
constant NOT_ALIVE_DISPOSED_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000002";
|
||||||
|
constant NOT_ALIVE_NO_WRITERS_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000004";
|
||||||
|
constant NOT_ALIVE_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"00000006";
|
||||||
|
constant ANY_INSTANCE_STATE : std_logic_vector(SAMPLE_STATE_KIND_WIDTH-1 downto 0) := x"FFFFFFFF";
|
||||||
|
|
||||||
|
-- *SAMPLE REJECTED STATUS KIND* (DDS)
|
||||||
|
constant NOT_REJECTED : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(0,CDR_ENUMERATION_WIDTH));
|
||||||
|
constant REJECTED_BY_INSTANCES_LIMIT : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(1,CDR_ENUMERATION_WIDTH));
|
||||||
|
constant REJECTED_BY_SAMPLES_LIMIT : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(2,CDR_ENUMERATION_WIDTH));
|
||||||
|
constant REJECTED_BY_SAMPLES_PER_INSTANCE_LIMIT : std_logic_vector(CDR_ENUMERATION_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(3,CDR_ENUMERATION_WIDTH));
|
||||||
|
|
||||||
|
-- *QOS POLICY ID* (DDS)
|
||||||
|
constant INVALID_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(0,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant USERDATA_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(1,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant DURABILITY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(2,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant PRESENTATION_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(3,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant DEADLINE_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(4,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant LATENCYBUDGET_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(5,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant OWNERSHIP_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(6,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant OWNERSHIPSTRENGTH_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(7,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant LIVELINESS_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(8,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant TIMEBASEDFILTER_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(9,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant PARTITION_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(10,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant RELIABILITY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(11,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant DESTINATIONORDER_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(12,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant HISTORY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(13,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant RESOURCELIMITS_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(14,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant ENTITYFACTORY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(15,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant WRITERDATALIFECYCLE_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(16,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant READERDATALIFECYCLE_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(17,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant TOPICDATA_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(18,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant GROUPDATA_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(19,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant TRANSPORTPRIORITY_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(20,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant LIFESPAN_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(21,QOS_POLICY_ID_WIDTH));
|
||||||
|
constant DURABILITYSERVICE_QOS_POLICY_ID : std_logic_vector(QOS_POLICY_ID_WIDTH-1 downto 0) := std_logic_vector(to_unsigned(22,QOS_POLICY_ID_WIDTH));
|
||||||
|
|
||||||
-- *SUBMESSAGE IDs*
|
-- *SUBMESSAGE IDs*
|
||||||
constant SID_PAD : std_logic_vector(SUBMESSAGE_ID_WIDTH-1 downto 0) := x"01";
|
constant SID_PAD : std_logic_vector(SUBMESSAGE_ID_WIDTH-1 downto 0) := x"01";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user