I’m currently attempting to use the .dsdl data types for the first time. I’m wondering if you could give me an example on how to fill and then read a nunavut::support::VariableLengthArray<std::uint8_t, 50>
More specifically. I am trying to fill the GetInfo name property. I had a look at the examples on 107-arduino-cyphal, and they show how to fill the parameter property of ExecuteCommand::Request_1_1. They show it like this:
/* Request some coffee. */
std::string const cmd_param("I want a double espresso with cream!");
ExecuteCommand::Request_1_1 req;
req.command = 0xCAFE;
std::copy_n(cmd_param.begin(),
std::min(cmd_param.length(), req.parameter.capacity()),
req.parameter.begin());
I have assumed that this is the same process for the GetInfo name property as in the dsdl files they have the same definition of uint8[]
This is what I’ve tried so far, but yakut doesn’t read anything as the name of my node.
The first snippet looks correct to me and requires no changes, as far as I see.
The problem with Yakut has nothing to do with DSDL. It is simply unable to fetch the uavcan.node.GetInfo response for some unrelated reason. Maybe this service is not implemented by the node. To check, invoke the service manually and evaluate the response (-v is added for verbosity, add another one for extra verbosity which may aid in diagnosing the problem):
Wait, I see an issue now in your first snippet. Either it’s incomplete or you’re missing the resize operation. Either do it manually or (much preferable) use std::back_inserter.