1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker *
4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker *
8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker *
10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker */
16*38e8c45fSAndroid Build Coastguard Worker
17*38e8c45fSAndroid Build Coastguard Worker #pragma once
18*38e8c45fSAndroid Build Coastguard Worker
19*38e8c45fSAndroid Build Coastguard Worker #define LOG_TAG "InputReader"
20*38e8c45fSAndroid Build Coastguard Worker
21*38e8c45fSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
22*38e8c45fSAndroid Build Coastguard Worker #include <log/log.h>
23*38e8c45fSAndroid Build Coastguard Worker #include <log/log_event_list.h>
24*38e8c45fSAndroid Build Coastguard Worker
25*38e8c45fSAndroid Build Coastguard Worker #include <unordered_map>
26*38e8c45fSAndroid Build Coastguard Worker
27*38e8c45fSAndroid Build Coastguard Worker namespace android {
28*38e8c45fSAndroid Build Coastguard Worker
29*38e8c45fSAndroid Build Coastguard Worker /**
30*38e8c45fSAndroid Build Coastguard Worker * Log debug messages for each raw event received from the EventHub.
31*38e8c45fSAndroid Build Coastguard Worker * Enable this via "adb shell setprop log.tag.InputReaderRawEvents DEBUG".
32*38e8c45fSAndroid Build Coastguard Worker * This requires a restart on non-debuggable (e.g. user) builds, but should take effect immediately
33*38e8c45fSAndroid Build Coastguard Worker * on debuggable builds (e.g. userdebug).
34*38e8c45fSAndroid Build Coastguard Worker */
35*38e8c45fSAndroid Build Coastguard Worker bool debugRawEvents();
36*38e8c45fSAndroid Build Coastguard Worker
37*38e8c45fSAndroid Build Coastguard Worker /**
38*38e8c45fSAndroid Build Coastguard Worker * Log debug messages about virtual key processing.
39*38e8c45fSAndroid Build Coastguard Worker * Enable this via "adb shell setprop log.tag.InputReaderVirtualKeys DEBUG" (requires restart)
40*38e8c45fSAndroid Build Coastguard Worker */
41*38e8c45fSAndroid Build Coastguard Worker const bool DEBUG_VIRTUAL_KEYS =
42*38e8c45fSAndroid Build Coastguard Worker __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "VirtualKeys", ANDROID_LOG_INFO);
43*38e8c45fSAndroid Build Coastguard Worker
44*38e8c45fSAndroid Build Coastguard Worker /**
45*38e8c45fSAndroid Build Coastguard Worker * Log debug messages about pointers.
46*38e8c45fSAndroid Build Coastguard Worker * Enable this via "adb shell setprop log.tag.InputReaderPointers DEBUG" (requires restart)
47*38e8c45fSAndroid Build Coastguard Worker */
48*38e8c45fSAndroid Build Coastguard Worker const bool DEBUG_POINTERS =
49*38e8c45fSAndroid Build Coastguard Worker __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "Pointers", ANDROID_LOG_INFO);
50*38e8c45fSAndroid Build Coastguard Worker
51*38e8c45fSAndroid Build Coastguard Worker /**
52*38e8c45fSAndroid Build Coastguard Worker * Log debug messages about pointer assignment calculations.
53*38e8c45fSAndroid Build Coastguard Worker * Enable this via "adb shell setprop log.tag.InputReaderPointerAssignment DEBUG" (requires restart)
54*38e8c45fSAndroid Build Coastguard Worker */
55*38e8c45fSAndroid Build Coastguard Worker const bool DEBUG_POINTER_ASSIGNMENT =
56*38e8c45fSAndroid Build Coastguard Worker __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "PointerAssignment", ANDROID_LOG_INFO);
57*38e8c45fSAndroid Build Coastguard Worker
58*38e8c45fSAndroid Build Coastguard Worker /**
59*38e8c45fSAndroid Build Coastguard Worker * Log debug messages about gesture detection.
60*38e8c45fSAndroid Build Coastguard Worker * Enable this via "adb shell setprop log.tag.InputReaderGestures DEBUG" (requires restart)
61*38e8c45fSAndroid Build Coastguard Worker */
62*38e8c45fSAndroid Build Coastguard Worker const bool DEBUG_GESTURES =
63*38e8c45fSAndroid Build Coastguard Worker __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "Gestures", ANDROID_LOG_INFO);
64*38e8c45fSAndroid Build Coastguard Worker
65*38e8c45fSAndroid Build Coastguard Worker /**
66*38e8c45fSAndroid Build Coastguard Worker * Log debug messages about the vibrator.
67*38e8c45fSAndroid Build Coastguard Worker * Enable this via "adb shell setprop log.tag.InputReaderVibrator DEBUG" (requires restart)
68*38e8c45fSAndroid Build Coastguard Worker */
69*38e8c45fSAndroid Build Coastguard Worker const bool DEBUG_VIBRATOR =
70*38e8c45fSAndroid Build Coastguard Worker __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "Vibrator", ANDROID_LOG_INFO);
71*38e8c45fSAndroid Build Coastguard Worker
72*38e8c45fSAndroid Build Coastguard Worker /**
73*38e8c45fSAndroid Build Coastguard Worker * Log debug messages about fusing stylus data.
74*38e8c45fSAndroid Build Coastguard Worker * Enable this via "adb shell setprop log.tag.InputReaderStylusFusion DEBUG" (requires restart)
75*38e8c45fSAndroid Build Coastguard Worker */
76*38e8c45fSAndroid Build Coastguard Worker const bool DEBUG_STYLUS_FUSION =
77*38e8c45fSAndroid Build Coastguard Worker __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "StylusFusion", ANDROID_LOG_INFO);
78*38e8c45fSAndroid Build Coastguard Worker
79*38e8c45fSAndroid Build Coastguard Worker /**
80*38e8c45fSAndroid Build Coastguard Worker * Log detailed debug messages about input device lights.
81*38e8c45fSAndroid Build Coastguard Worker * Enable this via "adb shell setprop log.tag.InputReaderLightDetails DEBUG" (requires restart)
82*38e8c45fSAndroid Build Coastguard Worker */
83*38e8c45fSAndroid Build Coastguard Worker const bool DEBUG_LIGHT_DETAILS =
84*38e8c45fSAndroid Build Coastguard Worker __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "LightDetails", ANDROID_LOG_INFO);
85*38e8c45fSAndroid Build Coastguard Worker
86*38e8c45fSAndroid Build Coastguard Worker } // namespace android
87*38e8c45fSAndroid Build Coastguard Worker
88*38e8c45fSAndroid Build Coastguard Worker #define INDENT " "
89*38e8c45fSAndroid Build Coastguard Worker #define INDENT2 " "
90*38e8c45fSAndroid Build Coastguard Worker #define INDENT3 " "
91*38e8c45fSAndroid Build Coastguard Worker #define INDENT4 " "
92*38e8c45fSAndroid Build Coastguard Worker #define INDENT5 " "
93*38e8c45fSAndroid Build Coastguard Worker
94*38e8c45fSAndroid Build Coastguard Worker #include <input/Input.h>
95*38e8c45fSAndroid Build Coastguard Worker
96*38e8c45fSAndroid Build Coastguard Worker namespace android {
97*38e8c45fSAndroid Build Coastguard Worker
98*38e8c45fSAndroid Build Coastguard Worker // --- Static Functions ---
99*38e8c45fSAndroid Build Coastguard Worker
100*38e8c45fSAndroid Build Coastguard Worker template <typename T>
abs(const T & value)101*38e8c45fSAndroid Build Coastguard Worker inline static T abs(const T& value) {
102*38e8c45fSAndroid Build Coastguard Worker return value < 0 ? -value : value;
103*38e8c45fSAndroid Build Coastguard Worker }
104*38e8c45fSAndroid Build Coastguard Worker
105*38e8c45fSAndroid Build Coastguard Worker template <typename T>
min(const T & a,const T & b)106*38e8c45fSAndroid Build Coastguard Worker inline static T min(const T& a, const T& b) {
107*38e8c45fSAndroid Build Coastguard Worker return a < b ? a : b;
108*38e8c45fSAndroid Build Coastguard Worker }
109*38e8c45fSAndroid Build Coastguard Worker
avg(float x,float y)110*38e8c45fSAndroid Build Coastguard Worker inline static float avg(float x, float y) {
111*38e8c45fSAndroid Build Coastguard Worker return (x + y) / 2;
112*38e8c45fSAndroid Build Coastguard Worker }
113*38e8c45fSAndroid Build Coastguard Worker
toString(bool value)114*38e8c45fSAndroid Build Coastguard Worker static inline const char* toString(bool value) {
115*38e8c45fSAndroid Build Coastguard Worker return value ? "true" : "false";
116*38e8c45fSAndroid Build Coastguard Worker }
117*38e8c45fSAndroid Build Coastguard Worker
sourcesMatchMask(uint32_t sources,uint32_t sourceMask)118*38e8c45fSAndroid Build Coastguard Worker static inline bool sourcesMatchMask(uint32_t sources, uint32_t sourceMask) {
119*38e8c45fSAndroid Build Coastguard Worker return (sources & sourceMask & ~AINPUT_SOURCE_CLASS_MASK) != 0;
120*38e8c45fSAndroid Build Coastguard Worker }
121*38e8c45fSAndroid Build Coastguard Worker
122*38e8c45fSAndroid Build Coastguard Worker template <typename K, typename V>
getValueByKey(const std::unordered_map<K,V> & map,K key)123*38e8c45fSAndroid Build Coastguard Worker static inline std::optional<V> getValueByKey(const std::unordered_map<K, V>& map, K key) {
124*38e8c45fSAndroid Build Coastguard Worker auto it = map.find(key);
125*38e8c45fSAndroid Build Coastguard Worker std::optional<V> value = std::nullopt;
126*38e8c45fSAndroid Build Coastguard Worker if (it != map.end()) {
127*38e8c45fSAndroid Build Coastguard Worker value = it->second;
128*38e8c45fSAndroid Build Coastguard Worker }
129*38e8c45fSAndroid Build Coastguard Worker return value;
130*38e8c45fSAndroid Build Coastguard Worker }
131*38e8c45fSAndroid Build Coastguard Worker
132*38e8c45fSAndroid Build Coastguard Worker } // namespace android
133