input.cpp revision 682674154e3fe88f6061245145f934f25f1a2eb8
1a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn/* 2a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * Copyright (C) 2009 The Android Open Source Project 3a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * 4a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * you may not use this file except in compliance with the License. 6a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * You may obtain a copy of the License at 7a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * 8a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * 10a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 11a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * See the License for the specific language governing permissions and 14a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn * limitations under the License. 15a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn */ 16a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 17a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn#define LOG_TAG "input" 18a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn#include <utils/Log.h> 19a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 20a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn#include <android/input.h> 21a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn#include <ui/Input.h> 22a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn#include <ui/InputTransport.h> 23682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn#include <utils/PollLoop.h> 24a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 25a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn#include <poll.h> 26a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 27a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackbornusing android::InputEvent; 28a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackbornusing android::KeyEvent; 29a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackbornusing android::MotionEvent; 30a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 312e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AInputEvent_getType(const AInputEvent* event) { 32a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const InputEvent*>(event)->getType(); 33a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 34a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 352e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AInputEvent_getDeviceId(const AInputEvent* event) { 36a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const InputEvent*>(event)->getDeviceId(); 37a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 38a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 392e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AInputEvent_getNature(const AInputEvent* event) { 40a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const InputEvent*>(event)->getNature(); 41a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 42a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 432e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AKeyEvent_getAction(const AInputEvent* key_event) { 44a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const KeyEvent*>(key_event)->getAction(); 45a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 46a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 472e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AKeyEvent_getFlags(const AInputEvent* key_event) { 48a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const KeyEvent*>(key_event)->getFlags(); 49a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 50a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 512e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AKeyEvent_getKeyCode(const AInputEvent* key_event) { 52a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const KeyEvent*>(key_event)->getKeyCode(); 53a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 54a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 552e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AKeyEvent_getScanCode(const AInputEvent* key_event) { 56a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const KeyEvent*>(key_event)->getScanCode(); 57a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 58a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 592e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AKeyEvent_getMetaState(const AInputEvent* key_event) { 60a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const KeyEvent*>(key_event)->getMetaState(); 61a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 622e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AKeyEvent_getRepeatCount(const AInputEvent* key_event) { 63a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const KeyEvent*>(key_event)->getRepeatCount(); 64a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 65a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 662e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint64_t AKeyEvent_getDownTime(const AInputEvent* key_event) { 67a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const KeyEvent*>(key_event)->getDownTime(); 68a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 69a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 702e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint64_t AKeyEvent_getEventTime(const AInputEvent* key_event) { 71a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const KeyEvent*>(key_event)->getEventTime(); 72a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 73a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 742e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AMotionEvent_getAction(const AInputEvent* motion_event) { 75a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getAction(); 76a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 77a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 782e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AMotionEvent_getMetaState(const AInputEvent* motion_event) { 79a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getMetaState(); 80a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 81a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 822e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AMotionEvent_getEdgeFlags(const AInputEvent* motion_event) { 83a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return reinterpret_cast<const MotionEvent*>(motion_event)->getEdgeFlags(); 84a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 85a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 862e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint64_t AMotionEvent_getDownTime(const AInputEvent* motion_event) { 87a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getDownTime(); 88a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 89a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 902e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint64_t AMotionEvent_getEventTime(const AInputEvent* motion_event) { 91a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getEventTime(); 92a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 93a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 942e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getXOffset(const AInputEvent* motion_event) { 95a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getXOffset(); 96a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 97a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 982e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getYOffset(const AInputEvent* motion_event) { 99a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getYOffset(); 100a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 101a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1022e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getXPrecision(const AInputEvent* motion_event) { 103a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getXPrecision(); 104a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 105a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1062e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getYPrecision(const AInputEvent* motion_event) { 107a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getYPrecision(); 108a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 109a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1102e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornsize_t AMotionEvent_getPointerCount(const AInputEvent* motion_event) { 111a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getPointerCount(); 112a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 113a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1142e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AMotionEvent_getPointerId(const AInputEvent* motion_event, size_t pointer_index) { 115a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getPointerId(pointer_index); 116a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 117a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1182e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getRawX(const AInputEvent* motion_event, size_t pointer_index) { 119a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getRawX(pointer_index); 120a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 121a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1222e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getRawY(const AInputEvent* motion_event, size_t pointer_index) { 123a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getRawY(pointer_index); 124a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 125a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1262e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getX(const AInputEvent* motion_event, size_t pointer_index) { 127a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getX(pointer_index); 128a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 129a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1302e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getY(const AInputEvent* motion_event, size_t pointer_index) { 131a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getY(pointer_index); 132a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 133a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1342e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getPressure(const AInputEvent* motion_event, size_t pointer_index) { 135a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getPressure(pointer_index); 136a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 137a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1382e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getSize(const AInputEvent* motion_event, size_t pointer_index) { 139a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getSize(pointer_index); 140a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 141a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1422e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornsize_t AMotionEvent_getHistorySize(const AInputEvent* motion_event) { 143a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getHistorySize(); 144a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 145a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1462e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint64_t AMotionEvent_getHistoricalEventTime(AInputEvent* motion_event, 147a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn size_t history_index) { 148a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getHistoricalEventTime( 149a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn history_index); 150a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 151a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1522e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getHistoricalRawX(AInputEvent* motion_event, size_t pointer_index, 153a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn size_t history_index) { 154a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getHistoricalRawX( 155a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pointer_index, history_index); 156a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 157a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1582e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getHistoricalRawY(AInputEvent* motion_event, size_t pointer_index, 159a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn size_t history_index) { 160a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getHistoricalRawY( 161a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pointer_index, history_index); 162a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 163a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1642e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getHistoricalX(AInputEvent* motion_event, size_t pointer_index, 165a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn size_t history_index) { 166a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getHistoricalX( 167a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pointer_index, history_index); 168a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 169a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1702e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getHistoricalY(AInputEvent* motion_event, size_t pointer_index, 171a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn size_t history_index) { 172a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getHistoricalY( 173a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pointer_index, history_index); 174a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 175a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1762e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getHistoricalPressure(AInputEvent* motion_event, size_t pointer_index, 177a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn size_t history_index) { 178a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getHistoricalPressure( 179a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pointer_index, history_index); 180a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 181a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 1822e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornfloat AMotionEvent_getHistoricalSize(AInputEvent* motion_event, size_t pointer_index, 183a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn size_t history_index) { 184a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return static_cast<const MotionEvent*>(motion_event)->getHistoricalSize( 185a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pointer_index, history_index); 186a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 187a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 188682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackbornvoid AInputQueue_attachLooper(AInputQueue* queue, ALooper* looper, 189682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn ALooper_callbackFunc callback, void* data) { 190682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn queue->setPollLoop(static_cast<android::PollLoop*>(looper)); 191682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn ALooper_setCallback(looper, queue->getConsumer().getChannel()->getReceivePipeFd(), 192682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn POLLIN, callback, data); 193682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn} 194682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn 195682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackbornvoid AInputQueue_detachLooper(AInputQueue* queue) { 196682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn queue->getPollLoop()->removeCallback( 197682674154e3fe88f6061245145f934f25f1a2eb8Dianne Hackborn queue->getConsumer().getChannel()->getReceivePipeFd()); 198a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 199a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 2002e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint AInputQueue_hasEvents(AInputQueue* queue) { 201a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn struct pollfd pfd; 202a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 203a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pfd.fd = queue->getConsumer().getChannel()->getReceivePipeFd(); 204a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pfd.events = POLLIN; 205a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn pfd.revents = 0; 206a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 207a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn int nfd = poll(&pfd, 1, 0); 208a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn if (nfd <= 0) return nfd; 209a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return pfd.revents == POLLIN ? 1 : -1; 210a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 211a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 2122e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornint32_t AInputQueue_getEvent(AInputQueue* queue, AInputEvent** outEvent) { 213a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn *outEvent = NULL; 214a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 215a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn int32_t res = queue->getConsumer().receiveDispatchSignal(); 216a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn if (res != android::OK) { 217a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn LOGE("channel '%s' ~ Failed to receive dispatch signal. status=%d", 218a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn queue->getConsumer().getChannel()->getName().string(), res); 219a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return -1; 220a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn } 221a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 222a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn InputEvent* myEvent = NULL; 223a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn res = queue->consume(&myEvent); 224a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn if (res != android::OK) { 225a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn LOGW("channel '%s' ~ Failed to consume input event. status=%d", 226a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn queue->getConsumer().getChannel()->getName().string(), res); 227a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn queue->getConsumer().sendFinishedSignal(); 228a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return -1; 229a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn } 230a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 231a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn *outEvent = myEvent; 232a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn return 0; 233a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 234a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn 2352e9f93e8db509d5236229dc8540e0904c5dbb9f5Dianne Hackbornvoid AInputQueue_finishEvent(AInputQueue* queue, AInputEvent* event, 236a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn int handled) { 2373c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn if (!handled && ((InputEvent*)event)->getType() == INPUT_EVENT_TYPE_KEY 2383c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn && ((KeyEvent*)event)->hasDefaultAction()) { 2393c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn // The app didn't handle this, but it may have a default action 2403c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn // associated with it. We need to hand this back to Java to be 2413c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn // executed. 2423c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn queue->doDefaultKey((KeyEvent*)event); 2433c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn return; 2443c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn } 2453c80a4a044865bdf1289c7896baffa1c082d835cDianne Hackborn 246a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn int32_t res = queue->getConsumer().sendFinishedSignal(); 247a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn if (res != android::OK) { 248a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn LOGW("Failed to send finished signal on channel '%s'. status=%d", 249a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn queue->getConsumer().getChannel()->getName().string(), res); 250a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn } 251a95e4cb62f3642cb190d032dbf7dc40d9ecc6973Dianne Hackborn} 252