STM32 NuttX driver: Edge-triggered poll(), sort of fixes #35

This commit is contained in:
Pavel Kirienko
2015-06-01 13:58:20 +03:00
parent 28e82797c2
commit 22787651e6
3 changed files with 14 additions and 33 deletions
@@ -194,8 +194,7 @@ class CanDriver : public uavcan::ICanDriver, uavcan::Noncopyable
public:
template <unsigned RxQueueCapacity>
CanDriver(CanRxItem (&rx_queue_storage)[UAVCAN_STM32_NUM_IFACES][RxQueueCapacity])
: update_event_(*this)
, if0_(bxcan::Can[0], update_event_, 0, rx_queue_storage[0], RxQueueCapacity)
: if0_(bxcan::Can[0], update_event_, 0, rx_queue_storage[0], RxQueueCapacity)
#if UAVCAN_STM32_NUM_IFACES > 1
, if1_(bxcan::Can[1], update_event_, 1, rx_queue_storage[1], RxQueueCapacity)
#endif
@@ -34,11 +34,9 @@ class BusEvent
chibios_rt::CounterSemaphore sem_;
public:
BusEvent(CanDriver& can_driver)
BusEvent()
: sem_(0)
{
(void)can_driver;
}
{ }
bool wait(uavcan::MonotonicDuration duration);
@@ -58,13 +56,15 @@ public:
#elif UAVCAN_STM32_NUTTX
/**
* All bus events are reported as POLLIN.
*/
class BusEvent : uavcan::Noncopyable
{
static const unsigned MaxPollWaiters = 8;
::file_operations file_ops_;
::pollfd* pollset_[MaxPollWaiters];
CanDriver& can_driver_;
bool signal_;
static int openTrampoline(::file* filp);
@@ -75,15 +75,13 @@ class BusEvent : uavcan::Noncopyable
int close(::file* filp);
int poll(::file* filp, ::pollfd* fds, bool setup);
unsigned makePollMask() const;
int addPollWaiter(::pollfd* fds);
int removePollWaiter(::pollfd* fds);
public:
static const char* const DevName;
BusEvent(CanDriver& can_driver);
BusEvent();
~BusEvent();
bool wait(uavcan::MonotonicDuration duration);