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 74% rename from src/ch349_driver.c rename to src/ch397_driver.c index f426ac1..b4743bd 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,15 +28,15 @@ struct ch349_device { struct net_device *netdev; }; -static const struct usb_device_id ch349_table[] = { - { USB_DEVICE_AND_INTERFACE_INFO(CH349_VENDOR_ID, CH349_PRODUCT_ID, +static const struct usb_device_id ch397_table[] = { + { USB_DEVICE_AND_INTERFACE_INFO(CH397_VENDOR_ID, CH397_PRODUCT_ID, USB_CLASS_CDC_DATA, 0, 0) }, {} }; -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; @@ -63,7 +63,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; @@ -94,9 +94,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; struct ethhdr *eth; @@ -106,9 +106,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 @@ -127,10 +127,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; @@ -156,7 +156,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; @@ -174,7 +174,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; @@ -194,7 +194,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); @@ -203,14 +203,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,50 +218,49 @@ 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); - ch349_stop_rx(dev); + ch397_stop_rx(dev); return 0; } -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) { // Pour l'instant, on drop juste les packets TX - //printk(KERN_INFO "ch349: TX packet dropped (not implemented yet)\n"); dev_kfree_skb(skb); netdev->stats.tx_dropped++; 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]; int i; int retval = -ENOMEM; - dev_info(&interface->dev, "Probing CH349 device\n"); + dev_info(&interface->dev, "Probing CH397 device\n"); // 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; @@ -323,11 +322,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); @@ -340,10 +339,9 @@ static int ch349_probe(struct usb_interface *interface, goto error; } - 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; @@ -359,9 +357,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); @@ -372,18 +370,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; @@ -394,9 +392,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; @@ -404,18 +402,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");