26 #include <l4/sys/cxx/ipc_array> 38 typedef l4re_event_stream_id_t Event_stream_id;
39 typedef l4re_event_absinfo_t Event_absinfo;
41 class L4_EXPORT Event_stream_bitmap_h
44 static unsigned __get_idx(
unsigned idx)
45 {
return idx / (
sizeof(
unsigned long)*8); }
47 static unsigned long __get_mask(
unsigned idx)
48 {
return 1ul << (idx % (
sizeof(
unsigned long)*8)); }
50 static bool __get_bit(
unsigned long const *bm,
unsigned max,
unsigned idx)
53 return bm[__get_idx(idx)] & __get_mask(idx);
57 static void __set_bit(
unsigned long *bm,
unsigned max,
unsigned idx,
bool v)
63 bm[__get_idx(idx)] |= __get_mask(idx);
65 bm[__get_idx(idx)] &= ~__get_mask(idx);
69 class L4_EXPORT Event_stream_info
70 :
public l4re_event_stream_info_t,
71 private Event_stream_bitmap_h
74 bool get_propbit(
unsigned idx)
const 75 {
return __get_bit(propbits, L4RE_EVENT_PROP_MAX, idx); }
77 void set_propbit(
unsigned idx,
bool v)
78 { __set_bit(propbits, L4RE_EVENT_PROP_MAX, idx, v); }
80 bool get_evbit(
unsigned idx)
const 81 {
return __get_bit(evbits, L4RE_EVENT_EV_MAX, idx); }
83 void set_evbit(
unsigned idx,
bool v)
84 { __set_bit(evbits, L4RE_EVENT_EV_MAX, idx, v); }
86 bool get_keybit(
unsigned idx)
const 87 {
return __get_bit(keybits, L4RE_EVENT_KEY_MAX, idx); }
89 void set_keybit(
unsigned idx,
bool v)
90 { __set_bit(keybits, L4RE_EVENT_KEY_MAX, idx, v); }
92 bool get_relbit(
unsigned idx)
const 93 {
return __get_bit(relbits, L4RE_EVENT_REL_MAX, idx); }
95 void set_relbit(
unsigned idx,
bool v)
96 { __set_bit(relbits, L4RE_EVENT_REL_MAX, idx, v); }
98 bool get_absbit(
unsigned idx)
const 99 {
return __get_bit(absbits, L4RE_EVENT_ABS_MAX, idx); }
101 void set_absbit(
unsigned idx,
bool v)
102 { __set_bit(absbits, L4RE_EVENT_ABS_MAX, idx, v); }
104 bool get_swbit(
unsigned idx)
const 105 {
return __get_bit(swbits, L4RE_EVENT_SW_MAX, idx); }
107 void set_swbit(
unsigned idx,
bool v)
108 { __set_bit(swbits, L4RE_EVENT_SW_MAX, idx, v); }
111 class L4_EXPORT Event_stream_state
112 :
public l4re_event_stream_state_t,
113 private Event_stream_bitmap_h
116 bool get_keybit(
unsigned idx)
const 117 {
return __get_bit(keybits, L4RE_EVENT_KEY_MAX, idx); }
119 void set_keybit(
unsigned idx,
bool v)
120 { __set_bit(keybits, L4RE_EVENT_KEY_MAX, idx, v); }
122 bool get_swbit(
unsigned idx)
const 123 {
return __get_bit(swbits, L4RE_EVENT_SW_MAX, idx); }
125 void set_swbit(
unsigned idx,
bool v)
126 { __set_bit(swbits, L4RE_EVENT_SW_MAX, idx, v); }
145 L4_RPC(
long, get_num_streams, ());
146 L4_RPC(
long, get_stream_info, (
int idx, Event_stream_info *info));
147 L4_RPC(
long, get_stream_info_for_id, (
l4_umword_t stream_id, Event_stream_info *info));
152 long get_axis_info(
l4_umword_t stream_id,
unsigned naxes,
153 unsigned const *axis, Event_absinfo *info)
const throw()
156 return get_axis_info_t::call(c(), stream_id,
161 Event_stream_state *state));
167 get_stream_info_for_id_t,
169 get_stream_state_for_id_t
173 struct L4_EXPORT Default_event_payload
186 template<
typename PAYLOAD = Default_event_payload >
213 if (_current == _end)
223 for (
Event *i = _begin; i != _end; ++i)
235 : _current((
Event*)buffer), _begin(_current),
236 _end(_begin + size / sizeof(
Event))
268 c->payload = ev.payload;
bool put(Event const &ev)
Put event into buffer at current position.
void l4_mb(void)
Memory barrier.
void free()
Free the entry.
Event * next()
Next event in buffer.
Standard list of RPCs of an interface.
void l4_wmb(void)
Write memory barrier.
long long time
Event time stamp.
Mark an argument as a output value in an RPC signature.
L4::Cap related definitions.
T1 max(T1 a, T1 b)
Get the maximum of a and b.
List of RPCs typically used for kernel interfaces.
unsigned long l4_umword_t
Unsigned machine word.
Interface Definition Language.
Event_buffer_t(void *buffer, l4_addr_t size)
Initialize event buffer.
Helper class to create an L4Re interface class that is derived from a single base class...
Event structure used in buffer.
C++ interface for capabilities.
Array data type for dynamically sized arrays in RPCs.
unsigned long l4_addr_t
Address type.
#define L4_RPC(res, name, args, attr...)
Define an RPC call (type and callable).
#define L4_RPC_NF(res, name, args...)
Define an RPC call type (the type only, no callable).