Example #1
0
static void
test_read_profile(struct ratbag_profile *profile, unsigned int index)
{
	struct ratbag_test_device *d = ratbag_get_drv_data(profile->device);
	struct ratbag_test_profile *p;
	struct ratbag_test_resolution *r;
	unsigned int i;

	assert(index < d->num_profiles);

	p = &d->profiles[index];
	profile->resolution.num_modes = p->num_resolutions;
	for (i = 0; i < p->num_resolutions; i++) {
		struct ratbag_resolution *res;

		r = &p->resolutions[i];
		res = ratbag_resolution_init(profile, i, r->xres, r->yres, r->hz);
		res->is_active = r->active;
		res->is_default = r->dflt;
		res->capabilities = r->caps;
		res->hz = r->hz;
		assert(res);
	}

	profile->is_active = p->active;
	profile->is_default = p->dflt;
}
Example #2
0
static int
hidpp20drv_read_resolution_dpi(struct ratbag_profile *profile)
{
    struct ratbag_device *device = profile->device;
    struct ratbag *ratbag = device->ratbag;
    struct hidpp20drv_data *drv_data = ratbag_get_drv_data(device);
    struct ratbag_resolution *res;
    int rc;
    unsigned int i;

    if (drv_data->capabilities & HIDPP_CAP_RESOLUTION_2200) {
        uint16_t resolution;
        uint8_t flags;

        rc = hidpp20_mousepointer_get_mousepointer_info(drv_data->dev, &resolution, &flags);
        if (rc) {
            log_error(ratbag,
                      "Error while requesting resolution: %s (%d)\n",
                      strerror(-rc), rc);
            return rc;
        }

        return 0;
    }

    if (drv_data->capabilities & HIDPP_CAP_SWITCHABLE_RESOLUTION_2201) {
        rc = hidpp20drv_read_resolution_dpi_2201(device);
        if (rc < 0)
            return rc;
        for (i = 0; i < profile->resolution.num_modes; i++) {
            int dpi = drv_data->sensors[i].dpi;
            /* FIXME: retrieve the refresh rate */
            res = ratbag_resolution_init(profile, i, dpi, dpi, 0);

            /* FIXME: we mark all resolutions as active because
             * they are from different sensors */
            res->is_active = true;
        }

        return 0;
    }

    return 0;
}
Example #3
0
static void
hidpp20drv_read_profile_8100(struct ratbag_profile *profile, unsigned int index)
{
    struct ratbag_device *device = profile->device;
    struct hidpp20drv_data *drv_data = ratbag_get_drv_data(device);
    struct ratbag_resolution *res;
    struct hidpp20_profile *p;
    unsigned i, dpi = 0;

    hidpp20drv_read_onboard_profile(device, profile->index);

    profile->is_active = false;
    if ((int)index == hidpp20drv_current_profile(device))
        profile->is_active = true;

    /* retrieve the resolution through 220X as the profile doesn't has it */
    if (profile->is_active)
        hidpp20drv_read_resolution_dpi(profile);

    dpi = ratbag_resolution_get_dpi(profile->resolution.modes);

    p = &drv_data->profiles->profiles[index];

    for (i = 0; i < profile->resolution.num_modes; i++) {
        res = ratbag_resolution_init(profile, i,
                                     p->dpi[i],
                                     p->dpi[i],
                                     p->report_rate);

        if (profile->is_active &&
                res->dpi_x == dpi)
            res->is_active = true;
        if (i == p->default_dpi)
            res->is_default = true;
    }
}