|  | /* 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; | 
|  | }; |