diff --git a/10_lnp_usb_driver/Makefile b/10_lightning_node_pro_led/Makefile similarity index 65% rename from 10_lnp_usb_driver/Makefile rename to 10_lightning_node_pro_led/Makefile index b909b3c..a5dcb6f 100644 --- a/10_lnp_usb_driver/Makefile +++ b/10_lightning_node_pro_led/Makefile @@ -1,4 +1,6 @@ -obj-m += test_module.o +MODULE_NAME = lightning_node_pro_led + +obj-m += $(MODULE_NAME).o all: make -C $(LINUX_MODULES_FOLDER)/build M=$(PWD) modules diff --git a/10_lightning_node_pro_led/README.md b/10_lightning_node_pro_led/README.md new file mode 100644 index 0000000..dca7723 --- /dev/null +++ b/10_lightning_node_pro_led/README.md @@ -0,0 +1,19 @@ +## Tips + +1. Get info about device + +```console +$ lsusb -v -d : +``` + +2. Check if device is attached to driver + +```console +$ ls /sys/bus//drivers/ +``` + +If is attached to driver, it appear here. + +## Usefull links + +- https://github.com/torvalds/linux/blob/master/drivers/hid/hid-led.c \ No newline at end of file diff --git a/10_lightning_node_pro_led/lightning_node_pro_led.c b/10_lightning_node_pro_led/lightning_node_pro_led.c new file mode 100644 index 0000000..2f9ba8f --- /dev/null +++ b/10_lightning_node_pro_led/lightning_node_pro_led.c @@ -0,0 +1,40 @@ +#include +#include +#include + +#define USB_VENDOR_ID_CORSAIR 0x1b1c +#define USB_DEVICE_ID_LIGHTNING_NODE_PRO 0x0c0b + +static int lightning_node_pro_led_probe(struct hid_device *hdev, + const struct hid_device_id *id) +{ + pr_info("Détection USB pour Lightning Node Pro\n"); + + return 0; +} + +static void lightning_node_pro_led_remove(struct hid_device *dev) +{ + pr_info("Retrait USB pour Lightning Node Pro\n"); +} + +static struct hid_device_id lightning_node_pro_led_table[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, + USB_DEVICE_ID_LIGHTNING_NODE_PRO) }, + {} /* Entrée de terminaison */ +}; +MODULE_DEVICE_TABLE(hid, lightning_node_pro_led_table); + +static struct hid_driver lightning_node_pro_led_driver = { + .name = "lightning-node-pro", + .id_table = lightning_node_pro_led_table, + .probe = lightning_node_pro_led_probe, + .remove = lightning_node_pro_led_remove, +}; + +module_hid_driver(lightning_node_pro_led_driver); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Florian RICHER "); +MODULE_DESCRIPTION("Un module noyau pour utiliser le Lightning Node Pro LED"); +MODULE_VERSION("1.0"); \ No newline at end of file diff --git a/10_lnp_usb_driver/bind.sh b/10_lnp_usb_driver/bind.sh deleted file mode 100755 index dbd803c..0000000 --- a/10_lnp_usb_driver/bind.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -# Définir les détails du périphérique USB et des pilotes -VENDOR_ID="1b1c" -DEVICE_ID="0c0b" -NEW_DRIVER="lightning-node-pro" - -# Vérifier les identifiants avec lsusb -echo "Vérifiez que le périphérique est listé avec les identifiants corrects :" -lsusb | grep "${VENDOR_ID}:${DEVICE_ID}" - -# Trouver le chemin du périphérique USB -USB_DEVICE_PATH=$(find /sys/bus/usb/devices/*/ -type f -name 'idVendor' -execdir sh -c 'grep -q '"$VENDOR_ID"' idVendor && grep -q '"$DEVICE_ID"' idProduct && pwd' \; | head -n 1) - -if [ -z "$USB_DEVICE_PATH" ]; then - echo "Périphérique USB non trouvé" - exit 1 -fi - -echo "Chemin du périphérique USB : $USB_DEVICE_PATH" - -# Extraire l'identifiant du périphérique (par exemple, 1-10) -DEVICE_IDENTIFIER=$(basename "$USB_DEVICE_PATH") - -echo "Identifiant du périphérique : $DEVICE_IDENTIFIER" - -# Délier le périphérique USB du pilote actuel -echo "Délier le périphérique USB du pilote actuel..." -echo -n "$DEVICE_IDENTIFIER" | sudo tee "/sys/bus/usb/devices/$DEVICE_IDENTIFIER/driver/unbind" > /dev/null - -# Lier le périphérique USB au nouveau pilote -echo "Lier le périphérique USB au nouveau pilote..." -echo -n "$DEVICE_IDENTIFIER" | sudo tee "/sys/bus/usb/drivers/${NEW_DRIVER}/bind" > /dev/null - -echo "Périphérique USB lié avec succès au nouveau pilote" diff --git a/10_lnp_usb_driver/test_module.c b/10_lnp_usb_driver/test_module.c deleted file mode 100644 index 03ace2d..0000000 --- a/10_lnp_usb_driver/test_module.c +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include -#include - -#define USB_VENDOR_ID_CORSAIR 0x1b1c -#define USB_DEVICE_ID_LIGHTNING_NODE_PRO 0x0c0b - -static int lnp_driver_probe(struct usb_interface *interface, - const struct usb_device_id *id) -{ - pr_info("Détection USB pour Lightning Node Pro\n"); - - return 0; -} - -static struct usb_device_id lnp_driver_table[] = { - { USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_LIGHTNING_NODE_PRO) }, - {} /* Entrée de terminaison */ -}; -MODULE_DEVICE_TABLE(usb, lnp_driver_table); - -static struct usb_driver lnp_driver = { - .name = "lightning-node-pro", - .id_table = lnp_driver_table, - .probe = lnp_driver_probe, -}; - -static int __init lnp_usb_driver_init(void) -{ - int ret; - - ret = usb_register(&lnp_driver); - if (ret < 0) { - pr_err("lnp_usb_driver: Impossible d'enregistrer le pilote pour %s. Code d'erreur: %d\n", - lnp_driver.name, ret); - return -1; - } - - return 0; -} - -static void __exit lnp_usb_driver_exit(void) -{ - usb_deregister(&lnp_driver); -} - -module_init(lnp_usb_driver_init); -module_exit(lnp_usb_driver_exit); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Florian RICHER "); -MODULE_DESCRIPTION("Un module noyau pour utiliser le Lightning Node Pro LED"); -MODULE_VERSION("1.0"); \ No newline at end of file