Space optimized GenericSubscriber

This commit is contained in:
Pavel Kirienko
2014-04-09 17:19:31 +04:00
parent 44153e16db
commit 33bb1be4a1
2 changed files with 136 additions and 81 deletions
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
*/
#include <uavcan/node/generic_subscriber.hpp>
namespace uavcan
{
int GenericSubscriberBase::genericStart(TransferListenerBase* listener,
bool (Dispatcher::*registration_method)(TransferListenerBase*))
{
if (listener == NULL)
{
assert(0);
return -ErrLogic;
}
stop(listener);
if (!(node_.getDispatcher().*registration_method)(listener))
{
UAVCAN_TRACE("GenericSubscriber", "Failed to register transfer listener");
return -ErrInvalidTransferListener;
}
return 0;
}
void GenericSubscriberBase::stop(TransferListenerBase* listener)
{
if (listener != NULL)
{
node_.getDispatcher().unregisterMessageListener(listener);
node_.getDispatcher().unregisterServiceRequestListener(listener);
node_.getDispatcher().unregisterServiceResponseListener(listener);
}
}
}