26 #include <l4/sys/cxx/ipc_array> 47 typedef l4re_event_stream_id_t Event_stream_id;
48 typedef l4re_event_absinfo_t Event_absinfo;
50 class L4_EXPORT Event_stream_bitmap_h
53 static unsigned __get_idx(
unsigned idx)
54 {
return idx / (
sizeof(
unsigned long)*8); }
56 static unsigned long __get_mask(
unsigned idx)
57 {
return 1ul << (idx % (
sizeof(
unsigned long)*8)); }
59 static bool __get_bit(
unsigned long const *bm,
unsigned max,
unsigned idx)
62 return bm[__get_idx(idx)] & __get_mask(idx);
66 static void __set_bit(
unsigned long *bm,
unsigned max,
unsigned idx,
bool v)
72 bm[__get_idx(idx)] |= __get_mask(idx);
74 bm[__get_idx(idx)] &= ~__get_mask(idx);
78 class L4_EXPORT Event_stream_info
79 :
public l4re_event_stream_info_t,
80 private Event_stream_bitmap_h
83 bool get_propbit(
unsigned idx)
const 84 {
return __get_bit(propbits, L4RE_EVENT_PROP_MAX, idx); }
86 void set_propbit(
unsigned idx,
bool v)
87 { __set_bit(propbits, L4RE_EVENT_PROP_MAX, idx, v); }
89 bool get_evbit(
unsigned idx)
const 90 {
return __get_bit(evbits, L4RE_EVENT_EV_MAX, idx); }
92 void set_evbit(
unsigned idx,
bool v)
93 { __set_bit(evbits, L4RE_EVENT_EV_MAX, idx, v); }
95 bool get_keybit(
unsigned idx)
const 96 {
return __get_bit(keybits, L4RE_EVENT_KEY_MAX, idx); }
98 void set_keybit(
unsigned idx,
bool v)
99 { __set_bit(keybits, L4RE_EVENT_KEY_MAX, idx, v); }
101 bool get_relbit(
unsigned idx)
const 102 {
return __get_bit(relbits, L4RE_EVENT_REL_MAX, idx); }
104 void set_relbit(
unsigned idx,
bool v)
105 { __set_bit(relbits, L4RE_EVENT_REL_MAX, idx, v); }
107 bool get_absbit(
unsigned idx)
const 108 {
return __get_bit(absbits, L4RE_EVENT_ABS_MAX, idx); }
110 void set_absbit(
unsigned idx,
bool v)
111 { __set_bit(absbits, L4RE_EVENT_ABS_MAX, idx, v); }
113 bool get_swbit(
unsigned idx)
const 114 {
return __get_bit(swbits, L4RE_EVENT_SW_MAX, idx); }
116 void set_swbit(
unsigned idx,
bool v)
117 { __set_bit(swbits, L4RE_EVENT_SW_MAX, idx, v); }
120 class L4_EXPORT Event_stream_state
121 :
public l4re_event_stream_state_t,
122 private Event_stream_bitmap_h
125 bool get_keybit(
unsigned idx)
const 126 {
return __get_bit(keybits, L4RE_EVENT_KEY_MAX, idx); }
128 void set_keybit(
unsigned idx,
bool v)
129 { __set_bit(keybits, L4RE_EVENT_KEY_MAX, idx, v); }
131 bool get_swbit(
unsigned idx)
const 132 {
return __get_bit(swbits, L4RE_EVENT_SW_MAX, idx); }
134 void set_swbit(
unsigned idx,
bool v)
135 { __set_bit(swbits, L4RE_EVENT_SW_MAX, idx, v); }
156 L4_RPC(
long, get_num_streams, ());
157 L4_RPC(
long, get_stream_info, (
int idx, Event_stream_info *info));
158 L4_RPC(
long, get_stream_info_for_id, (
l4_umword_t stream_id, Event_stream_info *info));
163 long get_axis_info(
l4_umword_t stream_id,
unsigned naxes,
164 unsigned const *axis, Event_absinfo *info)
const throw()
167 return get_axis_info_t::call(c(), stream_id,
172 Event_stream_state *state));
178 get_stream_info_for_id_t,
180 get_stream_state_for_id_t
184 struct L4_EXPORT Default_event_payload
197 template<
typename PAYLOAD = Default_event_payload >
224 if (_current == _end)
234 for (
Event *i = _begin; i != _end; ++i)
246 : _current((
Event*)buffer), _begin(_current),
247 _end(_begin + size / sizeof(
Event))
279 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).