diff --git a/src/etekcity.c b/src/etekcity.c index 995816ec..bbcaacf7 100644 --- a/src/etekcity.c +++ b/src/etekcity.c @@ -93,6 +93,22 @@ print_key(__u8 key) return "UNKNOWN"; } +static int +etekcity_has_capability(const struct ratbag *ratbag, enum ratbag_capability cap) +{ + switch (cap) { + case RATBAG_CAP_NONE: + return 0; + case RATBAG_CAP_SWITCHABLE_RESOLUTION: + case RATBAG_CAP_SWITCHABLE_PROFILE: + case RATBAG_CAP_BUTTON_PROFILES: + case RATBAG_CAP_BUTTON_KEY: + case RATBAG_CAP_BUTTON_MACROS: + return 1; + } + return 0; +} + static int etekcity_current_profile(struct ratbag *ratbag) { @@ -223,4 +239,5 @@ struct ratbag_driver etekcity_driver = { .probe = etekcity_probe, .read_profile = etekcity_read_profile, .get_active_profile = etekcity_current_profile, + .has_capability = etekcity_has_capability, }; diff --git a/src/libratbag-private.h b/src/libratbag-private.h index ec2184bd..f1de5ade 100644 --- a/src/libratbag-private.h +++ b/src/libratbag-private.h @@ -68,6 +68,7 @@ struct ratbag_driver { int (*probe)(struct ratbag *ratbag, const struct ratbag_id id); void (*read_profile)(struct ratbag_profile *profile, unsigned int index); int (*get_active_profile)(struct ratbag *ratbag); + int (*has_capability)(const struct ratbag *ratbag, enum ratbag_capability cap); /* private */ struct list link; diff --git a/src/libratbag.c b/src/libratbag.c index 92b2c2f5..67dea27a 100644 --- a/src/libratbag.c +++ b/src/libratbag.c @@ -474,3 +474,10 @@ ratbag_get_num_buttons(struct ratbag *ratbag) { return ratbag->num_buttons; } + +LIBRATBAG_EXPORT int +ratbag_has_capability(const struct ratbag *ratbag, enum ratbag_capability cap) +{ + assert(ratbag->driver->has_capability); + return ratbag->driver->has_capability(ratbag, cap); +} diff --git a/src/libratbag.sym b/src/libratbag.sym index b5c0ebdd..19682a9f 100644 --- a/src/libratbag.sym +++ b/src/libratbag.sym @@ -10,6 +10,7 @@ global: ratbag_get_num_profiles; ratbag_get_num_buttons; ratbag_get_profile_by_index; + ratbag_has_capability; ratbag_new_from_fd; ratbag_profile_ref; ratbag_profile_unref;