From e29b9e272326e487e4f7ae168ca6ac19a610e8ef Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Tue, 11 Mar 2025 21:29:25 +0100 Subject: [PATCH] Test and fix extract fan index and led index --- .../lightning_node_pro_led.c | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/10_lightning_node_pro_led/lightning_node_pro_led.c b/10_lightning_node_pro_led/lightning_node_pro_led.c index 384e4d4..8c1c0be 100644 --- a/10_lightning_node_pro_led/lightning_node_pro_led.c +++ b/10_lightning_node_pro_led/lightning_node_pro_led.c @@ -49,6 +49,22 @@ struct lnp_device { void *fans_data; }; +static inline int lnp_extract_fan_and_led_index(struct led_classdev *cdev, + int *fan_index, int *led_index) +{ + int ret; + + char *substr = strstr(cdev->name, "fan-"); + if (!substr) + return -EINVAL; + + ret = ret = sscanf(substr, "fan-%d-led-%d", fan_index, led_index); + if (ret != 2) + return -EINVAL; + + return 0; +} + static int lnp_rgb_let_brightness_set(struct led_classdev *cdev, enum led_brightness) { @@ -57,16 +73,14 @@ static int lnp_rgb_let_brightness_set(struct led_classdev *cdev, struct lnp_device *lnp_dev = hid_get_drvdata(hdev); int ret, fan_index, led_index; - ret = sscanf(cdev->name, "%*[^:]:%*[^:]:fan-%d-led-%d", &fan_index, - &led_index); - if (ret != 2) { + + ret = lnp_extract_fan_and_led_index(cdev, &fan_index, &led_index); + if (ret) { hid_warn(hdev, "Failed to get fan index and led_index for %s", lnp_dev->dev_name); - return -ENOMSG; + return ret; } - hid_info(hdev, "Fan Index: %d, Led Index: %d", fan_index, led_index); - struct lnp_fan *lnp_fan = lnp_dev->fans_data + fan_index; struct lnp_rgb_led *lnp_rgb_led = lnp_fan->rgb_leds_data + led_index;