mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-17 08:53:33 +08:00
data_type.hpp moved one level up from 'internal/'
This commit is contained in:
@@ -1,118 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cassert>
|
||||
#include <stdint.h>
|
||||
#include <algorithm>
|
||||
#include <uavcan/internal/transport/crc.hpp>
|
||||
|
||||
namespace uavcan
|
||||
{
|
||||
|
||||
enum DataTypeKind
|
||||
{
|
||||
DataTypeKindService,
|
||||
DataTypeKindMessage,
|
||||
NumDataTypeKinds
|
||||
};
|
||||
|
||||
/**
|
||||
* CRC-64-WE
|
||||
* Description: http://reveng.sourceforge.net/crc-catalogue/17plus.htm#crc.cat-bits.64
|
||||
* Initial value: 0xFFFFFFFFFFFFFFFF
|
||||
* Poly: 0x42F0E1EBA9EA3693
|
||||
* Reverse: no
|
||||
* Output xor: 0xFFFFFFFFFFFFFFFF
|
||||
* Check: 0x62EC59E3F1A4F00A
|
||||
*/
|
||||
class DataTypeSignatureCRC
|
||||
{
|
||||
uint64_t crc_;
|
||||
|
||||
public:
|
||||
static DataTypeSignatureCRC extend(uint64_t crc)
|
||||
{
|
||||
DataTypeSignatureCRC ret;
|
||||
ret.crc_ = crc ^ 0xFFFFFFFFFFFFFFFF;
|
||||
return ret;
|
||||
}
|
||||
|
||||
DataTypeSignatureCRC() : crc_(0xFFFFFFFFFFFFFFFF) { }
|
||||
|
||||
void add(uint8_t byte)
|
||||
{
|
||||
static const uint64_t Poly = 0x42F0E1EBA9EA3693;
|
||||
crc_ ^= uint64_t(byte) << 56;
|
||||
for (int i = 0; i < 8; i++)
|
||||
crc_ = (crc_ & (uint64_t(1) << 63)) ? (crc_ << 1) ^ Poly : crc_ << 1;
|
||||
}
|
||||
|
||||
void add(const uint8_t* bytes, unsigned int len)
|
||||
{
|
||||
assert(bytes);
|
||||
while (len--)
|
||||
add(*bytes++);
|
||||
}
|
||||
|
||||
uint64_t get() const { return crc_ ^ 0xFFFFFFFFFFFFFFFF; }
|
||||
};
|
||||
|
||||
|
||||
class DataTypeSignature
|
||||
{
|
||||
uint64_t value_;
|
||||
|
||||
void mixin64(uint64_t x);
|
||||
|
||||
DataTypeSignature() : value_(0) { }
|
||||
|
||||
public:
|
||||
static DataTypeSignature zero() { return DataTypeSignature(); }
|
||||
|
||||
explicit DataTypeSignature(uint64_t value) : value_(value) { }
|
||||
|
||||
void extend(DataTypeSignature dts);
|
||||
|
||||
TransferCRC toTransferCRC() const;
|
||||
|
||||
uint64_t get() const { return value_; }
|
||||
|
||||
bool operator==(DataTypeSignature rhs) const { return value_ == rhs.value_; }
|
||||
bool operator!=(DataTypeSignature rhs) const { return !operator==(rhs); }
|
||||
};
|
||||
|
||||
|
||||
struct DataTypeDescriptor
|
||||
{
|
||||
enum { MaxDataTypeID = Frame::MaxDataTypeID };
|
||||
|
||||
DataTypeKind kind;
|
||||
uint16_t id;
|
||||
DataTypeSignature signature;
|
||||
|
||||
DataTypeDescriptor()
|
||||
: kind(DataTypeKind(0))
|
||||
, id(0)
|
||||
, signature(DataTypeSignature::zero())
|
||||
{ }
|
||||
|
||||
DataTypeDescriptor(DataTypeKind kind, uint16_t id, const DataTypeSignature& signature)
|
||||
: kind(kind)
|
||||
, id(id)
|
||||
, signature(signature)
|
||||
{
|
||||
assert(id <= MaxDataTypeID);
|
||||
assert(kind < NumDataTypeKinds);
|
||||
}
|
||||
|
||||
bool operator!=(const DataTypeDescriptor& rhs) const { return !operator==(rhs); }
|
||||
bool operator==(const DataTypeDescriptor& rhs) const
|
||||
{
|
||||
return (kind == rhs.kind) && (id == rhs.id) && (signature == rhs.signature);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <bitset>
|
||||
#include <algorithm>
|
||||
#include <stdexcept>
|
||||
#include <typeinfo>
|
||||
#include <uavcan/internal/impl_constants.hpp>
|
||||
#include <uavcan/internal/util.hpp>
|
||||
#include <uavcan/internal/marshalling/type_util.hpp>
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
#include <uavcan/internal/linked_list.hpp>
|
||||
#include <uavcan/internal/map.hpp>
|
||||
#include <uavcan/internal/debug.hpp>
|
||||
#include <uavcan/internal/data_type.hpp>
|
||||
#include <uavcan/internal/transport/crc.hpp>
|
||||
#include <uavcan/data_type.hpp>
|
||||
|
||||
namespace uavcan
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cassert>
|
||||
#include <uavcan/internal/data_type.hpp>
|
||||
#include <uavcan/data_type.hpp>
|
||||
#include <uavcan/internal/transport/crc.hpp>
|
||||
#include <uavcan/internal/transport/transfer.hpp>
|
||||
#include <uavcan/internal/transport/dispatcher.hpp>
|
||||
|
||||
Reference in New Issue
Block a user