Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 690f8bed authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Add createAxis to reduce the size of a function

While refactoring input code to enable -Wshadow, I encountered the block
of code inside JoystickInputMapper that is used to create an Axis
object. This creation can be moved to a separate function for
simplicity.

Bug: 142017994
Test: atest inputflinger_tests
Change-Id: I76088ab054dcf24585837016fb57d6f2500ca5e3
parent 8bacaaec
Loading
Loading
Loading
Loading
+37 −30
Original line number Diff line number Diff line
@@ -123,42 +123,15 @@ void JoystickInputMapper::configure(nsecs_t when, const InputReaderConfiguration
            if (rawAxisInfo.valid) {
                // Map axis.
                AxisInfo axisInfo;
                bool explicitlyMapped = !getDeviceContext().mapAxis(abs, &axisInfo);
                const bool explicitlyMapped = !getDeviceContext().mapAxis(abs, &axisInfo);

                if (!explicitlyMapped) {
                    // Axis is not explicitly mapped, will choose a generic axis later.
                    axisInfo.mode = AxisInfo::MODE_NORMAL;
                    axisInfo.axis = -1;
                }

                // Apply flat override.
                int32_t rawFlat =
                        axisInfo.flatOverride < 0 ? rawAxisInfo.flat : axisInfo.flatOverride;

                // Calculate scaling factors and limits.
                Axis axis;
                if (axisInfo.mode == AxisInfo::MODE_SPLIT) {
                    float scale = 1.0f / (axisInfo.splitValue - rawAxisInfo.minValue);
                    float highScale = 1.0f / (rawAxisInfo.maxValue - axisInfo.splitValue);
                    axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped, scale, 0.0f, highScale,
                                    0.0f, 0.0f, 1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
                                    rawAxisInfo.resolution * scale);
                } else if (isCenteredAxis(axisInfo.axis)) {
                    float scale = 2.0f / (rawAxisInfo.maxValue - rawAxisInfo.minValue);
                    float offset = avg(rawAxisInfo.minValue, rawAxisInfo.maxValue) * -scale;
                    axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped, scale, offset, scale,
                                    offset, -1.0f, 1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
                                    rawAxisInfo.resolution * scale);
                } else {
                    float scale = 1.0f / (rawAxisInfo.maxValue - rawAxisInfo.minValue);
                    axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped, scale, 0.0f, scale,
                                    0.0f, 0.0f, 1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
                                    rawAxisInfo.resolution * scale);
                }

                // To eliminate noise while the joystick is at rest, filter out small variations
                // in axis values up front.
                axis.filter = axis.fuzz ? axis.fuzz : axis.flat * 0.25f;

                Axis axis = createAxis(axisInfo, rawAxisInfo, explicitlyMapped);
                mAxes.add(abs, axis);
            }
        }
@@ -198,6 +171,40 @@ void JoystickInputMapper::configure(nsecs_t when, const InputReaderConfiguration
    }
}

JoystickInputMapper::Axis JoystickInputMapper::createAxis(const AxisInfo& axisInfo,
                                                          const RawAbsoluteAxisInfo& rawAxisInfo,
                                                          bool explicitlyMapped) {
    // Apply flat override.
    int32_t rawFlat = axisInfo.flatOverride < 0 ? rawAxisInfo.flat : axisInfo.flatOverride;

    // Calculate scaling factors and limits.
    Axis axis;
    if (axisInfo.mode == AxisInfo::MODE_SPLIT) {
        float scale = 1.0f / (axisInfo.splitValue - rawAxisInfo.minValue);
        float highScale = 1.0f / (rawAxisInfo.maxValue - axisInfo.splitValue);
        axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped, scale, 0.0f, highScale, 0.0f, 0.0f,
                        1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
                        rawAxisInfo.resolution * scale);
    } else if (isCenteredAxis(axisInfo.axis)) {
        float scale = 2.0f / (rawAxisInfo.maxValue - rawAxisInfo.minValue);
        float offset = avg(rawAxisInfo.minValue, rawAxisInfo.maxValue) * -scale;
        axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped, scale, offset, scale, offset,
                        -1.0f, 1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
                        rawAxisInfo.resolution * scale);
    } else {
        float scale = 1.0f / (rawAxisInfo.maxValue - rawAxisInfo.minValue);
        axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped, scale, 0.0f, scale, 0.0f, 0.0f,
                        1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
                        rawAxisInfo.resolution * scale);
    }

    // To eliminate noise while the joystick is at rest, filter out small variations
    // in axis values up front.
    axis.filter = axis.fuzz ? axis.fuzz : axis.flat * 0.25f;

    return axis;
}

bool JoystickInputMapper::haveAxis(int32_t axisId) {
    size_t numAxes = mAxes.size();
    for (size_t i = 0; i < numAxes; i++) {
+3 −0
Original line number Diff line number Diff line
@@ -86,6 +86,9 @@ private:
        }
    };

    static Axis createAxis(const AxisInfo& AxisInfo, const RawAbsoluteAxisInfo& rawAxisInfo,
                           bool explicitlyMapped);

    // Axes indexed by raw ABS_* axis index.
    KeyedVector<int32_t, Axis> mAxes;