mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-18 02:03:34 +08:00
First step in changing the CAN frame format - introduced various transfer lengths per transfer type
This commit is contained in:
@@ -124,7 +124,7 @@ template <typename DataStruct_,
|
||||
class UAVCAN_EXPORT TransferListenerInstantiationHelper
|
||||
{
|
||||
enum { DataTypeMaxByteLen = BitLenToByteLen<DataStruct_::MaxBitLen>::Result };
|
||||
enum { NeedsBuffer = int(DataTypeMaxByteLen) > int(MaxSingleFrameTransferPayloadLen) };
|
||||
enum { NeedsBuffer = int(DataTypeMaxByteLen) > int(GuaranteedPayloadLenPerFrame) };
|
||||
enum { BufferSize = NeedsBuffer ? DataTypeMaxByteLen : 0 };
|
||||
#if UAVCAN_TINY
|
||||
enum { NumStaticBufs = 0 };
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
* This implementation provides the buffer large enough to
|
||||
* serialize any UAVCAN data structure.
|
||||
*/
|
||||
template <unsigned MaxSize_ = MaxTransferPayloadLen>
|
||||
template <unsigned MaxSize_ = MaxPossibleTransferPayloadLen>
|
||||
class UAVCAN_EXPORT MarshalBufferProvider : public IMarshalBufferProvider
|
||||
{
|
||||
class Buffer : public IMarshalBuffer
|
||||
|
||||
@@ -60,7 +60,7 @@ template <std::size_t MemPoolSize_,
|
||||
unsigned OutgoingTransferMaxPayloadLen = 264
|
||||
#else
|
||||
unsigned OutgoingTransferRegistryStaticEntries = 10,
|
||||
unsigned OutgoingTransferMaxPayloadLen = MaxTransferPayloadLen
|
||||
unsigned OutgoingTransferMaxPayloadLen = MaxPossibleTransferPayloadLen
|
||||
#endif
|
||||
>
|
||||
class UAVCAN_EXPORT Node : public INode
|
||||
|
||||
@@ -11,10 +11,16 @@
|
||||
|
||||
namespace uavcan
|
||||
{
|
||||
/**
|
||||
* Refer to the UAVCAN specification for more info about transfers.
|
||||
*/
|
||||
static const unsigned MaxMessageBroadcastTransferPayloadLen = 126; ///< 16 frames, 8 bytes per frame, 2 byte CRC
|
||||
static const unsigned MaxMessageUnicastTransferPayloadLen = 110; ///< 16 frames, 7 bytes per frame, 2 byte CRC
|
||||
static const unsigned MaxServiceTransferPayloadLen = 439; ///< 63 frames, 7 bytes per frame, 2 byte CRC
|
||||
|
||||
static const unsigned MaxTransferPayloadLen = 439; ///< According to the specification.
|
||||
static const unsigned GuaranteedPayloadLenPerFrame = 7; ///< Guaranteed for all transfers, all CAN standards
|
||||
|
||||
static const unsigned MaxSingleFrameTransferPayloadLen = 7;
|
||||
static const unsigned MaxPossibleTransferPayloadLen = MaxServiceTransferPayloadLen;
|
||||
|
||||
enum TransferType
|
||||
{
|
||||
@@ -26,6 +32,27 @@ enum TransferType
|
||||
};
|
||||
|
||||
|
||||
static inline unsigned getMaxPayloadLenForTransferType(const TransferType type)
|
||||
{
|
||||
static const unsigned lens[NumTransferTypes] =
|
||||
{
|
||||
MaxServiceTransferPayloadLen,
|
||||
MaxServiceTransferPayloadLen,
|
||||
MaxMessageBroadcastTransferPayloadLen,
|
||||
MaxMessageUnicastTransferPayloadLen
|
||||
};
|
||||
if (static_cast<int>(type) < NumTransferTypes)
|
||||
{
|
||||
return lens[static_cast<int>(type)];
|
||||
}
|
||||
else
|
||||
{
|
||||
UAVCAN_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class UAVCAN_EXPORT TransferID
|
||||
{
|
||||
uint8_t value_;
|
||||
|
||||
Reference in New Issue
Block a user