11 #include "../node/test_node.hpp" 14 template <
typename DataType>
19 this->msg.reset(
new DataType(msg));
23 std::unique_ptr<DataType>
msg;
26 void (SubscriptionCollector::*)(
const DataType&)>
Binder;
32 template <
typename DataType>
49 template <
typename DataType>
64 const typename DataType::Response& arg_response)
66 , call_id_(arg_call_id)
67 , response_(arg_response)
70 bool isSuccessful()
const {
return status_ == ServiceCallResult::Success; }
76 const typename DataType::Response&
getResponse()
const {
return response_; }
77 typename DataType::Response&
getResponse() {
return response_; }
83 std::cout << tmp_result << std::endl;
98 template <
typename DataType>
114 return client.
call(node_id, request);
125 , spinning_node(spinning_node)
134 template <
typename CanDriver,
typename MessageType>
143 ASSERT_LT(0, MessageType::encode(message, codec));
150 frame.setStartOfTransfer(
true);
151 frame.setEndOfTransfer(
true);
156 ASSERT_TRUE(frame.compile(can_frame));
158 can.pushRxToAllIfaces(can_frame);
std::unique_ptr< Result > result
ServiceCallID getCallID() const
uint16_t getMaxWritePos() const
void handler(const DataType &msg)
Result(typename ServiceCallResult::Status arg_status, uavcan::ServiceCallID arg_call_id, const typename DataType::Response &arg_response)
static const NodeID Broadcast
uavcan::ServiceCallID call_id_
uavcan::ServiceCallResult< DataType > ServiceCallResult
uavcan::ServiceCallID getCallID() const
SubscriberWithCollector(uavcan::INode &node)
BackgroundSpinner(uavcan::INode &spinning_node, uavcan::INode &running_node)
const DataType::Response & getResponse() const
void handler(const uavcan::ServiceCallResult< DataType > &tmp_result)
virtual void handleTimerEvent(const uavcan::TimerEvent &)
ServiceCallResultCollector< DataType > Collector
DataType::Response & getResponse()
int call(uavcan::NodeID node_id, const typename DataType::Request &request)
uavcan::Subscriber< DataType, typename Collector::Binder > Subscriber
int spin(MonotonicTime deadline)
const ServiceCallResult::Status status_
static void emulateSingleFrameBroadcastTransfer(CanDriver &can, uavcan::NodeID node_id, const MessageType &message, uavcan::TransferID tid)
int start(const Callback &callback)
const ResponseFieldType & getResponse() const
ServiceClientWithCollector(uavcan::INode &node)
std::unique_ptr< DataType > msg
void setCallback(const Callback &cb)
uavcan::INode & spinning_node
ServiceCallResult::Status getStatus() const
bool isSuccessful() const
static MonotonicDuration fromMSec(int64_t ms)
SubscriptionCollector< DataType > Collector
uavcan::ServiceClient< DataType, typename Collector::Binder > ServiceClient
class UAVCAN_EXPORT TimerBase
uavcan::MethodBinder< SubscriptionCollector *, void(SubscriptionCollector::*)(const DataType &)> Binder
int call(NodeID server_node_id, const RequestType &request)
DataType::Response response_