20 return static_cast<BusEvent*
>(filp->f_inode->i_private)->
open(filp);
25 return static_cast<BusEvent*
>(filp->f_inode->i_private)->
close(filp);
30 return static_cast<BusEvent*
>(filp->f_inode->i_private)->
poll(filp, fds, setup);
47 CriticalSectionLocker locker;
62 if (fds->revents != 0)
64 (void)sem_post(fds->sem);
112 if (register_driver(
DevName, &
file_ops_, 0666, static_cast<void*>(
this)) != 0)
120 (void)unregister_driver(
DevName);
130 CriticalSectionLocker locker;
150 fd->revents |= fd->events & POLLIN;
151 if ((fd->revents != 0) && (fd->sem->semcount <= 0))
153 (void)sem_post(fd->sem);
::file_operations file_ops_
static const char *const DevName
int removePollWaiter(::pollfd *fds)
int addPollWaiter(::pollfd *fds)
::pollfd * pollset_[MaxPollWaiters]
uavcan::MonotonicTime getMonotonic()
int poll(::file *filp, ::pollfd *fds, bool setup)
static int pollTrampoline(::file *filp, ::pollfd *fds, bool setup)
static int closeTrampoline(::file *filp)
void signalFromInterrupt()
static const unsigned MaxPollWaiters
bool hasReadableInterfaces() const
BusEvent(CanDriver &can_driver)
static int openTrampoline(::file *filp)
bool wait(uavcan::MonotonicDuration duration)