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; }
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; }
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; } }