# # Rules for Google Case Closed Debugging devices. # # The first rule matches the google VID and records the product name, USB bus # number and USB device path (the device path is the list of hub ports between # the root and the device). This becomes a unique directory name under which # later rules can create symlinks. If this rule doesn't match udev will skip # the rest of this files rules. # # This rule intentionally matches using SUBSYSTEMS and ATTRS instead of # SUBSYSTEM and ATTR so that the GOOGLE_CCD_NAME is available to all nodes # that descend from a Google USB device (this includes all USB interface nodes # as well as all of the TTY nodes derived from CCD USB interfaces). # SUBSYSTEMS=="usb", ATTRS{idVendor}=="18d1", ENV{GOOGLE_CCD_NAME}="$attr{product}-$attr{busnum}-$attr{devpath}" # # Force ModemManager to ignore all Google case closed debug devices. It would # be better to just ignore the case closed debug serial console interfaces, but # ModemManager doesn't look at the usb_interface udev node, it looks at the # usb_device node, so you have to mark the entire device as incompatible with # ModemManager. # # This node could lose the match against the usb_device DEVTYPE and still work, # it would just add extraneous ID_MM_DEVICE_IGNORE tags to the TTY and USB # interface nodes. # SUBSYSTEM=="usb", ENV{GOOGLE_CCD_NAME}!="", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:ff5001:*", ENV{ID_MM_DEVICE_IGNORE}="1" # # Construct a symlink to a TTY generated from a CCD USB serial interface. # SUBSYSTEM=="tty", ENV{GOOGLE_CCD_NAME}!="", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="50", ATTRS{bInterfaceProtocol}=="01", OPTIONS+="string_escape=replace", SYMLINK+="google/$env{GOOGLE_CCD_NAME}/serial/$attr{interface}"