mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-21 03:03:34 +08:00
Partially implemented and fixed ServiceClient<>, 7 tests are failing
This commit is contained in:
@@ -222,10 +222,8 @@ private:
|
|||||||
TransferListenerType;
|
TransferListenerType;
|
||||||
typedef GenericSubscriber<DataType, ResponseType, TransferListenerType> SubscriberType;
|
typedef GenericSubscriber<DataType, ResponseType, TransferListenerType> SubscriberType;
|
||||||
|
|
||||||
#if 0
|
|
||||||
typedef Multiset<CallState, NumStaticCalls> CallRegistry;
|
typedef Multiset<CallState, NumStaticCalls> CallRegistry;
|
||||||
CallRegistry call_registry_;
|
CallRegistry call_registry_;
|
||||||
#endif
|
|
||||||
|
|
||||||
PublisherType publisher_;
|
PublisherType publisher_;
|
||||||
Callback callback_;
|
Callback callback_;
|
||||||
@@ -247,6 +245,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
explicit ServiceClient(INode& node, const Callback& callback = Callback())
|
explicit ServiceClient(INode& node, const Callback& callback = Callback())
|
||||||
: SubscriberType(node)
|
: SubscriberType(node)
|
||||||
|
, call_registry_(node.getAllocator())
|
||||||
, publisher_(node, getDefaultRequestTimeout())
|
, publisher_(node, getDefaultRequestTimeout())
|
||||||
, callback_(callback)
|
, callback_(callback)
|
||||||
{
|
{
|
||||||
@@ -300,15 +299,15 @@ public:
|
|||||||
const Callback& getCallback() const { return callback_; }
|
const Callback& getCallback() const { return callback_; }
|
||||||
void setCallback(const Callback& cb) { callback_ = cb; }
|
void setCallback(const Callback& cb) { callback_ = cb; }
|
||||||
|
|
||||||
#if 0
|
/**
|
||||||
|
* Complexity is O(N) of number of pending calls.
|
||||||
|
*/
|
||||||
unsigned getNumPendingCalls() const { return call_registry_.getSize(); }
|
unsigned getNumPendingCalls() const { return call_registry_.getSize(); }
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
/**
|
||||||
|
* Complexity is O(1).
|
||||||
|
*/
|
||||||
bool hasPendingCalls() const { return !call_registry_.isEmpty(); }
|
bool hasPendingCalls() const { return !call_registry_.isEmpty(); }
|
||||||
#else
|
|
||||||
bool hasPendingCalls() const { return false; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of failed attempts to decode received response. Generally, a failed attempt means either:
|
* Returns the number of failed attempts to decode received response. Generally, a failed attempt means either:
|
||||||
@@ -353,13 +352,9 @@ bool ServiceClient<DataType_, Callback_, NumStaticCalls_>::shouldAcceptFrame(con
|
|||||||
{
|
{
|
||||||
UAVCAN_ASSERT(frame.getTransferType() == TransferTypeServiceResponse); // Other types filtered out by dispatcher
|
UAVCAN_ASSERT(frame.getTransferType() == TransferTypeServiceResponse); // Other types filtered out by dispatcher
|
||||||
|
|
||||||
#if 0
|
return NULL != call_registry_.find(CallStateMatchingPredicate(ServiceCallID(frame.getSrcNodeID(),
|
||||||
return call_registry_.findFirst(CallStateMatchingPredicate(ServiceCallID(frame.getSrcNodeID(),
|
frame.getTransferID())));
|
||||||
frame.getTransferID()))) != NULL;
|
|
||||||
#else
|
|
||||||
(void)frame;
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
||||||
@@ -387,7 +382,6 @@ void ServiceClient<DataType_, Callback_, NumStaticCalls_>::handleTimeout(Service
|
|||||||
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
||||||
int ServiceClient<DataType_, Callback_, NumStaticCalls_>::addCallState(ServiceCallID call_id)
|
int ServiceClient<DataType_, Callback_, NumStaticCalls_>::addCallState(ServiceCallID call_id)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
if (call_registry_.isEmpty())
|
if (call_registry_.isEmpty())
|
||||||
{
|
{
|
||||||
const int subscriber_res = SubscriberType::startAsServiceResponseListener();
|
const int subscriber_res = SubscriberType::startAsServiceResponseListener();
|
||||||
@@ -398,30 +392,25 @@ int ServiceClient<DataType_, Callback_, NumStaticCalls_>::addCallState(ServiceCa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (call_registry_.add(CallState(SubscriberType::getNode(), *this, call_id)) == NULL)
|
if (NULL == call_registry_.template emplace<INode&, ServiceClientBase&, ServiceCallID>(SubscriberType::getNode(),
|
||||||
|
*this, call_id))
|
||||||
{
|
{
|
||||||
SubscriberType::stop();
|
SubscriberType::stop();
|
||||||
return -ErrMemory;
|
return -ErrMemory;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
|
||||||
(void)call_id;
|
|
||||||
return -ErrNotInited;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
||||||
int ServiceClient<DataType_, Callback_, NumStaticCalls_>::call(NodeID server_node_id,
|
int ServiceClient<DataType_, Callback_, NumStaticCalls_>::call(NodeID server_node_id, const RequestType& request)
|
||||||
const RequestType& request)
|
|
||||||
{
|
{
|
||||||
ServiceCallID dummy;
|
ServiceCallID dummy;
|
||||||
return call(server_node_id, request, dummy);
|
return call(server_node_id, request, dummy);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
||||||
int ServiceClient<DataType_, Callback_, NumStaticCalls_>::call(NodeID server_node_id,
|
int ServiceClient<DataType_, Callback_, NumStaticCalls_>::call(NodeID server_node_id, const RequestType& request,
|
||||||
const RequestType& request,
|
|
||||||
ServiceCallID& out_call_id)
|
ServiceCallID& out_call_id)
|
||||||
{
|
{
|
||||||
if (!try_implicit_cast<bool>(callback_, true))
|
if (!try_implicit_cast<bool>(callback_, true))
|
||||||
@@ -475,29 +464,23 @@ int ServiceClient<DataType_, Callback_, NumStaticCalls_>::call(NodeID server_nod
|
|||||||
return publisher_res;
|
return publisher_res;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return publisher_res;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
||||||
void ServiceClient<DataType_, Callback_, NumStaticCalls_>::cancel(ServiceCallID call_id)
|
void ServiceClient<DataType_, Callback_, NumStaticCalls_>::cancel(ServiceCallID call_id)
|
||||||
{
|
{
|
||||||
#if 0
|
call_registry_.removeFirstWhere(CallStateMatchingPredicate(call_id));
|
||||||
call_registry_.remove(call_id);
|
|
||||||
if (call_registry_.isEmpty())
|
if (call_registry_.isEmpty())
|
||||||
{
|
{
|
||||||
SubscriberType::stop();
|
SubscriberType::stop();
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
(void)call_id;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
template <typename DataType_, typename Callback_, unsigned NumStaticCalls_>
|
||||||
void ServiceClient<DataType_, Callback_, NumStaticCalls_>::cancelAll()
|
void ServiceClient<DataType_, Callback_, NumStaticCalls_>::cancelAll()
|
||||||
{
|
{
|
||||||
#if 0
|
call_registry_.clear();
|
||||||
call_registry_.removeAll();
|
|
||||||
#endif
|
|
||||||
SubscriberType::stop();
|
SubscriberType::stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user