Compare commits
No commits in common. "04de922e609a2817d93eb2da92f818deb57d603c" and "944299048fc0ffa7368b125e561feee95f9f76c7" have entirely different histories.
04de922e60
...
944299048f
3 changed files with 8 additions and 108 deletions
|
@ -3,13 +3,8 @@
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
|
||||||
static void virtual_led_brightness_set(struct led_classdev *led_cdev, enum led_brightness brightness) {
|
static void virtual_led_set_brightness(struct led_classdev *led_cdev, enum led_brightness brightness) {
|
||||||
pr_info("Luminosité défini sur la LED %s à %d\n", led_cdev->name, brightness);
|
pr_info("Luminosité défini sur la LED %s à %d", led_cdev->name, brightness);
|
||||||
}
|
|
||||||
|
|
||||||
static enum led_brightness virtual_led_brightness_get(struct led_classdev *led_cdev) {
|
|
||||||
pr_info("Luminosité lu sur la LED %s, valeur actuelle: %d\n", led_cdev->name, led_cdev->brightness);
|
|
||||||
return led_cdev->brightness;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct led_classdev virtual_led = {
|
static struct led_classdev virtual_led = {
|
||||||
|
@ -17,28 +12,27 @@ static struct led_classdev virtual_led = {
|
||||||
.color = LED_COLOR_ID_WHITE,
|
.color = LED_COLOR_ID_WHITE,
|
||||||
.brightness = 0,
|
.brightness = 0,
|
||||||
.max_brightness = 255,
|
.max_brightness = 255,
|
||||||
.brightness_set = virtual_led_brightness_set,
|
.brightness_set = virtual_led_set_brightness
|
||||||
.brightness_set = virtual_led_brightness_get
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init virtual_led_init(void) {
|
static int __init virtual_led_init(void) {
|
||||||
int ret;
|
int ret;
|
||||||
pr_info("Chargement du module pour la LED virtuelle\n");
|
pr_info("Chargement du module pour la LED virtuelle");
|
||||||
|
|
||||||
ret = led_classdev_register(NULL, &virtual_led);
|
ret = led_classdev_register(NULL, &virtual_led);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
pr_err("Impossible d'ajouter la LED virtuelle\n");
|
pr_err("Impossible d'ajouter la LED virtuelle");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_info("La LED virtuelle est ajouté\n");
|
pr_info("La LED virtuelle est ajouté");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit virtual_led_exit(void) {
|
static void __exit virtual_led_exit(void) {
|
||||||
pr_info("Déchargement du module pour la LED virtuelle\n");
|
pr_info("Déchargement du module pour la LED virtuelle");
|
||||||
led_classdev_unregister(&virtual_led);
|
led_classdev_unregister(&virtual_led);
|
||||||
pr_info("La LED virtuelle est bien retiré\n");
|
pr_info("La LED virtuelle est bien retiré");
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(virtual_led_init);
|
module_init(virtual_led_init);
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
obj-m += test_module.o
|
|
||||||
|
|
||||||
all:
|
|
||||||
make -C $(LINUX_MODULES_FOLDER)/build M=$(PWD) modules
|
|
||||||
|
|
||||||
clean:
|
|
||||||
make -C $(LINUX_MODULES_FOLDER)/build M=$(PWD) clean
|
|
|
@ -1,87 +0,0 @@
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/leds.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
|
|
||||||
#define NUM_LEDS 5
|
|
||||||
|
|
||||||
struct flo_device {
|
|
||||||
struct led_classdev *leds[NUM_LEDS];
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct flo_device flo_dev;
|
|
||||||
|
|
||||||
static void virtual_led_brightness_set(struct led_classdev *led_cdev, enum led_brightness brightness) {
|
|
||||||
pr_info("Luminosité défini sur la LED %s à %d\n", led_cdev->name, brightness);
|
|
||||||
}
|
|
||||||
|
|
||||||
static enum led_brightness virtual_led_brightness_get(struct led_classdev *led_cdev) {
|
|
||||||
pr_info("Luminosité lu sur la LED %s, valeur actuelle: %d\n", led_cdev->name, led_cdev->brightness);
|
|
||||||
return led_cdev->brightness;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init virtual_led_init(void) {
|
|
||||||
int ret, i;
|
|
||||||
pr_info("Chargement du module pour les LEDs virtuelles\n");
|
|
||||||
|
|
||||||
for (i = 0; i < NUM_LEDS; i++) {
|
|
||||||
struct led_classdev *led = kzalloc(sizeof(struct led_classdev), GFP_KERNEL);
|
|
||||||
if (!led) {
|
|
||||||
pr_err("Échec de l'allocation de mémoire pour la LED %d\n", i);
|
|
||||||
ret = -ENOMEM;
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
led->name = kasprintf(GFP_KERNEL, "flo-led:white:flo-%d", i + 1);
|
|
||||||
led->color = LED_COLOR_ID_WHITE;
|
|
||||||
led->brightness = 0;
|
|
||||||
led->max_brightness = 255;
|
|
||||||
led->brightness_set = virtual_led_brightness_set;
|
|
||||||
led->brightness_get = virtual_led_brightness_get;
|
|
||||||
|
|
||||||
ret = led_classdev_register(NULL, led);
|
|
||||||
if (ret < 0) {
|
|
||||||
pr_err("Impossible d'ajouter la LED virtuelle %d\n", i);
|
|
||||||
kfree(led->name);
|
|
||||||
kfree(led);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
flo_dev.leds[i] = led;
|
|
||||||
}
|
|
||||||
|
|
||||||
pr_info("Les LEDs virtuelles sont ajoutées\n");
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
for (i--; i >= 0; i--) {
|
|
||||||
led_classdev_unregister(flo_dev.leds[i]);
|
|
||||||
kfree(flo_dev.leds[i]->name);
|
|
||||||
kfree(flo_dev.leds[i]);
|
|
||||||
}
|
|
||||||
pr_err("Les LEDs virtuelles n'ont pas pu être ajoutées\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __exit virtual_led_exit(void) {
|
|
||||||
int i;
|
|
||||||
pr_info("Déchargement du module pour les LEDs virtuelles\n");
|
|
||||||
|
|
||||||
for (i = 0; i < NUM_LEDS; i++) {
|
|
||||||
if (flo_dev.leds[i]) {
|
|
||||||
led_classdev_unregister(flo_dev.leds[i]);
|
|
||||||
kfree(flo_dev.leds[i]->name);
|
|
||||||
kfree(flo_dev.leds[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pr_info("Les LEDs virtuelles sont bien retirées\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(virtual_led_init);
|
|
||||||
module_exit(virtual_led_exit);
|
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_AUTHOR("Florian RICHER");
|
|
||||||
MODULE_DESCRIPTION("Un module noyau qui ajoute des LEDs virtuelles");
|
|
||||||
MODULE_VERSION("1.0");
|
|
Loading…
Add table
Reference in a new issue