最終更新:2013-11-19 (火) 23:23:13 (3804d)  

input_mt_report_pointer_emulation
Top / input_mt_report_pointer_emulation

/**
 * input_mt_report_pointer_emulation() - common pointer emulation
 * @dev: input device with allocated MT slots
 * @use_count: report number of active contacts as finger count
 *
 * Performs legacy pointer emulation via BTN_TOUCH, ABS_X, ABS_Y and
 * ABS_PRESSURE. Touchpad finger count is emulated if use_count is true.
 *
 * The input core ensures only the KEY and ABS axes already setup for
 * this device will produce output.
 */
void input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count)
{
        struct input_mt *mt = dev->mt;
        struct input_mt_slot *oldest;
        int oldid, count, i;

        if (!mt)
                return;

        oldest = NULL;
        oldid = mt->trkid;
        count = 0;

        for (i = 0; i < mt->num_slots; ++i) {
                struct input_mt_slot *ps = &mt->slots[i];
                int id = input_mt_get_value(ps, ABS_MT_TRACKING_ID);

                if (id < 0)
                        continue;
                if ((id - oldid) & TRKID_SGN) {
                        oldest = ps;
                        oldid = id;
                }
                count++;
        }

        input_event(dev, EV_KEY, BTN_TOUCH, count > 0);
        if (use_count)
                input_mt_report_finger_count(dev, count);

        if (oldest) {
                int x = input_mt_get_value(oldest, ABS_MT_POSITION_X);
                int y = input_mt_get_value(oldest, ABS_MT_POSITION_Y);

                input_event(dev, EV_ABS, ABS_X, x);
                input_event(dev, EV_ABS, ABS_Y, y);

                if (test_bit(ABS_MT_PRESSURE, dev->absbit)) {
                        int p = input_mt_get_value(oldest, ABS_MT_PRESSURE);
                        input_event(dev, EV_ABS, ABS_PRESSURE, p);
                }
        } else {
                if (test_bit(ABS_MT_PRESSURE, dev->absbit))
                        input_event(dev, EV_ABS, ABS_PRESSURE, 0);
        }
}

関連