transfer_receiver.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #ifndef UAVCAN_TRANSPORT_TRANSFER_RECEIVER_HPP_INCLUDED
6 #define UAVCAN_TRANSPORT_TRANSFER_RECEIVER_HPP_INCLUDED
7 
8 #include <cstdlib>
12 
13 namespace uavcan
14 {
15 
17 {
18 public:
19  enum ResultCode { ResultNotComplete, ResultComplete, ResultSingleFrame };
20 
21  static const uint16_t MinTransferIntervalMSec = 1;
22  static const uint16_t MaxTransferIntervalMSec = 0xFFFF;
23  static const uint16_t DefaultTransferIntervalMSec = 1000;
24  static const uint16_t DefaultTidTimeoutMSec = 1000;
25 
27  {
28  return MonotonicDuration::fromMSec(DefaultTransferIntervalMSec);
29  }
30  static MonotonicDuration getMinTransferInterval() { return MonotonicDuration::fromMSec(MinTransferIntervalMSec); }
31  static MonotonicDuration getMaxTransferInterval() { return MonotonicDuration::fromMSec(MaxTransferIntervalMSec); }
32 
33 private:
34  enum { IfaceIndexNotSet = MaxCanIfaces };
35 
36  enum { ErrorCntMask = 31 };
37  enum { IfaceIndexMask = MaxCanIfaces };
38 
44 
46 
47  TransferID tid_; // 1 byte field
48 
49  // 1 byte aligned bitfields:
52  mutable uint8_t error_cnt_ : 5;
53 
54  bool isInitialized() const { return iface_index_ != IfaceIndexNotSet; }
55 
56  bool isMidTransfer() const { return buffer_write_pos_ > 0; }
57 
58  MonotonicDuration getIfaceSwitchDelay() const;
59  MonotonicDuration getTidTimeout() const;
60 
61  void registerError() const;
62 
63  void updateTransferTimings();
64  void prepareForNextTransfer();
65 
66  bool validate(const RxFrame& frame) const;
67  bool writePayload(const RxFrame& frame, ITransferBuffer& buf);
68  ResultCode receive(const RxFrame& frame, TransferBufferAccessor& tba);
69 
70 public:
72  transfer_interval_msec_(DefaultTransferIntervalMSec),
73  this_transfer_crc_(0),
74  buffer_write_pos_(0),
75  next_toggle_(false),
76  iface_index_(IfaceIndexNotSet),
77  error_cnt_(0)
78  { }
79 
80  bool isTimedOut(MonotonicTime current_ts) const;
81 
82  ResultCode addFrame(const RxFrame& frame, TransferBufferAccessor& tba);
83 
84  uint8_t yieldErrorCount();
85 
86  MonotonicTime getLastTransferTimestampMonotonic() const { return prev_transfer_ts_; }
87  UtcTime getLastTransferTimestampUtc() const { return first_frame_ts_; }
88 
89  uint16_t getLastTransferCrc() const { return this_transfer_crc_; }
90 
91  MonotonicDuration getInterval() const { return MonotonicDuration::fromMSec(transfer_interval_msec_); }
92 };
93 
94 }
95 
96 #endif // UAVCAN_TRANSPORT_TRANSFER_RECEIVER_HPP_INCLUDED
uavcan::TransferReceiver::getLastTransferTimestampUtc
UtcTime getLastTransferTimestampUtc() const
Definition: transfer_receiver.hpp:87
uavcan::TransferReceiver::prev_transfer_ts_
MonotonicTime prev_transfer_ts_
Definition: transfer_receiver.hpp:39
uavcan::TransferReceiver::this_transfer_ts_
MonotonicTime this_transfer_ts_
Definition: transfer_receiver.hpp:40
uavcan::TransferReceiver::error_cnt_
uint8_t error_cnt_
Definition: transfer_receiver.hpp:52
uavcan::TransferReceiver::isMidTransfer
bool isMidTransfer() const
Definition: transfer_receiver.hpp:56
uavcan::UtcTime
Implicitly convertible to/from uavcan.Timestamp.
Definition: time.hpp:191
uavcan::ITransferBuffer
Definition: abstract_transfer_buffer.hpp:16
uavcan::DurationBase< MonotonicDuration >::fromMSec
static MonotonicDuration fromMSec(int64_t ms)
Definition: time.hpp:41
uavcan::TransferReceiver::TransferReceiver
TransferReceiver()
Definition: transfer_receiver.hpp:71
uavcan::TransferBufferAccessor
Definition: transfer_buffer.hpp:180
uavcan::MonotonicDuration
Definition: time.hpp:182
uavcan::TransferReceiver::getLastTransferTimestampMonotonic
MonotonicTime getLastTransferTimestampMonotonic() const
Definition: transfer_receiver.hpp:86
uavcan::MaxCanIfaces
@ MaxCanIfaces
Definition: libuavcan/libuavcan/include/uavcan/driver/can.hpp:19
validate
ROSCPP_DECL bool validate(const std::string &name, std::string &error)
uavcan::uint16_t
std::uint16_t uint16_t
Definition: std.hpp:25
uavcan::TransferID
Definition: transfer.hpp:71
uavcan::TransferReceiver::getLastTransferCrc
uint16_t getLastTransferCrc() const
Definition: transfer_receiver.hpp:89
uavcan::uint8_t
std::uint8_t uint8_t
Definition: std.hpp:24
frame.hpp
uavcan::TransferReceiver::getMinTransferInterval
static MonotonicDuration getMinTransferInterval()
Definition: transfer_receiver.hpp:30
uavcan::RxFrame
Definition: frame.hpp:104
uavcan::TransferReceiver::first_frame_ts_
UtcTime first_frame_ts_
Definition: transfer_receiver.hpp:41
uavcan::TransferReceiver::tid_
TransferID tid_
Definition: transfer_receiver.hpp:47
uavcan::TransferReceiver::iface_index_
uint8_t iface_index_
Definition: transfer_receiver.hpp:51
uavcan::TransferReceiver::next_toggle_
uint8_t next_toggle_
Definition: transfer_receiver.hpp:50
uavcan::TransferReceiver::ResultCode
ResultCode
Definition: transfer_receiver.hpp:19
UAVCAN_EXPORT
#define UAVCAN_EXPORT
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:108
uavcan::TransferReceiver::buffer_write_pos_
uint16_t buffer_write_pos_
Definition: transfer_receiver.hpp:45
uavcan::TransferReceiver::getInterval
MonotonicDuration getInterval() const
Definition: transfer_receiver.hpp:91
uavcan::TransferReceiver
Definition: transfer_receiver.hpp:16
build_config.hpp
frame
uavcan::CanFrame frame
Definition: can.cpp:78
uavcan::TransferReceiver::this_transfer_crc_
uint16_t this_transfer_crc_
Definition: transfer_receiver.hpp:43
uavcan::TransferReceiver::isInitialized
bool isInitialized() const
Definition: transfer_receiver.hpp:54
uavcan::TransferReceiver::getDefaultTransferInterval
static MonotonicDuration getDefaultTransferInterval()
Definition: transfer_receiver.hpp:26
uavcan::TransferReceiver::transfer_interval_msec_
uint16_t transfer_interval_msec_
Definition: transfer_receiver.hpp:42
uavcan::MonotonicTime
Definition: time.hpp:184
uavcan
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:204
transfer_buffer.hpp
uavcan::TransferReceiver::getMaxTransferInterval
static MonotonicDuration getMaxTransferInterval()
Definition: transfer_receiver.hpp:31


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:03