107-systems / 107-Arduino-Cyphal

Arduino library for providing a convenient C++ interface for accessing OpenCyphal.
https://107-systems.org
MIT License
69 stars 31 forks source link

Add the ability to prioritize sending messages #276

Closed bakul14 closed 2 weeks ago

bakul14 commented 3 months ago

⚡ Feature Request

It is necessary to implement setting the priority subject and service messages, since this feature is available in libcanard. Here is a piece of implementation of the publish(T const & msg) method. Priority is not a parameter and it is set to CanardPriorityNominal.

template<typename T>
bool Publisher<T>::publish(T const & msg)
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
  CanardTransferMetadata const transfer_metadata =
  {
   .priority       = CanardPriorityNominal,
    .transfer_kind  = CanardTransferKindMessage,
    .port_id        = _port_id,
    .remote_node_id = CANARD_NODE_ID_UNSET,
    .transfer_id    = _transfer_id++,
  };
#pragma GCC diagnostic pop

There are 2 possible solutions: 1) Add the ability to set priority through the publisher/subscriber/client/server constructor. 2) Pass priority as a parameter to the publish() method and others.

aentinger commented 3 months ago

I am willing to merge a high quality pull request providing this functionality using the first approach.

bakul14 commented 3 months ago

Okay, it's good. I am ready to check your PR

aentinger commented 3 months ago

I am willing to receive your PR ;)

bakul14 commented 3 months ago

Ive performed a local commit and am ready to show it, I need write rights to this repository

pavel-kirienko commented 3 months ago

@bakul14 that's not how it works. You need to fork this repository, push your changes there, then send a pull request: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request

image