frame.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_FRAME_HPP_INCLUDED
6 #define UAVCAN_TRANSPORT_FRAME_HPP_INCLUDED
7 
8 #include <cassert>
11 #include <uavcan/build_config.hpp>
12 #include <uavcan/data_type.hpp>
13 
14 namespace uavcan
15 {
16 
18 {
19  enum { PayloadCapacity = 7 }; // Will be redefined when CAN FD is available
20 
21  uint8_t payload_[PayloadCapacity];
25  uint_fast8_t payload_len_;
31  bool toggle_;
32 
33 public:
34  Frame() :
35  transfer_type_(TransferType(NumTransferTypes)), // Invalid value
36  payload_len_(0),
37  start_of_transfer_(false),
38  end_of_transfer_(false),
39  toggle_(false)
40  { }
41 
42  Frame(DataTypeID data_type_id,
43  TransferType transfer_type,
44  NodeID src_node_id,
45  NodeID dst_node_id,
46  TransferID transfer_id) :
47  transfer_priority_(TransferPriority::Default),
48  transfer_type_(transfer_type),
49  data_type_id_(data_type_id),
50  payload_len_(0),
51  src_node_id_(src_node_id),
52  dst_node_id_(dst_node_id),
53  transfer_id_(transfer_id),
54  start_of_transfer_(false),
55  end_of_transfer_(false),
56  toggle_(false)
57  {
58  UAVCAN_ASSERT((transfer_type == TransferTypeMessageBroadcast) == dst_node_id.isBroadcast());
60  UAVCAN_ASSERT(src_node_id.isUnicast() ? (src_node_id != dst_node_id) : true);
61  }
62 
63  void setPriority(TransferPriority priority) { transfer_priority_ = priority; }
64  TransferPriority getPriority() const { return transfer_priority_; }
65 
69  uint8_t getPayloadCapacity() const { return PayloadCapacity; }
70  uint8_t setPayload(const uint8_t* data, unsigned len);
71 
72  unsigned getPayloadLen() const { return payload_len_; }
73  const uint8_t* getPayloadPtr() const { return payload_; }
74 
75  TransferType getTransferType() const { return transfer_type_; }
76  DataTypeID getDataTypeID() const { return data_type_id_; }
77  NodeID getSrcNodeID() const { return src_node_id_; }
78  NodeID getDstNodeID() const { return dst_node_id_; }
79  TransferID getTransferID() const { return transfer_id_; }
80 
81  void setStartOfTransfer(bool x) { start_of_transfer_ = x; }
82  void setEndOfTransfer(bool x) { end_of_transfer_ = x; }
83 
84  bool isStartOfTransfer() const { return start_of_transfer_; }
85  bool isEndOfTransfer() const { return end_of_transfer_; }
86 
87  void flipToggle() { toggle_ = !toggle_; }
88  bool getToggle() const { return toggle_; }
89 
90  bool parse(const CanFrame& can_frame);
91  bool compile(CanFrame& can_frame) const;
92 
93  bool isValid() const;
94 
95  bool operator!=(const Frame& rhs) const { return !operator==(rhs); }
96  bool operator==(const Frame& rhs) const;
97 
98 #if UAVCAN_TOSTRING
99  std::string toString() const;
100 #endif
101 };
102 
103 
105 {
109 
110 public:
112  : iface_index_(0)
113  { }
114 
115  RxFrame(const Frame& frame, MonotonicTime ts_mono, UtcTime ts_utc, uint8_t iface_index)
116  : ts_mono_(ts_mono)
117  , ts_utc_(ts_utc)
118  , iface_index_(iface_index)
119  {
120  *static_cast<Frame*>(this) = frame;
121  }
122 
123  bool parse(const CanRxFrame& can_frame);
124 
128  MonotonicTime getMonotonicTimestamp() const { return ts_mono_; }
129 
133  UtcTime getUtcTimestamp() const { return ts_utc_; }
134 
135  uint8_t getIfaceIndex() const { return iface_index_; }
136 
137 #if UAVCAN_TOSTRING
138  std::string toString() const;
139 #endif
140 };
141 
142 }
143 
144 #endif // UAVCAN_TRANSPORT_FRAME_HPP_INCLUDED
data_type.hpp
uavcan::RxFrame::getMonotonicTimestamp
MonotonicTime getMonotonicTimestamp() const
Definition: frame.hpp:128
uavcan::Frame::getPayloadCapacity
uint8_t getPayloadCapacity() const
Definition: frame.hpp:69
uavcan::operator==
UAVCAN_EXPORT EnableIf<!IsSameType< R, Array< T, ArrayMode, MaxSize > >::Result, bool >::Type operator==(const R &rhs, const Array< T, ArrayMode, MaxSize > &lhs)
Definition: array.hpp:1101
uavcan::RxFrame::getUtcTimestamp
UtcTime getUtcTimestamp() const
Definition: frame.hpp:133
uavcan::Frame::transfer_type_
TransferType transfer_type_
Definition: frame.hpp:23
uavcan::UtcTime
Implicitly convertible to/from uavcan.Timestamp.
Definition: time.hpp:191
uavcan::RxFrame::getIfaceIndex
uint8_t getIfaceIndex() const
Definition: frame.hpp:135
uavcan::Frame::isStartOfTransfer
bool isStartOfTransfer() const
Definition: frame.hpp:84
uavcan::RxFrame::iface_index_
uint8_t iface_index_
Definition: frame.hpp:108
uavcan::NodeID
Definition: transfer.hpp:112
uavcan::TransferType
TransferType
Definition: transfer.hpp:18
uavcan::RxFrame::ts_mono_
MonotonicTime ts_mono_
Definition: frame.hpp:106
uavcan::Frame::operator!=
bool operator!=(const Frame &rhs) const
Definition: frame.hpp:95
uavcan::Frame::getPriority
TransferPriority getPriority() const
Definition: frame.hpp:64
uavcan::CanFrame
Definition: libuavcan/libuavcan/include/uavcan/driver/can.hpp:24
uavcan::CanRxFrame
Definition: can_io.hpp:25
uavcan::Frame::transfer_id_
TransferID transfer_id_
Definition: frame.hpp:28
uavcan::Frame::getTransferID
TransferID getTransferID() const
Definition: frame.hpp:79
uavcan::NumTransferTypes
static const uint8_t NumTransferTypes
Definition: transfer.hpp:25
uavcan::Frame::setEndOfTransfer
void setEndOfTransfer(bool x)
Definition: frame.hpp:82
uavcan::TransferID
Definition: transfer.hpp:71
uavcan::uint8_t
std::uint8_t uint8_t
Definition: std.hpp:24
uavcan::DataTypeID
Definition: data_type.hpp:47
uavcan::Frame::transfer_priority_
TransferPriority transfer_priority_
Definition: frame.hpp:22
uavcan::TransferTypeMessageBroadcast
@ TransferTypeMessageBroadcast
Definition: transfer.hpp:22
uavcan::RxFrame
Definition: frame.hpp:104
transfer.hpp
uavcan::Frame::setPriority
void setPriority(TransferPriority priority)
Definition: frame.hpp:63
can_io.hpp
uavcan::NodeID::isUnicast
bool isUnicast() const
Definition: transfer.hpp:136
uavcan::Frame::getPayloadLen
unsigned getPayloadLen() const
Definition: frame.hpp:72
uavcan::Frame::dst_node_id_
NodeID dst_node_id_
Definition: frame.hpp:27
toString
static std::string toString(long x)
Definition: multiset.cpp:16
UAVCAN_EXPORT
#define UAVCAN_EXPORT
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:108
uavcan::Frame::src_node_id_
NodeID src_node_id_
Definition: frame.hpp:26
uavcan::getDataTypeKindForTransferType
static DataTypeKind getDataTypeKindForTransferType(const TransferType tt)
Definition: data_type.hpp:28
uavcan::TransferPriority
Definition: transfer.hpp:28
uavcan::RxFrame::RxFrame
RxFrame(const Frame &frame, MonotonicTime ts_mono, UtcTime ts_utc, uint8_t iface_index)
Definition: frame.hpp:115
uavcan::Frame::Frame
Frame(DataTypeID data_type_id, TransferType transfer_type, NodeID src_node_id, NodeID dst_node_id, TransferID transfer_id)
Definition: frame.hpp:42
build_config.hpp
frame
uavcan::CanFrame frame
Definition: can.cpp:78
uavcan::DataTypeID::isValidForDataTypeKind
bool isValidForDataTypeKind(DataTypeKind dtkind) const
Definition: data_type.hpp:64
uavcan::Frame::getDstNodeID
NodeID getDstNodeID() const
Definition: frame.hpp:78
uavcan::Frame::Frame
Frame()
Definition: frame.hpp:34
uavcan::Frame
Definition: frame.hpp:17
uavcan::Frame::getToggle
bool getToggle() const
Definition: frame.hpp:88
uavcan::Frame::getTransferType
TransferType getTransferType() const
Definition: frame.hpp:75
uavcan::RxFrame::ts_utc_
UtcTime ts_utc_
Definition: frame.hpp:107
uavcan::MonotonicTime
Definition: time.hpp:184
uavcan::Frame::setStartOfTransfer
void setStartOfTransfer(bool x)
Definition: frame.hpp:81
uavcan::Frame::getSrcNodeID
NodeID getSrcNodeID() const
Definition: frame.hpp:77
uavcan
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:204
uavcan::Frame::data_type_id_
DataTypeID data_type_id_
Definition: frame.hpp:24
uavcan::Frame::getPayloadPtr
const uint8_t * getPayloadPtr() const
Definition: frame.hpp:73
uavcan::Frame::toggle_
bool toggle_
Definition: frame.hpp:31
uavcan::Frame::getDataTypeID
DataTypeID getDataTypeID() const
Definition: frame.hpp:76
uavcan::Frame::end_of_transfer_
bool end_of_transfer_
Definition: frame.hpp:30
uavcan::NodeID::isBroadcast
bool isBroadcast() const
Definition: transfer.hpp:135
pyuavcan_v0.driver.timestamp_estimator.x
x
Definition: timestamp_estimator.py:221
uavcan::Frame::flipToggle
void flipToggle()
Definition: frame.hpp:87
UAVCAN_ASSERT
#define UAVCAN_ASSERT(x)
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:184
uavcan::Frame::start_of_transfer_
bool start_of_transfer_
Definition: frame.hpp:29
uavcan::Frame::payload_len_
uint_fast8_t payload_len_
Definition: frame.hpp:25
uavcan::Frame::isEndOfTransfer
bool isEndOfTransfer() const
Definition: frame.hpp:85
uavcan::RxFrame::RxFrame
RxFrame()
Definition: frame.hpp:111


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