Skip to content

Commit 0895490

Browse files
authored
Merge pull request #258 from Willmac16/main
Add an optional CRC param to NodeInfo & allow access to TransferMetadata in ServiceServer Callback
2 parents b3fb722 + fa86c2e commit 0895490

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

src/Node.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,23 @@ NodeInfo Node::create_node_info(uint8_t const protocol_major, uint8_t const prot
7878
name);
7979
}
8080

81+
NodeInfo Node::create_node_info(uint8_t const protocol_major, uint8_t const protocol_minor,
82+
uint8_t const hardware_major, uint8_t const hardware_minor,
83+
uint8_t const software_major, uint8_t const software_minor,
84+
uint64_t const software_vcs_revision_id,
85+
std::array<uint8_t, 16> const & unique_id,
86+
std::string const & name,
87+
uint64_t const image_crc)
88+
{
89+
return std::make_shared<impl::NodeInfo>(*this,
90+
protocol_major, protocol_minor,
91+
hardware_major, hardware_minor,
92+
software_major, software_minor,
93+
software_vcs_revision_id,
94+
unique_id,
95+
name, image_crc);
96+
}
97+
8198
void Node::spinSome()
8299
{
83100
processPortList();

src/Node.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,14 @@ class Node
113113
std::array<uint8_t, 16> const & unique_id,
114114
std::string const & name);
115115

116+
NodeInfo create_node_info(uint8_t const protocol_major, uint8_t const protocol_minor,
117+
uint8_t const hardware_major, uint8_t const hardware_minor,
118+
uint8_t const software_major, uint8_t const software_minor,
119+
uint64_t const software_vcs_revision_id,
120+
std::array<uint8_t, 16> const & unique_id,
121+
std::string const & name,
122+
uint64_t const image_crc);
123+
116124
/* Must be called from the application to process
117125
* all received CAN frames.
118126
*/

src/ServiceServer.ipp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ bool ServiceServer<T_REQ, T_RSP, OnRequestCb>::onTransferReceived(CanardRxTransf
4747
if (!req_rc) return false;
4848

4949
/* Invoke the service callback and obtain the desired response. */
50-
T_RSP const rsp = _on_request_cb(req);
50+
T_RSP rsp;
51+
if constexpr (std::is_invocable_v<OnRequestCb, T_REQ, TransferMetadata>) {
52+
rsp = _on_request_cb(req, fillMetadata(transfer));
53+
} else {
54+
rsp = _on_request_cb(req);
55+
}
5156

5257
/* Serialize the response message. */
5358
std::array<uint8_t, T_RSP::_traits_::SerializationBufferSizeBytes> rsp_buf;

src/util/nodeinfo/NodeInfo.hpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,29 @@ namespace impl
3434
class NodeInfo : public NodeInfoBase
3535
{
3636
public:
37+
NodeInfo(Node & node_hdl,
38+
uint8_t const protocol_major,
39+
uint8_t const protocol_minor,
40+
uint8_t const hardware_major,
41+
uint8_t const hardware_minor,
42+
uint8_t const software_major,
43+
uint8_t const software_minor,
44+
uint64_t const software_vcs_revision_id,
45+
std::array<uint8_t, 16> const & unique_id,
46+
std::string const & name,
47+
std::uint64_t const software_image_crc)
48+
: NodeInfo{node_hdl,
49+
protocol_major, protocol_minor,
50+
hardware_major, hardware_minor,
51+
software_major, software_minor,
52+
software_vcs_revision_id,
53+
unique_id,
54+
name}
55+
{
56+
std::array<std::uint64_t, 1> const crc = {software_image_crc};
57+
std::copy(crc.cbegin(), crc.cend(), std::back_inserter(_node_info_rsp.software_image_crc));
58+
}
59+
3760
NodeInfo(Node & node_hdl,
3861
uint8_t const protocol_major,
3962
uint8_t const protocol_minor,

0 commit comments

Comments
 (0)