Move absolute axis validation from EventHub to InputDevice
We recently added a crash when a we receive a misconfigured event froma
device. However, it seems like our critera for determining if an
absolute axis is correctly configured has issues.
In this case, we ignore an axis if its min and max value are equal.
Since the min and max are inclusive, it's perfectly valid for them to be
equal. As long as evdev is reporting valid events, EventHub should
continue to track and report them.
Deeming axes with min and max values that are equal is an artificial
constraint we have placed in InputReader historically. To maintain that
same constraint as before, we move the validation to InputDevice.
Bug: 293156873
Test: Presubmit
Change-Id: Id7c841f2d06668536a1b61c0e9e5250c15aad550
diff --git a/services/inputflinger/reader/include/InputDevice.h b/services/inputflinger/reader/include/InputDevice.h
index aae3fe7..1cbcbf4 100644
--- a/services/inputflinger/reader/include/InputDevice.h
+++ b/services/inputflinger/reader/include/InputDevice.h
@@ -289,7 +289,18 @@
return mEventHub->getDeviceControllerNumber(mId);
}
inline status_t getAbsoluteAxisInfo(int32_t code, RawAbsoluteAxisInfo* axisInfo) const {
- return mEventHub->getAbsoluteAxisInfo(mId, code, axisInfo);
+ if (const auto status = mEventHub->getAbsoluteAxisInfo(mId, code, axisInfo); status != OK) {
+ return status;
+ }
+
+ // Validate axis info for InputDevice.
+ if (axisInfo->valid && axisInfo->minValue == axisInfo->maxValue) {
+ // Historically, we deem axes with the same min and max values as invalid to avoid
+ // dividing by zero when scaling by max - min.
+ // TODO(b/291772515): Perform axis info validation on a per-axis basis when it is used.
+ axisInfo->valid = false;
+ }
+ return OK;
}
inline bool hasRelativeAxis(int32_t code) const {
return mEventHub->hasRelativeAxis(mId, code);