| /* Copyright (c) 2015 Google Inc |
| * Barret Rhoden <brho@cs.berkeley.edu> |
| * See LICENSE for details. */ |
| |
| #pragma once |
| |
| #include <ros/event.h> |
| |
| /* FD Tap commands. The commands get passed to the device, but intermediate |
| * code will process them to some extent. */ |
| #define FDTAP_CMD_ADD 1 |
| #define FDTAP_CMD_REM 2 |
| #define FDTAP_CMD_MOD 3 |
| |
| /* FD Tap Event/Filter types. These are somewhat a mix of kqueue and epoll |
| * filters and are in flux. For instance, we don't support things like |
| * ONESHOT/DISPATCH yet. |
| * |
| * When using these, you're communicating directly with the device, so really |
| * anything goes, but we'll try to standardize on a few flags. */ |
| #define FDTAP_FILT_READABLE 0x00000001 |
| #define FDTAP_FILT_WRITABLE 0x00000002 |
| #define FDTAP_FILT_WRITTEN 0x00000004 |
| #define FDTAP_FILT_DELETED 0x00000008 |
| #define FDTAP_FILT_ERROR 0x00000010 /* may overwrite *data */ |
| #define FDTAP_FILT_RENAME 0x00000020 |
| #define FDTAP_FILT_TRUNCATE 0x00000040 |
| #define FDTAP_FILT_ATTRIB 0x00000080 |
| #define FDTAP_FILT_PRIORITY 0x00000100 |
| #define FDTAP_FILT_HANGUP 0x00000200 |
| #define FDTAP_FILT_RDHUP 0x00000400 |
| |
| /* When an event on FD matches filter, that event will be sent to ev_q with |
| * ev_id, with an optional data blob passed back. The specifics will depend on |
| * the type of ev_q used. For a CEQ, the event will coalesce, and the data will |
| * be a 'last write wins'. */ |
| struct fd_tap_req { |
| int fd; |
| int cmd; |
| int filter; |
| int ev_id; |
| struct event_queue *ev_q; |
| void *data; |
| }; |