mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-31 07:31:35 +08:00
Fixed template instantiation of ServiceResponseTransferListener<>
This commit is contained in:
@@ -115,7 +115,11 @@ public:
|
|||||||
/**
|
/**
|
||||||
* This helper class does some compile-time magic on the transport layer machinery. For authorized personnel only.
|
* This helper class does some compile-time magic on the transport layer machinery. For authorized personnel only.
|
||||||
*/
|
*/
|
||||||
template <typename DataStruct_, unsigned NumStaticReceivers_, unsigned NumStaticBufs_>
|
template <typename DataStruct_,
|
||||||
|
unsigned NumStaticReceivers_,
|
||||||
|
unsigned NumStaticBufs_,
|
||||||
|
template<unsigned, unsigned, unsigned> class TransferListenerTemplate = TransferListener
|
||||||
|
>
|
||||||
class UAVCAN_EXPORT TransferListenerInstantiationHelper
|
class UAVCAN_EXPORT TransferListenerInstantiationHelper
|
||||||
{
|
{
|
||||||
enum { DataTypeMaxByteLen = BitLenToByteLen<DataStruct_::MaxBitLen>::Result };
|
enum { DataTypeMaxByteLen = BitLenToByteLen<DataStruct_::MaxBitLen>::Result };
|
||||||
@@ -130,7 +134,7 @@ class UAVCAN_EXPORT TransferListenerInstantiationHelper
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef TransferListener<BufferSize, NumStaticBufs, NumStaticReceivers> Type;
|
typedef TransferListenerTemplate<BufferSize, NumStaticBufs, NumStaticReceivers> Type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ namespace uavcan
|
|||||||
template <typename ServiceDataType>
|
template <typename ServiceDataType>
|
||||||
class UAVCAN_EXPORT ServiceResponseTransferListenerInstantiationHelper
|
class UAVCAN_EXPORT ServiceResponseTransferListenerInstantiationHelper
|
||||||
{
|
{
|
||||||
enum { DataTypeMaxByteLen = BitLenToByteLen<ServiceDataType::Response::MaxBitLen>::Result };
|
public: // so much templating it hurts
|
||||||
public:
|
typedef typename TransferListenerInstantiationHelper<typename ServiceDataType::Response,
|
||||||
typedef ServiceResponseTransferListener<DataTypeMaxByteLen> Type;
|
1, 1, ServiceResponseTransferListener>::Type Type;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -167,15 +167,13 @@ public:
|
|||||||
/**
|
/**
|
||||||
* This class should be derived by callers.
|
* This class should be derived by callers.
|
||||||
*/
|
*/
|
||||||
template <unsigned MaxBufSize>
|
template <unsigned MaxBufSize, unsigned NumStaticBufs, unsigned NumStaticReceivers>
|
||||||
class UAVCAN_EXPORT ServiceResponseTransferListener
|
class UAVCAN_EXPORT ServiceResponseTransferListener
|
||||||
#if UAVCAN_TINY
|
: public TransferListener<MaxBufSize, NumStaticBufs, NumStaticReceivers>
|
||||||
: public TransferListener<MaxBufSize, 0, 0>
|
|
||||||
#else
|
|
||||||
: public TransferListener<MaxBufSize, 1, 1>
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef TransferListener<MaxBufSize, NumStaticBufs, NumStaticReceivers> BaseType;
|
||||||
|
|
||||||
struct ExpectedResponseParams
|
struct ExpectedResponseParams
|
||||||
{
|
{
|
||||||
NodeID src_node_id;
|
NodeID src_node_id;
|
||||||
@@ -201,8 +199,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef TransferListener<MaxBufSize, 1, 1> BaseType;
|
|
||||||
|
|
||||||
ExpectedResponseParams response_params_;
|
ExpectedResponseParams response_params_;
|
||||||
|
|
||||||
void handleFrame(const RxFrame& frame);
|
void handleFrame(const RxFrame& frame);
|
||||||
@@ -225,8 +221,8 @@ public:
|
|||||||
/*
|
/*
|
||||||
* ServiceResponseTransferListener<>
|
* ServiceResponseTransferListener<>
|
||||||
*/
|
*/
|
||||||
template <unsigned MaxBufSize>
|
template <unsigned MaxBufSize, unsigned NumStaticBufs, unsigned NumStaticReceivers>
|
||||||
void ServiceResponseTransferListener<MaxBufSize>::handleFrame(const RxFrame& frame)
|
void ServiceResponseTransferListener<MaxBufSize, NumStaticBufs, NumStaticReceivers>::handleFrame(const RxFrame& frame)
|
||||||
{
|
{
|
||||||
if (response_params_.match(frame))
|
if (response_params_.match(frame))
|
||||||
{
|
{
|
||||||
@@ -234,14 +230,15 @@ void ServiceResponseTransferListener<MaxBufSize>::handleFrame(const RxFrame& fra
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <unsigned MaxBufSize>
|
template <unsigned MaxBufSize, unsigned NumStaticBufs, unsigned NumStaticReceivers>
|
||||||
void ServiceResponseTransferListener<MaxBufSize>::setExpectedResponseParams(const ExpectedResponseParams& erp)
|
void ServiceResponseTransferListener<MaxBufSize, NumStaticBufs, NumStaticReceivers>::setExpectedResponseParams(
|
||||||
|
const ExpectedResponseParams& erp)
|
||||||
{
|
{
|
||||||
response_params_ = erp;
|
response_params_ = erp;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <unsigned MaxBufSize>
|
template <unsigned MaxBufSize, unsigned NumStaticBufs, unsigned NumStaticReceivers>
|
||||||
void ServiceResponseTransferListener<MaxBufSize>::stopAcceptingAnything()
|
void ServiceResponseTransferListener<MaxBufSize, NumStaticBufs, NumStaticReceivers>::stopAcceptingAnything()
|
||||||
{
|
{
|
||||||
response_params_ = ExpectedResponseParams();
|
response_params_ = ExpectedResponseParams();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user