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 noexcept
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)
230 Event_buffer_t() : _current(0), _begin(0), _end(0) {}
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;
286 typedef Event_buffer_t<Default_event_payload> Event_buffer;
L4::Cap related definitions.
Event_buffer_t(void *buffer, l4_addr_t size)
Initialize event buffer.
Event * next() noexcept
Next event in buffer.
bool put(Event const &ev) noexcept
Put event into buffer at current position.
C++ interface for capabilities.
Helper class to create an L4Re interface class that is derived from a single base class.
void l4_wmb(void)
Write memory barrier.
void l4_mb(void)
Memory barrier.
T1 max(T1 a, T1 b)
Get the maximum of a and b.
unsigned long l4_umword_t
Unsigned machine word.
unsigned long l4_addr_t
Address type.
Interface Definition Language.
#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).
Event structure used in buffer.
void free() noexcept
Free the entry.
long long time
Event time stamp.
Array data type for dynamically sized arrays in RPCs.
Mark an argument as a output value in an RPC signature.
Standard list of RPCs of an interface.