Skip to content

Commit

Permalink
107-systems#276 feat: added support for setting priorities for creati…
Browse files Browse the repository at this point in the history
…ng publishers, clients, server through their constructors with the default CanardPriorityNominal priority param
  • Loading branch information
bakul14 committed Jul 3, 2024
1 parent d786624 commit 168dddb
Show file tree
Hide file tree
Showing 8 changed files with 31 additions and 22 deletions.
12 changes: 6 additions & 6 deletions src/Node.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,24 +83,24 @@ class Node


template <typename T>
Publisher<T> create_publisher(CanardMicrosecond const tx_timeout_usec);
Publisher<T> create_publisher(CanardMicrosecond const tx_timeout_usec, CanardPriority const tx_priority = CanardPriorityNominal);
template <typename T>
Publisher<T> create_publisher(CanardPortID const port_id, CanardMicrosecond const tx_timeout_usec);
Publisher<T> create_publisher(CanardPortID const port_id, CanardMicrosecond const tx_timeout_usec, CanardPriority const tx_priority = CanardPriorityNominal);

template <typename T, typename OnReceiveCb>
Subscription create_subscription(OnReceiveCb&& on_receive_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC);
template <typename T, typename OnReceiveCb>
Subscription create_subscription(CanardPortID const port_id, OnReceiveCb&& on_receive_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC);

template <typename T_REQ, typename T_RSP, typename OnRequestCb>
ServiceServer create_service_server(CanardMicrosecond const tx_timeout_usec, OnRequestCb&& on_request_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC);
ServiceServer create_service_server(CanardMicrosecond const tx_timeout_usec, OnRequestCb&& on_request_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC, CanardPriority const tx_tx_priority = CanardPriorityNominal);
template <typename T_REQ, typename T_RSP, typename OnRequestCb>
ServiceServer create_service_server(CanardPortID const request_port_id, CanardMicrosecond const tx_timeout_usec, OnRequestCb&& on_request_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC);
ServiceServer create_service_server(CanardPortID const request_port_id, CanardMicrosecond const tx_timeout_usec, OnRequestCb&& on_request_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC, CanardPriority const tx_priority = CanardPriorityNominal);

template <typename T_REQ, typename T_RSP, typename OnResponseCb>
ServiceClient<T_REQ> create_service_client(CanardMicrosecond const tx_timeout_usec, OnResponseCb&& on_response_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC);
ServiceClient<T_REQ> create_service_client(CanardMicrosecond const tx_timeout_usec, OnResponseCb&& on_response_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC, CanardPriority const tx_priority = CanardPriorityNominal);
template <typename T_REQ, typename T_RSP, typename OnResponseCb>
ServiceClient<T_REQ> create_service_client(CanardPortID const response_port_id, CanardMicrosecond const tx_timeout_usec, OnResponseCb&& on_response_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC);
ServiceClient<T_REQ> create_service_client(CanardPortID const response_port_id, CanardMicrosecond const tx_timeout_usec, OnResponseCb&& on_response_cb, CanardMicrosecond const tid_timeout_usec = CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC, CanardPriority const tx_priority = CanardPriorityNominal);

#if !defined(__GNUC__) || (__GNUC__ >= 11)
Registry create_registry();
Expand Down
23 changes: 13 additions & 10 deletions src/Node.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ namespace cyphal
**************************************************************************************/

template <typename T>
Publisher<T> Node::create_publisher(CanardMicrosecond const tx_timeout_usec)
Publisher<T> Node::create_publisher(CanardMicrosecond const tx_timeout_usec, CanardPriority const tx_priority)
{
static_assert(T::_traits_::HasFixedPortID, "T does not have a fixed port id.");
return create_publisher<T>(T::_traits_::FixedPortId, tx_timeout_usec);
return create_publisher<T>(T::_traits_::FixedPortId, tx_timeout_usec, tx_priority);
}

template <typename T>
Publisher<T> Node::create_publisher(CanardPortID const port_id, CanardMicrosecond const tx_timeout_usec)
Publisher<T> Node::create_publisher(CanardPortID const port_id, CanardMicrosecond const tx_timeout_usec, CanardPriority const tx_priority)
{
static_assert(!T::_traits_::IsServiceType, "T is not message type");

Expand All @@ -43,7 +43,8 @@ Publisher<T> Node::create_publisher(CanardPortID const port_id, CanardMicrosecon
return std::make_shared<impl::Publisher<T>>(
*this,
port_id,
tx_timeout_usec
tx_timeout_usec,
tx_priority
);
}

Expand Down Expand Up @@ -81,16 +82,16 @@ Subscription Node::create_subscription(CanardPortID const port_id, OnReceiveCb&&
}

template <typename T_REQ, typename T_RSP, typename OnRequestCb>
ServiceServer Node::create_service_server(CanardMicrosecond const tx_timeout_usec, OnRequestCb&& on_request_cb, CanardMicrosecond const tid_timeout_usec)
ServiceServer Node::create_service_server(CanardMicrosecond const tx_timeout_usec, OnRequestCb&& on_request_cb, CanardMicrosecond const tid_timeout_usec, CanardPriority const tx_priority)
{
static_assert(T_REQ::_traits_::HasFixedPortID, "T_REQ does not have a fixed port id.");
static_assert(T_RSP::_traits_::HasFixedPortID, "T_RSP does not have a fixed port id.");

return create_service_server<T_REQ, T_RSP>(T_REQ::_traits_::FixedPortId, tx_timeout_usec, on_request_cb, tid_timeout_usec);
return create_service_server<T_REQ, T_RSP>(T_REQ::_traits_::FixedPortId, tx_timeout_usec, on_request_cb, tid_timeout_usec, tx_priority);
}

template <typename T_REQ, typename T_RSP, typename OnRequestCb>
ServiceServer Node::create_service_server(CanardPortID const request_port_id, CanardMicrosecond const tx_timeout_usec, OnRequestCb&& on_request_cb, CanardMicrosecond const tid_timeout_usec)
ServiceServer Node::create_service_server(CanardPortID const request_port_id, CanardMicrosecond const tx_timeout_usec, OnRequestCb&& on_request_cb, CanardMicrosecond const tid_timeout_usec, CanardPriority const tx_priority)
{
static_assert(T_REQ::_traits_::IsRequest, "T_REQ is not a request");
static_assert(T_RSP::_traits_::IsResponse, "T_RSP is not a response");
Expand All @@ -102,6 +103,7 @@ ServiceServer Node::create_service_server(CanardPortID const request_port_id, Ca
*this,
request_port_id,
tx_timeout_usec,
tx_priority,
std::forward<OnRequestCb>(on_request_cb)
);

Expand All @@ -118,16 +120,16 @@ ServiceServer Node::create_service_server(CanardPortID const request_port_id, Ca
}

template <typename T_REQ, typename T_RSP, typename OnResponseCb>
ServiceClient<T_REQ> Node::create_service_client(CanardMicrosecond const tx_timeout_usec, OnResponseCb&& on_response_cb, CanardMicrosecond const tid_timeout_usec)
ServiceClient<T_REQ> Node::create_service_client(CanardMicrosecond const tx_timeout_usec, OnResponseCb&& on_response_cb, CanardMicrosecond const tid_timeout_usec, CanardPriority const tx_priority)
{
static_assert(T_REQ::_traits_::HasFixedPortID, "T_REQ does not have a fixed port id.");
static_assert(T_RSP::_traits_::HasFixedPortID, "T_RSP does not have a fixed port id.");

return create_service_client<T_REQ, T_RSP>(T_RSP::_traits_::FixedPortId, tx_timeout_usec, on_response_cb, tid_timeout_usec);
return create_service_client<T_REQ, T_RSP>(T_RSP::_traits_::FixedPortId, tx_timeout_usec, on_response_cb, tid_timeout_usec, tx_priority);
}

template <typename T_REQ, typename T_RSP, typename OnResponseCb>
ServiceClient<T_REQ> Node::create_service_client(CanardPortID const response_port_id, CanardMicrosecond const tx_timeout_usec, OnResponseCb&& on_response_cb, CanardMicrosecond const tid_timeout_usec)
ServiceClient<T_REQ> Node::create_service_client(CanardPortID const response_port_id, CanardMicrosecond const tx_timeout_usec, OnResponseCb&& on_response_cb, CanardMicrosecond const tid_timeout_usec, CanardPriority const tx_priority)
{
static_assert(T_REQ::_traits_::IsRequest, "T_REQ is not a request");
static_assert(T_RSP::_traits_::IsResponse, "T_RSP is not a response");
Expand All @@ -139,6 +141,7 @@ ServiceClient<T_REQ> Node::create_service_client(CanardPortID const response_por
*this,
response_port_id,
tx_timeout_usec,
tx_priority,
std::forward<OnResponseCb>(on_response_cb)
);

Expand Down
4 changes: 3 additions & 1 deletion src/Publisher.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,10 @@ template <typename T>
class Publisher final : public PublisherBase<T>
{
public:
Publisher(Node & node_hdl, CanardPortID const port_id, CanardMicrosecond const tx_timeout_usec)
Publisher(Node & node_hdl, CanardPortID const port_id, CanardMicrosecond const tx_timeout_usec, CanardPriority const tx_priority)
: _node_hdl{node_hdl}
, _port_id{port_id}
, _tx_priority{tx_priority}
, _tx_timeout_usec{tx_timeout_usec}
, _transfer_id{0}
{ }
Expand All @@ -46,6 +47,7 @@ class Publisher final : public PublisherBase<T>
private:
Node & _node_hdl;
CanardPortID const _port_id;
CanardPriority const _tx_priority;
CanardMicrosecond const _tx_timeout_usec;
CanardTransferID _transfer_id;
};
Expand Down
2 changes: 1 addition & 1 deletion src/Publisher.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ bool Publisher<T>::publish(T const & msg)
#pragma GCC diagnostic ignored "-Wpedantic"
CanardTransferMetadata const transfer_metadata =
{
.priority = CanardPriorityNominal,
.priority = _tx_priority,
.transfer_kind = CanardTransferKindMessage,
.port_id = _port_id,
.remote_node_id = CANARD_NODE_ID_UNSET,
Expand Down
4 changes: 3 additions & 1 deletion src/ServiceClient.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,11 @@ template<typename T_REQ, typename T_RSP, typename OnResponseCb>
class ServiceClient final : public ServiceClientBase<T_REQ>
{
public:
ServiceClient(Node & node_hdl, CanardPortID const response_port_id, CanardMicrosecond const tx_timeout_usec, OnResponseCb on_response_cb)
ServiceClient(Node & node_hdl, CanardPortID const response_port_id, CanardMicrosecond const tx_timeout_usec, CanardPriority tx_priority, OnResponseCb on_response_cb)
: _node_hdl{node_hdl}
, _response_port_id{response_port_id}
, _tx_timeout_usec{tx_timeout_usec}
, _tx_priority{tx_priority}
, _on_response_cb{on_response_cb}
, _transfer_id{0}
{ }
Expand All @@ -51,6 +52,7 @@ class ServiceClient final : public ServiceClientBase<T_REQ>
Node & _node_hdl;
CanardPortID const _response_port_id;
CanardMicrosecond const _tx_timeout_usec;
CanardPriority const _tx_priority;
OnResponseCb _on_response_cb;
CanardTransferID _transfer_id;
};
Expand Down
2 changes: 1 addition & 1 deletion src/ServiceClient.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ bool ServiceClient<T_REQ, T_RSP, OnResponseCb>::request(CanardNodeID const remot
#pragma GCC diagnostic ignored "-Wpedantic"
CanardTransferMetadata const transfer_metadata =
{
.priority = CanardPriorityNominal,
.priority = _tx_priority,
.transfer_kind = CanardTransferKindRequest,
.port_id = _response_port_id,
.remote_node_id = remote_node_id,
Expand Down
4 changes: 3 additions & 1 deletion src/ServiceServer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,11 @@ template<typename T_REQ, typename T_RSP, typename OnRequestCb>
class ServiceServer final : public ServiceServerBase
{
public:
ServiceServer(Node & node_hdl, CanardPortID const request_port_id, CanardMicrosecond const tx_timeout_usec, OnRequestCb on_request_cb)
ServiceServer(Node & node_hdl, CanardPortID const request_port_id, CanardMicrosecond const tx_timeout_usec, CanardPriority const tx_priority, OnRequestCb on_request_cb)
: _node_hdl{node_hdl}
, _request_port_id{request_port_id}
, _tx_timeout_usec{tx_timeout_usec}
, _tx_priority{tx_priority}
, _on_request_cb{on_request_cb}
{ }
virtual ~ServiceServer();
Expand All @@ -49,6 +50,7 @@ class ServiceServer final : public ServiceServerBase
Node & _node_hdl;
CanardPortID const _request_port_id;
CanardMicrosecond const _tx_timeout_usec;
CanardPriority const _tx_priority;
OnRequestCb _on_request_cb;
};

Expand Down
2 changes: 1 addition & 1 deletion src/ServiceServer.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ bool ServiceServer<T_REQ, T_RSP, OnRequestCb>::onTransferReceived(CanardRxTransf
/* Enqueue the transfer. */
CanardTransferMetadata const transfer_metadata =
{
.priority = CanardPriorityNominal,
.priority = _tx_priority,
.transfer_kind = CanardTransferKindResponse,
.port_id = transfer.metadata.port_id,
.remote_node_id = transfer.metadata.remote_node_id,
Expand Down

0 comments on commit 168dddb

Please sign in to comment.