Go to the documentation of this file.
10 #include <gtest/gtest.h>
30 ,
ts_utc(tr.getUtcTimestamp())
42 int res = tr.
read(offset, buf,
sizeof(buf));
45 std::cout <<
"IncomingTransferContainer: read failure " << res << std::endl;
52 payload += std::string(
reinterpret_cast<const char*
>(buf),
unsigned(res));
53 offset += unsigned(res);
101 std::ostringstream os;
129 :
Base(perf, data_type, max_buffer_size, allocator)
136 std::cout <<
"Received transfer: " << rx.
toString() << std::endl;
140 const bool anonymous = single_frame &&
151 std::cout <<
"No received transfers" << std::endl;
158 const bool res = (tr == reference);
161 std::cout <<
"TestSubscriber: Transfer mismatch:\n"
162 <<
"Expected: " << reference.
toString() <<
"\n"
163 <<
"Received: " << tr.
toString() << std::endl;
176 std::vector<uavcan::RxFrame> serializeTransfer(
const Transfer& transfer)
180 std::vector<uint8_t> raw_payload;
186 raw_payload.push_back(
uint8_t(payload_crc.
get() & 0xFF));
187 raw_payload.push_back(
uint8_t((payload_crc.
get() >> 8) & 0xFF));
189 raw_payload.insert(raw_payload.end(), transfer.
payload.begin(), transfer.
payload.end());
191 std::vector<uavcan::RxFrame> output;
198 frm.setStartOfTransfer(
true);
203 const int bytes_left =
int(raw_payload.size()) -
int(offset);
204 EXPECT_TRUE(bytes_left >= 0);
206 const int spres = frm.setPayload(&*(raw_payload.begin() + offset),
unsigned(bytes_left));
209 std::cerr <<
">_<" << std::endl;
212 if (spres == bytes_left)
214 frm.setEndOfTransfer(
true);
217 offset += unsigned(spres);
223 output.push_back(rxfrm);
224 if (frm.isEndOfTransfer())
229 frm.setStartOfTransfer(
false);
265 (dst_node_id_override.isValid() ? dst_node_id_override :
dst_node_id_);
266 const Transfer tr(
ts_, utc, priority, transfer_type,
tid_, source_node_id, dst_node_id, payload, type);
273 void send(
const std::vector<std::vector<uavcan::RxFrame> >& sers)
279 bool all_empty =
true;
280 for (std::vector<std::vector<uavcan::RxFrame> >::const_iterator it = sers.begin(); it != sers.end(); ++it)
282 if (it->size() <= index)
287 std::cout <<
"Incoming Transfer Emulator: Sending: " << it->at(index).toString() << std::endl;
300 std::vector<std::vector<uavcan::RxFrame> > sers;
301 while (num_transfers--)
303 sers.push_back(serializeTransfer(*transfers++));
308 template <
int SIZE>
void send(
const Transfer (&transfers)[SIZE]) {
send(transfers, SIZE); }
void send(const std::vector< std::vector< uavcan::RxFrame > > &sers)
const DataTypeDescriptor & getDataTypeDescriptor() const
bool operator==(const Transfer &rhs) const
uavcan::NodeID src_node_id
Transfer makeTransfer(uavcan::TransferPriority priority, uavcan::TransferType transfer_type, uint8_t source_node_id, const std::string &payload, const uavcan::DataTypeDescriptor &type, uavcan::NodeID dst_node_id_override=uavcan::NodeID())
uavcan::MonotonicTime ts_
TestListener(uavcan::TransferPerfCounter &perf, const uavcan::DataTypeDescriptor &data_type, uavcan::uint16_t max_buffer_size, uavcan::IPoolAllocator &allocator)
Implicitly convertible to/from uavcan.Timestamp.
bool matchAndPop(const Transfer &reference)
uavcan::TransferListener Base
TransferCRC toTransferCRC() const
virtual ~IncomingTransferEmulatorBase()
virtual void sendOneFrame(const uavcan::RxFrame &frame)=0
std::string toString() const
uavcan::MonotonicTime ts_monotonic
void send(const Transfer(&transfers)[SIZE])
static UtcTime fromUSec(uint64_t us)
uavcan::TransferPriority priority
@ TransferTypeMessageBroadcast
std::queue< Transfer > transfers_
void handleIncomingTransfer(uavcan::IncomingTransfer &transfer)
uavcan::DataTypeDescriptor data_type
void send(const Transfer *transfers, unsigned num_transfers)
Transfer(const uavcan::IncomingTransfer &tr, const uavcan::DataTypeDescriptor &data_type)
uavcan::TransferType transfer_type
uavcan::NodeID dst_node_id
virtual bool isAnonymousTransfer() const
Transfer(uint64_t ts_monotonic, uint64_t ts_utc, uavcan::TransferPriority priority, uavcan::TransferType transfer_type, uavcan::TransferID transfer_id, uavcan::NodeID src_node_id, uavcan::NodeID dst_node_id, const std::string &payload, const uavcan::DataTypeDescriptor &data_type)
unsigned getNumReceivedTransfers() const
static const NodeID Broadcast
virtual int read(unsigned offset, uint8_t *data, unsigned len) const =0
virtual void deallocate(const void *)
NodeID getSrcNodeID() const
virtual void * allocate(std::size_t)
Transfer(uavcan::MonotonicTime ts_monotonic, uavcan::UtcTime ts_utc, uavcan::TransferPriority priority, uavcan::TransferType transfer_type, uavcan::TransferID transfer_id, uavcan::NodeID src_node_id, uavcan::NodeID dst_node_id, const std::string &payload, const uavcan::DataTypeDescriptor &data_type)
uavcan::NodeID dst_node_id_
uavcan::TransferID transfer_id
const DataTypeSignature & getSignature() const
IncomingTransferEmulatorBase(uavcan::NodeID dst_node_id)
TransferType getTransferType() const
static MonotonicDuration fromUSec(int64_t us)
virtual uint16_t getBlockCapacity() const