diff options
Diffstat (limited to 'include/ui')
-rw-r--r-- | include/ui/Input.h | 42 | ||||
-rw-r--r-- | include/ui/KeyLayoutMap.h | 12 | ||||
-rw-r--r-- | include/ui/Keyboard.h | 12 | ||||
-rwxr-xr-x | include/ui/KeycodeLabels.h | 43 |
4 files changed, 68 insertions, 41 deletions
diff --git a/include/ui/Input.h b/include/ui/Input.h index cb9327e..86ce098 100644 --- a/include/ui/Input.h +++ b/include/ui/Input.h @@ -170,10 +170,10 @@ struct InputConfiguration { * Pointer coordinate data. */ struct PointerCoords { - enum { MAX_AXES = 15 }; // 15 so that sizeof(PointerCoords) == 16 * 4 == 64 + enum { MAX_AXES = 14 }; // 14 so that sizeof(PointerCoords) == 64 // Bitfield of axes that are present in this structure. - uint32_t bits; // 32bits are enough for now, can raise to 64bit when needed + uint64_t bits; // Values of axes that are stored in this structure packed in order by axis id // for each axis that is present in the structure according to 'bits'. @@ -183,41 +183,9 @@ struct PointerCoords { bits = 0; } - inline float getAxisValue(int32_t axis) const { - uint32_t axisBit = 1 << axis; - if (!(bits & axisBit)) { - return 0; - } - uint32_t index = __builtin_popcount(bits & (axisBit - 1)); - return values[index]; - } - - inline status_t setAxisValue(int32_t axis, float value) { - uint32_t axisBit = 1 << axis; - uint32_t index = __builtin_popcount(bits & (axisBit - 1)); - if (!(bits & axisBit)) { - uint32_t count = __builtin_popcount(bits); - if (count >= MAX_AXES) { - tooManyAxes(axis); - return NO_MEMORY; - } - bits |= axisBit; - for (uint32_t i = count; i > index; i--) { - values[i] = values[i - 1]; - } - } - values[index] = value; - return OK; - } - - inline float* editAxisValue(int32_t axis) { - uint32_t axisBit = 1 << axis; - if (!(bits & axisBit)) { - return NULL; - } - uint32_t index = __builtin_popcount(bits & (axisBit - 1)); - return &values[index]; - } + float getAxisValue(int32_t axis) const; + status_t setAxisValue(int32_t axis, float value); + float* editAxisValue(int32_t axis); #ifdef HAVE_ANDROID_OS status_t readFromParcel(Parcel* parcel); diff --git a/include/ui/KeyLayoutMap.h b/include/ui/KeyLayoutMap.h index f0a6d00..904c8f3 100644 --- a/include/ui/KeyLayoutMap.h +++ b/include/ui/KeyLayoutMap.h @@ -25,7 +25,7 @@ namespace android { /** - * Describes a mapping from keyboard scan codes to Android key codes. + * Describes a mapping from keyboard scan codes and joystick axes to Android key codes and axes. */ class KeyLayoutMap { public: @@ -33,8 +33,10 @@ public: static status_t load(const String8& filename, KeyLayoutMap** outMap); - status_t map(int32_t scanCode, int32_t* keyCode, uint32_t* flags) const; - status_t findScanCodes(int32_t keyCode, Vector<int32_t>* outScanCodes) const; + status_t mapKey(int32_t scanCode, int32_t* keyCode, uint32_t* flags) const; + status_t findScanCodesForKey(int32_t keyCode, Vector<int32_t>* outScanCodes) const; + + status_t mapAxis(int32_t scanCode, int32_t* axis) const; private: struct Key { @@ -42,7 +44,8 @@ private: uint32_t flags; }; - KeyedVector<int32_t,Key> mKeys; + KeyedVector<int32_t, Key> mKeys; + KeyedVector<int32_t, int32_t> mAxes; KeyLayoutMap(); @@ -57,6 +60,7 @@ private: private: status_t parseKey(); + status_t parseAxis(); }; }; diff --git a/include/ui/Keyboard.h b/include/ui/Keyboard.h index 50296e2..54bc968 100644 --- a/include/ui/Keyboard.h +++ b/include/ui/Keyboard.h @@ -111,6 +111,18 @@ extern int32_t getKeyCodeByLabel(const char* label); extern uint32_t getKeyFlagByLabel(const char* label); /** + * Gets a axis by its short form label, eg. "X". + * Returns -1 if unknown. + */ +extern int32_t getAxisByLabel(const char* label); + +/** + * Gets a axis label by its id. + * Returns NULL if unknown. + */ +extern const char* getAxisLabel(int32_t axisId); + +/** * Updates a meta state field when a key is pressed or released. */ extern int32_t updateMetaState(int32_t keyCode, bool down, int32_t oldMetaState); diff --git a/include/ui/KeycodeLabels.h b/include/ui/KeycodeLabels.h index dbccf29..bdfbf7c 100755 --- a/include/ui/KeycodeLabels.h +++ b/include/ui/KeycodeLabels.h @@ -250,4 +250,47 @@ static const KeycodeLabel FLAGS[] = { { NULL, 0 } }; +static const KeycodeLabel AXES[] = { + { "X", 0 }, + { "Y", 1 }, + { "PRESSURE", 2 }, + { "SIZE", 3 }, + { "TOUCH_MAJOR", 4 }, + { "TOUCH_MINOR", 5 }, + { "TOOL_MAJOR", 6 }, + { "TOOL_MINOR", 7 }, + { "ORIENTATION", 8 }, + { "VSCROLL", 9 }, + { "HSCROLL", 10 }, + { "Z", 11 }, + { "RX", 12 }, + { "RY", 13 }, + { "RZ", 14 }, + { "HAT_X", 15 }, + { "HAT_Y", 16 }, + { "LTRIGGER", 17 }, + { "RTRIGGER", 18 }, + { "GENERIC_1", 32 }, + { "GENERIC_2", 33 }, + { "GENERIC_3", 34 }, + { "GENERIC_4", 35 }, + { "GENERIC_5", 36 }, + { "GENERIC_6", 37 }, + { "GENERIC_7", 38 }, + { "GENERIC_8", 39 }, + { "GENERIC_9", 40 }, + { "GENERIC_10", 41 }, + { "GENERIC_11", 42 }, + { "GENERIC_12", 43 }, + { "GENERIC_13", 44 }, + { "GENERIC_14", 45 }, + { "GENERIC_15", 46 }, + { "GENERIC_16", 47 }, + + // NOTE: If you add a new axis here you must also add it to several other files. + // Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list. + + { NULL, -1 } +}; + #endif // _UI_KEYCODE_LABELS_H |