// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.usb;

// TODO(fxb/62024): For now these protocol definitions are manually defined to match protodefs.h.
// Usually fuchsia.<namespace>.BIND_PROTOCOL.DEVICE would map to ZX_PROTOCOL_<namespace>, but in
// this case it maps to ZX_PROTOCOL_USB_DEVICE. This is because the USB protocol is implemented by
// two kinds of drivers: those that acquire an entire device (ZX_PROTOCOL_USB_DEVICE) and those
// acquire a single interface of the device (ZX_PROTOCOL_USB_INTERFACE). ZX_PROTOCOL_USB is still
// used for the banjo protocol for both kinds of drivers.
extend uint fuchsia.BIND_PROTOCOL {
  DEVICE = 34,
  BUS = 35,
  COMPOSITE = 36,
  DCI = 37,
  INTERFACE = 38,
  PERIPHERAL = 39,
  FUNCTION = 40,
};

extend uint fuchsia.BIND_USB_VID {
  FTDI = 0x0403,
  CYPRESS = 0x04b4,
  ASIX = 0x0b95,
  REALTEK = 0x0bda,
  ATHEROS = 0x0cf3,
  SIERRA = 0x1199,
  RALINK = 0x148f,
  GOOGLE = 0x18d1,
  INTEL = 0x8087,
};

extend uint fuchsia.BIND_USB_PID {
  ASIX = 0x772B,
  AX88179 = 0x1790,
};

// See https://www.usb.org/defined-class-codes
extend uint fuchsia.BIND_USB_CLASS {
  AUDIO = 0x01,
  COMM = 0x02,
  HID = 0x03,
  PHYSICAL = 0x05,
  IMAGE = 0x06,
  PRINTER = 0x07,
  MASS_STORAGE = 0x08,
  HUB = 0x09,
  CDC_DATA = 0x10,
  SMART_CARD = 0x0b,
  CONTENT_SECURITY = 0x0d,
  VIDEO = 0x0e,
  PERSONAL_HEALTHCARE = 0x0f,
  AUDIO_VIDEO = 0x10,
  BILLBOARD = 0x11,
  USB_C_BRIDGE = 0x12,
  DIAGNOSTIC = 0xdc,
  WIRELESS = 0xe0,
  MISC = 0xef,
  APPLICATION_SPECIFIC = 0xfe,
  VENDOR_SPECIFIC = 0xff,
};

extend uint fuchsia.BIND_USB_SUBCLASS {
  VIDEO_CONTROL = 0x01,
  VIDEO_STREAMING = 0x02,
  VIDEO_INTERFACE_COLLECTION = 0x03,

  MISC_RNDIS = 0x04,

  ETHERNET = 0x06,
};

extend uint fuchsia.BIND_USB_PROTOCOL {
  UNDEFINED = 0x00,

  MISC_RNDIS_ETHERNET = 0x01,
};
