Input.cpp revision 5c225b1680e696ae8bbf505a1997d6f720672f74
1//
2// Copyright 2010 The Android Open Source Project
3//
4// Provides a pipe-based transport for native events in the NDK.
5//
6#define LOG_TAG "Input"
7
8//#define LOG_NDEBUG 0
9
10#include <ui/Input.h>
11
12namespace android {
13
14// class InputEvent
15
16void InputEvent::initialize(int32_t deviceId, int32_t nature) {
17    mDeviceId = deviceId;
18    mNature = nature;
19}
20
21// class KeyEvent
22
23void KeyEvent::initialize(
24        int32_t deviceId,
25        int32_t nature,
26        int32_t action,
27        int32_t flags,
28        int32_t keyCode,
29        int32_t scanCode,
30        int32_t metaState,
31        int32_t repeatCount,
32        nsecs_t downTime,
33        nsecs_t eventTime) {
34    InputEvent::initialize(deviceId, nature);
35    mAction = action;
36    mFlags = flags;
37    mKeyCode = keyCode;
38    mScanCode = scanCode;
39    mMetaState = metaState;
40    mRepeatCount = repeatCount;
41    mDownTime = downTime;
42    mEventTime = eventTime;
43}
44
45// class MotionEvent
46
47void MotionEvent::initialize(
48        int32_t deviceId,
49        int32_t nature,
50        int32_t action,
51        int32_t edgeFlags,
52        int32_t metaState,
53        float xOffset,
54        float yOffset,
55        float xPrecision,
56        float yPrecision,
57        nsecs_t downTime,
58        nsecs_t eventTime,
59        size_t pointerCount,
60        const int32_t* pointerIds,
61        const PointerCoords* pointerCoords) {
62    InputEvent::initialize(deviceId, nature);
63    mAction = action;
64    mEdgeFlags = edgeFlags;
65    mMetaState = metaState;
66    mXOffset = xOffset;
67    mYOffset = yOffset;
68    mXPrecision = xPrecision;
69    mYPrecision = yPrecision;
70    mDownTime = downTime;
71    mPointerIds.clear();
72    mPointerIds.appendArray(pointerIds, pointerCount);
73    mSampleEventTimes.clear();
74    mSamplePointerCoords.clear();
75    addSample(eventTime, pointerCoords);
76}
77
78void MotionEvent::addSample(
79        int64_t eventTime,
80        const PointerCoords* pointerCoords) {
81    mSampleEventTimes.push(eventTime);
82    mSamplePointerCoords.appendArray(pointerCoords, getPointerCount());
83}
84
85void MotionEvent::offsetLocation(float xOffset, float yOffset) {
86    mXOffset += xOffset;
87    mYOffset += yOffset;
88}
89
90} // namespace android
91
92// NDK APIs
93
94using android::InputEvent;
95using android::KeyEvent;
96using android::MotionEvent;
97
98int32_t input_event_get_type(const input_event_t* event) {
99    return reinterpret_cast<const InputEvent*>(event)->getType();
100}
101
102int32_t input_event_get_device_id(const input_event_t* event) {
103    return reinterpret_cast<const InputEvent*>(event)->getDeviceId();
104}
105
106int32_t input_event_get_nature(const input_event_t* event) {
107    return reinterpret_cast<const InputEvent*>(event)->getNature();
108}
109
110int32_t key_event_get_action(const input_event_t* key_event) {
111    return reinterpret_cast<const KeyEvent*>(key_event)->getAction();
112}
113
114int32_t key_event_get_flags(const input_event_t* key_event) {
115    return reinterpret_cast<const KeyEvent*>(key_event)->getFlags();
116}
117
118int32_t key_event_get_key_code(const input_event_t* key_event) {
119    return reinterpret_cast<const KeyEvent*>(key_event)->getKeyCode();
120}
121
122int32_t key_event_get_scan_code(const input_event_t* key_event) {
123    return reinterpret_cast<const KeyEvent*>(key_event)->getScanCode();
124}
125
126int32_t key_event_get_meta_state(const input_event_t* key_event) {
127    return reinterpret_cast<const KeyEvent*>(key_event)->getMetaState();
128}
129int32_t key_event_get_repeat_count(const input_event_t* key_event) {
130    return reinterpret_cast<const KeyEvent*>(key_event)->getRepeatCount();
131}
132
133int64_t key_event_get_down_time(const input_event_t* key_event) {
134    return reinterpret_cast<const KeyEvent*>(key_event)->getDownTime();
135}
136
137int64_t key_event_get_event_time(const input_event_t* key_event) {
138    return reinterpret_cast<const KeyEvent*>(key_event)->getEventTime();
139}
140
141int32_t motion_event_get_action(const input_event_t* motion_event) {
142    return reinterpret_cast<const MotionEvent*>(motion_event)->getAction();
143}
144
145int32_t motion_event_get_meta_state(const input_event_t* motion_event) {
146    return reinterpret_cast<const MotionEvent*>(motion_event)->getMetaState();
147}
148
149int32_t motion_event_get_edge_flags(const input_event_t* motion_event) {
150    return reinterpret_cast<const MotionEvent*>(motion_event)->getEdgeFlags();
151}
152
153int64_t motion_event_get_down_time(const input_event_t* motion_event) {
154    return reinterpret_cast<const MotionEvent*>(motion_event)->getDownTime();
155}
156
157int64_t motion_event_get_event_time(const input_event_t* motion_event) {
158    return reinterpret_cast<const MotionEvent*>(motion_event)->getEventTime();
159}
160
161float motion_event_get_x_offset(const input_event_t* motion_event) {
162    return reinterpret_cast<const MotionEvent*>(motion_event)->getXOffset();
163}
164
165float motion_event_get_y_offset(const input_event_t* motion_event) {
166    return reinterpret_cast<const MotionEvent*>(motion_event)->getYOffset();
167}
168
169float motion_event_get_x_precision(const input_event_t* motion_event) {
170    return reinterpret_cast<const MotionEvent*>(motion_event)->getXPrecision();
171}
172
173float motion_event_get_y_precision(const input_event_t* motion_event) {
174    return reinterpret_cast<const MotionEvent*>(motion_event)->getYPrecision();
175}
176
177size_t motion_event_get_pointer_count(const input_event_t* motion_event) {
178    return reinterpret_cast<const MotionEvent*>(motion_event)->getPointerCount();
179}
180
181int32_t motion_event_get_pointer_id(const input_event_t* motion_event, size_t pointer_index) {
182    return reinterpret_cast<const MotionEvent*>(motion_event)->getPointerId(pointer_index);
183}
184
185float motion_event_get_raw_x(const input_event_t* motion_event, size_t pointer_index) {
186    return reinterpret_cast<const MotionEvent*>(motion_event)->getRawX(pointer_index);
187}
188
189float motion_event_get_raw_y(const input_event_t* motion_event, size_t pointer_index) {
190    return reinterpret_cast<const MotionEvent*>(motion_event)->getRawY(pointer_index);
191}
192
193float motion_event_get_x(const input_event_t* motion_event, size_t pointer_index) {
194    return reinterpret_cast<const MotionEvent*>(motion_event)->getX(pointer_index);
195}
196
197float motion_event_get_y(const input_event_t* motion_event, size_t pointer_index) {
198    return reinterpret_cast<const MotionEvent*>(motion_event)->getY(pointer_index);
199}
200
201float motion_event_get_pressure(const input_event_t* motion_event, size_t pointer_index) {
202    return reinterpret_cast<const MotionEvent*>(motion_event)->getPressure(pointer_index);
203}
204
205float motion_event_get_size(const input_event_t* motion_event, size_t pointer_index) {
206    return reinterpret_cast<const MotionEvent*>(motion_event)->getSize(pointer_index);
207}
208
209size_t motion_event_get_history_size(const input_event_t* motion_event) {
210    return reinterpret_cast<const MotionEvent*>(motion_event)->getHistorySize();
211}
212
213int64_t motion_event_get_historical_event_time(input_event_t* motion_event,
214        size_t history_index) {
215    return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalEventTime(
216            history_index);
217}
218
219float motion_event_get_historical_raw_x(input_event_t* motion_event, size_t pointer_index,
220        size_t history_index) {
221    return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalRawX(
222            pointer_index, history_index);
223}
224
225float motion_event_get_historical_raw_y(input_event_t* motion_event, size_t pointer_index,
226        size_t history_index) {
227    return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalRawY(
228            pointer_index, history_index);
229}
230
231float motion_event_get_historical_x(input_event_t* motion_event, size_t pointer_index,
232        size_t history_index) {
233    return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalX(
234            pointer_index, history_index);
235}
236
237float motion_event_get_historical_y(input_event_t* motion_event, size_t pointer_index,
238        size_t history_index) {
239    return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalY(
240            pointer_index, history_index);
241}
242
243float motion_event_get_historical_pressure(input_event_t* motion_event, size_t pointer_index,
244        size_t history_index) {
245    return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalPressure(
246            pointer_index, history_index);
247}
248
249float motion_event_get_historical_size(input_event_t* motion_event, size_t pointer_index,
250        size_t history_index) {
251    return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalSize(
252            pointer_index, history_index);
253}
254