"""CfM USB device constants.

This module contains constants for known USB device specs.

A UsbDeviceSpec instance represents a known USB device and its spec;
 - VendorID
 - ProdID
 - interfaces

This is different from a UsbDevice instance which represents a device actually
connected to the CfM and found by the usb-device command.

A UsbDevice instance found connected to a CfM is expected to match a known
UsbDeviceSpec (mapping is done using vid:pid), but due to bugs that might
not be the case (list of interfaces might be different for example).
"""

from autotest_lib.client.common_lib.cros.cfm.usb import usb_device_spec

# Cameras
AVER_CAM520_CAMERA = usb_device_spec.UsbDeviceSpec(
    vid='2574',
    pid='0910',
    product='CAM520',
    interfaces=['uvcvideo', 'uvcvideo', 'usbhid'],
)

AVER_VC520_CAMERA = usb_device_spec.UsbDeviceSpec(
    vid='2574',
    pid='0901',
    product='VC520+',
    interfaces=['uvcvideo', 'uvcvideo', 'snd-usb-audio',
                'snd-usb-audio', 'snd-usb-audio', 'usbhid'],
)

HUDDLY_GO = usb_device_spec.UsbDeviceSpec(
    vid='2bd9',
    pid='0011',
    product='Huddly GO',
    interfaces=['uvcvideo', 'uvcvideo', 'uvcvideo', 'uvcvideo'],
)

LOGITECH_WEBCAM_C930E = usb_device_spec.UsbDeviceSpec(
    vid='046d',
    pid='0843',
    product='Logitech Webcam C930e',
    interfaces=['uvcvideo', 'uvcvideo', 'snd-usb-audio', 'snd-usb-audio']
)

HD_PRO_WEBCAM_C920 = usb_device_spec.UsbDeviceSpec(
    vid='046d',
    pid='082d',
    product='HD Pro Webcam C920',
    interfaces=['uvcvideo', 'uvcvideo', 'snd-usb-audio', 'snd-usb-audio'],
)

PTZ_PRO_CAMERA = usb_device_spec.UsbDeviceSpec(
    vid='046d',
    pid='0853',
    product='PTZ Pro Camera',
    interfaces=['uvcvideo', 'uvcvideo', 'usbhid'],
)

PTZ_PRO_2_CAMERA = usb_device_spec.UsbDeviceSpec(
    vid='046d',
    pid='085f',
    product='PTZ Pro 2 Camera',
    interfaces=['uvcvideo', 'uvcvideo', 'usbhid'],
)

# Devices with Camera and Audio

# Camera in Logitech MeetUp Device
LOGITECH_MEETUP = usb_device_spec.UsbDeviceSpec(
    vid='046d',
    pid='0866',
    product='Logitech MeetUp',
    interfaces=['uvcvideo', 'uvcvideo', 'usbhid'],
)

# Audio peripheral in Logitech MeetUp Device
LOGITECH_MEETUP_SPEAKERPHONE = usb_device_spec.UsbDeviceSpec(
    vid='046d',
    pid='0867',
    product='Logitech MeetUp Speakerphone',
    interfaces=['snd-usb-audio', 'snd-usb-audio', 'snd-usb-audio', 'usbhid'],
)

# Audio peripherals
ATRUS = usb_device_spec.UsbDeviceSpec(
    vid='18d1',
    pid='8001',
    product='Hangouts Meet speakermic',
    interfaces=['snd-usb-audio', 'snd-usb-audio', 'snd-usb-audio', 'usbhid'],
)

JABRA_SPEAK_410 = usb_device_spec.UsbDeviceSpec(
    vid='0b0e',
    pid='0412',
    product='Jabra SPEAK 410',
    interfaces=['snd-usb-audio', 'snd-usb-audio', 'snd-usb-audio'],
)

# MiMOs
MIMO_VUE_HD_DISPLAY = usb_device_spec.UsbDeviceSpec(
    vid='17e9',
    pid='016b',
    product='MIMO VUE HD',
    interfaces=['udl'],
)

# The MiMO's firmware is tied to the ChromeOS version. The firmware was updated
# in ChromeOS 65.0.3319.0. This resulted in the PID being changed from 016b to
# 416d. The following device is the device with the new PID. We need to support
# both versions since we want to support tests at the ToT revision running
# against older ChromeOS versions.
MIMO_VUE_HD_DISPLAY_PLANKTON = usb_device_spec.UsbDeviceSpec(
    vid='17e9',
    pid='416d',
    product='MIMO VUE HD',
    interfaces=['udl'],
)

# Tuple with all known MIMO display specs that we support.
ALL_MIMO_DISPLAYS = (MIMO_VUE_HD_DISPLAY, MIMO_VUE_HD_DISPLAY_PLANKTON)

MIMO_VUE_HID_TOUCH_CONTROLLER = usb_device_spec.UsbDeviceSpec(
    vid='266e',
    pid='0110',
    product='SiS HID Touch Controller',
    interfaces=['usbhid'],
)

# Utility methods
def get_usb_device_spec(vid_pid):
  """
  Look up UsbDeviceSpec based on vid_pid.
  @return UsbDeviceSpec with matching vid_pid or None if no match.
  """
  return usb_device_spec.UsbDeviceSpec.get_usb_device_spec(vid_pid)
