diff --git a/Makefile b/Makefile index 7f30b13..0578d38 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -MODULE_NAME := ch349_driver +MODULE_NAME := ch397_driver obj-m := $(MODULE_NAME).o SRC_DIR := src @@ -6,7 +6,7 @@ BUILD_DIR := build KDIR := /lib/modules/$(shell uname -r)/build -$(MODULE_NAME)-objs := $(SRC_DIR)/ch349_driver.o +$(MODULE_NAME)-objs := $(SRC_DIR)/ch397_driver.o ccflags-y := -std=gnu11 -Wno-declaration-after-statement diff --git a/README.md b/README.md index c03dbe5..29875e9 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ sudo update-initramfs -u ``` -En l'etat (5/2/26) le driver s'installe, s'attache au device ch349 puis creer une interface reseau sur la machine. on peut alors recuperer le nom de l'interface grace a : +En l'etat (5/2/26) le driver s'installe, s'attache au device ch397 puis creer une interface reseau sur la machine. on peut alors recuperer le nom de l'interface grace a : ``` ip a @@ -39,7 +39,7 @@ sudo ip addr add 192.168.1.100/24 dev sudo ip link set up ``` -ce qui nous permet ensuite, depuis une autre machine d'envoyer des pings a l'ip (192.168.1.100) qui sont ensuite parses en hexadecimal et affiches sur l'interface usb (visibles en executant dmesg | grep ch349) +ce qui nous permet ensuite, depuis une autre machine d'envoyer des pings a l'ip (192.168.1.100) qui sont ensuite parses en hexadecimal et affiches sur l'interface usb (visibles en executant dmesg | grep ch397) ## Todo diff --git a/docs/useful_commands.txt b/docs/useful_commands.txt index 6f973d5..1a05b48 100644 --- a/docs/useful_commands.txt +++ b/docs/useful_commands.txt @@ -11,4 +11,4 @@ make -- compile make clean -- clean make install -- build and load driver make uninstall -- deload driver -make bear -- use bear to generate compile_commands.json to fix lsp errors +make bear -- use bear to generate compile_commands.json to fix lsp errors (might need to manually tweak compile_commands.json to suppress some unsupported arguments errors) diff --git a/src/ch349_driver.c b/src/ch397_driver.c similarity index 77% rename from src/ch349_driver.c rename to src/ch397_driver.c index 1e81f83..390e2c7 100644 --- a/src/ch349_driver.c +++ b/src/ch397_driver.c @@ -12,10 +12,10 @@ #include #include -#define CH349_VENDOR_ID 0x1a86 -#define CH349_PRODUCT_ID 0x5397 +#define CH397_VENDOR_ID 0x1a86 +#define CH397_PRODUCT_ID 0x5397 -struct ch349_device { +struct ch397_device { struct usb_device *udev; struct usb_interface *interface; struct mutex io_mutex; @@ -28,14 +28,14 @@ struct ch349_device { struct net_device *netdev; }; -static const struct usb_device_id ch349_table[] = { +static const struct usb_device_id ch397_table[] = { { USB_DEVICE(CH349_VENDOR_ID, CH349_PRODUCT_ID) }, {} }; -MODULE_DEVICE_TABLE(usb, ch349_table); +MODULE_DEVICE_TABLE(usb, ch397_table); // Fonction pour récupérer la MAC -static int ch349_get_mac_address(struct ch349_device *dev, u8 *mac) +static int ch397_get_mac_address(struct ch397_device *dev, u8 *mac) { char buf[13]; int ret, i; @@ -62,7 +62,7 @@ static int ch349_get_mac_address(struct ch349_device *dev, u8 *mac) return 0; } -static void ch349_hexdump(const struct device *dev, const char *prefix, +static void ch397_hexdump(const struct device *dev, const char *prefix, const void *data, size_t len) { const unsigned char *buf = data; @@ -93,9 +93,9 @@ static void ch349_hexdump(const struct device *dev, const char *prefix, } } -static void ch349_read_callback(struct urb *urb) +static void ch397_read_callback(struct urb *urb) { - struct ch349_device *dev = urb->context; + struct ch397_device *dev = urb->context; struct net_device *netdev = dev->netdev; struct sk_buff *skb; @@ -105,9 +105,9 @@ static void ch349_read_callback(struct urb *urb) case 0: // Success! if (urb->actual_length > 0) { dev_info(&dev->interface->dev, - "ch349: Received %d bytes\n", + "ch397: Received %d bytes\n", urb->actual_length); - ch349_hexdump(&dev->interface->dev, "RX", + ch397_hexdump(&dev->interface->dev, "RX", urb->transfer_buffer, urb->actual_length); // Créer un sk_buff et passer au network stack @@ -126,10 +126,10 @@ static void ch349_read_callback(struct urb *urb) netdev->stats.rx_bytes += urb->actual_length; printk(KERN_INFO - "ch349: Packet passed to network stack\n"); + "ch397: Packet passed to network stack\n"); } else { netdev->stats.rx_dropped++; - printk(KERN_ERR "ch349: Cannot allocate skb\n"); + printk(KERN_ERR "ch397: Cannot allocate skb\n"); } } break; @@ -155,7 +155,7 @@ static void ch349_read_callback(struct urb *urb) } // Fonction pour démarrer la lecture -static int ch349_start_rx(struct ch349_device *dev) +static int ch397_start_rx(struct ch397_device *dev) { struct urb *urb; int retval; @@ -173,7 +173,7 @@ static int ch349_start_rx(struct ch349_device *dev) usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr), dev->bulk_in_buffer, dev->bulk_in_size, - ch349_read_callback, dev); + ch397_read_callback, dev); // Sauvegarder l'URB dans la structure dev->rx_urb = urb; @@ -193,7 +193,7 @@ static int ch349_start_rx(struct ch349_device *dev) } // Fonction pour arrêter la lecture -static void ch349_stop_rx(struct ch349_device *dev) +static void ch397_stop_rx(struct ch397_device *dev) { if (dev->rx_urb) { usb_kill_urb(dev->rx_urb); @@ -202,14 +202,14 @@ static void ch349_stop_rx(struct ch349_device *dev) } } -static int ch349_net_open(struct net_device *netdev) +static int ch397_net_open(struct net_device *netdev) { - struct ch349_device *dev = netdev_priv(netdev); + struct ch397_device *dev = netdev_priv(netdev); int retval; - printk(KERN_INFO "ch349: Interface UP\n"); + printk(KERN_INFO "ch397: Interface UP\n"); - retval = ch349_start_rx(dev); + retval = ch397_start_rx(dev); if (retval) return retval; @@ -218,20 +218,19 @@ static int ch349_net_open(struct net_device *netdev) return 0; } -static int ch349_net_stop(struct net_device *netdev) +static int ch397_net_stop(struct net_device *netdev) { - struct ch349_device *dev = netdev_priv(netdev); + struct ch397_device *dev = netdev_priv(netdev); - printk(KERN_INFO "ch349: Interface DOWN\n"); + printk(KERN_INFO "ch397: Interface DOWN\n"); netif_stop_queue(netdev); netif_carrier_off(netdev); - ch349_stop_rx(dev); - + ch397_stop_rx(dev); return 0; } -static void ch349_write_callback(struct urb *urb) +static void ch397_write_callback(struct urb *urb) { struct sk_buff *skb = urb->context; struct net_device *netdev = skb->dev; @@ -249,10 +248,10 @@ static void ch349_write_callback(struct urb *urb) usb_free_urb(urb); } -static netdev_tx_t ch349_start_xmit(struct sk_buff *skb, +static netdev_tx_t ch397_start_xmit(struct sk_buff *skb, struct net_device *netdev) { - struct ch349_device *dev = netdev_priv(netdev); + struct ch397_device *dev = netdev_priv(netdev); struct urb *urb; int retval; @@ -266,38 +265,38 @@ static netdev_tx_t ch349_start_xmit(struct sk_buff *skb, // Préparer l'URB (Bulk OUT) usb_fill_bulk_urb(urb, dev->udev, - usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr), - skb->data, skb->len, - ch349_write_callback, skb); + usb_sndbulkpipe(dev->udev, + dev->bulk_out_endpointAddr), + skb->data, skb->len, ch397_write_callback, skb); // Soumettre l'URB retval = usb_submit_urb(urb, GFP_ATOMIC); if (retval) { - dev_err(&dev->interface->dev, "Failed to submit TX URB: %d\n", retval); + dev_err(&dev->interface->dev, "Failed to submit TX URB: %d\n", + retval); usb_free_urb(urb); dev_kfree_skb(skb); netdev->stats.tx_errors++; } else { // Arrêter la queue si on a trop d'URB en vol (simplification ici: on laisse couler) - // netif_stop_queue(netdev); + // netif_stop_queue(netdev); } return NETDEV_TX_OK; } -static const struct net_device_ops ch349_netdev_ops = { - .ndo_open = ch349_net_open, - .ndo_stop = ch349_net_stop, - .ndo_start_xmit = ch349_start_xmit, +static const struct net_device_ops ch397_netdev_ops = { + .ndo_open = ch397_net_open, + .ndo_stop = ch397_net_stop, + .ndo_start_xmit = ch397_start_xmit, .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = eth_mac_addr, }; - -static int ch349_probe(struct usb_interface *interface, +static int ch397_probe(struct usb_interface *interface, const struct usb_device_id *id) { - struct ch349_device *dev; + struct ch397_device *dev; struct net_device *netdev; struct usb_endpoint_descriptor *endpoint; u8 mac[ETH_ALEN]; @@ -307,10 +306,9 @@ static int ch349_probe(struct usb_interface *interface, int config_val = udev->actconfig->desc.bConfigurationValue; int intf_num = interface->cur_altsetting->desc.bInterfaceNumber; - dev_info(&interface->dev, - "Probing CH349 device (config %d, interface %d)\n", - config_val, intf_num); + "Probing CH349 device (config %d, interface %d)\n", config_val, + intf_num); /* * This device exposes 3 USB configurations: @@ -337,7 +335,7 @@ static int ch349_probe(struct usb_interface *interface, } // Allouer net_device + notre structure - netdev = alloc_etherdev(sizeof(struct ch349_device)); + netdev = alloc_etherdev(sizeof(struct ch397_device)); if (!netdev) { dev_err(&interface->dev, "Cannot allocate netdev\n"); return -ENOMEM; @@ -363,9 +361,7 @@ static int ch349_probe(struct usb_interface *interface, } dev_info(&interface->dev, "Interface %d obtained (altsetting %d)\n", - intf_num, - interface->cur_altsetting->desc.bAlternateSetting); - + intf_num, interface->cur_altsetting->desc.bAlternateSetting); for (i = 0; i < interface->cur_altsetting->desc.bNumEndpoints; i++) { endpoint = &interface->cur_altsetting->endpoint[i].desc; @@ -406,11 +402,11 @@ static int ch349_probe(struct usb_interface *interface, } // Récupère la MAC - ch349_get_mac_address(dev, mac); + ch397_get_mac_address(dev, mac); eth_hw_addr_set(netdev, mac); // Configure net_device - netdev->netdev_ops = &ch349_netdev_ops; + netdev->netdev_ops = &ch397_netdev_ops; netdev->watchdog_timeo = 5 * HZ; usb_set_intfdata(interface, dev); @@ -425,10 +421,9 @@ static int ch349_probe(struct usb_interface *interface, netif_carrier_off(netdev); - dev_info(&interface->dev, "CH349 attached as %s (MAC: %pM)\n", + dev_info(&interface->dev, "CH397 attached as %s (MAC: %pM)\n", netdev->name, mac); - //retval = ch349_start_rx(dev); //if (retval) // goto error; @@ -444,9 +439,9 @@ error: return retval; } -static void ch349_disconnect(struct usb_interface *interface) +static void ch397_disconnect(struct usb_interface *interface) { - struct ch349_device *dev; + struct ch397_device *dev; struct net_device *netdev; dev = usb_get_intfdata(interface); @@ -457,18 +452,18 @@ static void ch349_disconnect(struct usb_interface *interface) usb_set_intfdata(interface, NULL); unregister_netdev(netdev); - ch349_stop_rx(dev); + ch397_stop_rx(dev); kfree(dev->bulk_in_buffer); usb_put_dev(dev->udev); free_netdev(netdev); - dev_info(&interface->dev, "CH349 device now disconnected\n"); + dev_info(&interface->dev, "CH397 device now disconnected\n"); } -static int ch349_suspend(struct usb_interface *intf, pm_message_t message) +static int ch397_suspend(struct usb_interface *intf, pm_message_t message) { - struct ch349_device *dev = usb_get_intfdata(intf); + struct ch397_device *dev = usb_get_intfdata(intf); if (!dev) return 0; @@ -479,9 +474,9 @@ static int ch349_suspend(struct usb_interface *intf, pm_message_t message) return 0; } -static int ch349_resume(struct usb_interface *intf) +static int ch397_resume(struct usb_interface *intf) { - struct ch349_device *dev = usb_get_intfdata(intf); + struct ch397_device *dev = usb_get_intfdata(intf); if (!dev) return 0; @@ -489,18 +484,18 @@ static int ch349_resume(struct usb_interface *intf) return 0; } -static struct usb_driver ch349_driver = { - .name = "ch349", - .probe = ch349_probe, - .disconnect = ch349_disconnect, - .suspend = ch349_suspend, - .resume = ch349_resume, - .id_table = ch349_table, +static struct usb_driver ch397_driver = { + .name = "ch397", + .probe = ch397_probe, + .disconnect = ch397_disconnect, + .suspend = ch397_suspend, + .resume = ch397_resume, + .id_table = ch397_table, .supports_autosuspend = 1, }; -module_usb_driver(ch349_driver); +module_usb_driver(ch397_driver); MODULE_AUTHOR("bob industries"); -MODULE_DESCRIPTION("Driver USB pour CH349A"); +MODULE_DESCRIPTION("Driver USB pour CH397A"); MODULE_LICENSE("GPL");