// Copyright 2017 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.

#ifndef SYSROOT_ZIRCON_HW_USB_VIDEO_H_
#define SYSROOT_ZIRCON_HW_USB_VIDEO_H_

// clang-format off

#include <zircon/compiler.h>

__BEGIN_CDECLS;

// video interface subclasses
#define USB_SUBCLASS_VIDEO_CONTROL                 0x01
#define USB_SUBCLASS_VIDEO_STREAMING               0x02
#define USB_SUBCLASS_VIDEO_INTERFACE_COLLECTION    0x03

// video class specific descriptor types
#define USB_VIDEO_CS_DEVICE                        0x21
#define USB_VIDEO_CS_CONFIGURATION                 0x22
#define USB_VIDEO_CS_STRING                        0x23
#define USB_VIDEO_CS_INTERFACE                     0x24
#define USB_VIDEO_CS_ENDPOINT                      0x25

// video class specific VC interface descriptor subtypes
#define USB_VIDEO_VC_HEADER                        0x01
#define USB_VIDEO_VC_INPUT_TERMINAL                0x02
#define USB_VIDEO_VC_OUTPUT_TERMINAL               0x03
#define USB_VIDEO_VC_SELECTOR_UNIT                 0x04
#define USB_VIDEO_VC_PROCESSING_UNIT               0x05
#define USB_VIDEO_VC_EXTENSION_UNIT                0x06
#define USB_VIDEO_VC_ENCODING_UNIT                 0x07

// video class specific VS interface descriptor subtypes
#define USB_VIDEO_VS_INPUT_HEADER                  0x01
#define USB_VIDEO_VS_OUTPUT_HEADER                 0x02
#define USB_VIDEO_VS_STILL_IMAGE_FRAME             0x03
#define USB_VIDEO_VS_FORMAT_UNCOMPRESSED           0x04
#define USB_VIDEO_VS_FRAME_UNCOMPRESSED            0x05
#define USB_VIDEO_VS_FORMAT_MJPEG                  0x06
#define USB_VIDEO_VS_FRAME_MJPEG                   0x07
#define USB_VIDEO_VS_FORMAT_MPEG2TS                0x0A
#define USB_VIDEO_VS_FORMAT_DV                     0x0C
#define USB_VIDEO_VS_COLORFORMAT                   0x0D
#define USB_VIDEO_VS_FORMAT_FRAME_BASED            0x10
#define USB_VIDEO_VS_FRAME_FRAME_BASED             0x11
#define USB_VIDEO_VS_FORMAT_STREAM_BASED           0x12
#define USB_VIDEO_VS_FORMAT_H264                   0x13
#define USB_VIDEO_VS_FRAME_H264                    0x14
#define USB_VIDEO_VS_FORMAT_H264_SIMULCAST         0x15
#define USB_VIDEO_VS_FORMAT_VP8                    0x16
#define USB_VIDEO_VS_FRAME_VP8                     0x17
#define USB_VIDEO_VS_FORMAT_VP8_SIMULCAST          0x18

// video class specific endpoint descriptor subtypes
#define USB_VIDEO_EP_GENERAL                       0x01
#define USB_VIDEO_EP_ENDPOINT                      0x02
#define USB_VIDEO_EP_INTERRUPT                     0x03

// video class specific request codes
#define USB_VIDEO_SET_CUR                          0x01
#define USB_VIDEO_SET_CUR_ALL                      0x11
#define USB_VIDEO_GET_CUR                          0x81
#define USB_VIDEO_GET_MIN                          0x82
#define USB_VIDEO_GET_MAX                          0x83
#define USB_VIDEO_GET_RES                          0x84
#define USB_VIDEO_GET_LEN                          0x85
#define USB_VIDEO_GET_INFO                         0x86
#define USB_VIDEO_GET_DEF                          0x87
#define USB_VIDEO_GET_CUR_ALL                      0x91
#define USB_VIDEO_GET_MIN_ALL                      0x92
#define USB_VIDEO_GET_MAX_ALL                      0x93
#define USB_VIDEO_GET_RES_ALL                      0x94
#define USB_VIDEO_GET_DEF_ALL                      0x97

// video streaming interface control selectors
#define USB_VIDEO_VS_PROBE_CONTROL                 0x01
#define USB_VIDEO_VS_COMMIT_CONTROL                0x02
#define USB_VIDEO_VS_STILL_PROBE_CONTROL           0x03
#define USB_VIDEO_VS_STILL_COMMIT_CONTROL          0x04
#define USB_VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL   0x05
#define USB_VIDEO_VS_STREAM_ERROR_CODE_CONTROL     0x06
#define USB_VIDEO_VS_GENERATE_KEY_FRAME_CONTROL    0x07
#define USB_VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL  0x08
#define USB_VIDEO_VS_SYNCH_DELAY_CONTROL           0x09

// header for usb_video_vc_* below
typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;        // USB_VIDEO_CS_INTERFACE
    uint8_t bDescriptorSubtype;
} __PACKED usb_video_vc_desc_header;

typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;        // USB_VIDEO_CS_INTERFACE
    uint8_t bDescriptorSubtype;     // USB_VIDEO_VC_HEADER
    uint16_t bcdUVC;
    uint16_t wTotalLength;
    uint32_t dwClockFrequency;
    uint8_t bInCollection;
    uint8_t baInterfaceNr[];
} __PACKED usb_video_vc_header_desc;

typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;        // USB_VIDEO_CS_INTERFACE
    uint8_t bDescriptorSubtype;     // USB_VIDEO_VC_INPUT_TERMINAL
    uint8_t bTerminalID;
    uint16_t wTerminalType;
    uint8_t bAssocTerminal;
    uint8_t iTerminal;
} __PACKED usb_video_vc_input_terminal_desc;

typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;        // USB_VIDEO_CS_INTERFACE
    uint8_t bDescriptorSubtype;     // USB_VIDEO_VC_OUTPUT_TERMINAL
    uint8_t bTerminalID;
    uint16_t wTerminalType;
    uint8_t bAssocTerminal;
    uint8_t bSourceID;
    uint8_t iTerminal;
} __PACKED usb_video_vc_output_terminal_desc;

// class specific VC interrupt endpoint descriptor
typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;        // USB_VIDEO_CS_ENDPOINT
    uint8_t bDescriptorSubtype;     // USB_ENDPOINT_INTERRUPT
    uint16_t wMaxTransferSize;
} __PACKED usb_video_vc_interrupt_endpoint_desc;

typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;        // USB_VIDEO_CS_INTERFACE
    uint8_t bDescriptorSubtype;     // USB_VIDEO_VS_HEADER
    uint8_t bNumFormats;
    uint16_t wTotalLength;
    uint8_t bEndpointAddress;
    uint8_t bmInfo;
    uint8_t bTerminalLink;
    uint8_t bStillCaptureMethod;
    uint8_t bTriggerSupport;
    uint8_t bTriggerUsage;
    uint8_t bControlSize;
    uint8_t bmaControls[];
} __PACKED usb_video_vs_input_header_desc;

#define GUID_LENGTH 16

// A GUID consists of a:
//  - four-byte integer
//  - two-byte integer
//  - two-byte integer
//  - eight-byte array
//
// The string representation uses big endian format, so to convert it
// to a byte array we need to reverse the byte order of the three integers.
//
// See USB Video Class revision 1.5, FAQ section 2.9
// for GUID Data Structure Layout.

#define USB_VIDEO_GUID_YUY2_STRING "32595559-0000-0010-8000-00AA00389B71"
#define USB_VIDEO_GUID_YUY2_VALUE { \
    0x59, 0x55, 0x59, 0x32, \
    0x00, 0x00, \
    0x10, 0x00, \
    0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 \
}

#define USB_VIDEO_GUID_NV12_STRING "3231564E-0000-0010-8000-00AA00389B71"
#define USB_VIDEO_GUID_NV12_VALUE { \
    0x4e, 0x56, 0x31, 0x32, \
    0x00, 0x00, \
    0x10, 0x00, \
    0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 \
}

#define USB_VIDEO_GUID_M420_STRING "3032344D-0000-0010-8000-00AA00389B71"
#define USB_VIDEO_GUID_M420_VALUE { \
    0x4d, 0x34, 0x32, 0x30, \
    0x00, 0x00, \
    0x10, 0x00, \
    0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 \
}

#define USB_VIDEO_GUID_I420_STRING "30323449-0000-0010-8000-00AA00389B71"
#define USB_VIDEO_GUID_I420_VALUE { \
    0x49, 0x34, 0x32, 0x30, \
    0x00, 0x00, \
    0x10, 0x00, \
    0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 \
}

// USB Video Payload Uncompressed
typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;         // USB_VIDEO_CS_INTERFACE
    uint8_t bDescriptorSubType;      // USB_VIDEO_VS_FORMAT_UNCOMPRESSED
    uint8_t bFormatIndex;
    uint8_t bNumFrameDescriptors;
    uint8_t guidFormat[GUID_LENGTH];
    uint8_t bBitsPerPixel;
    uint8_t bDefaultFrameIndex;
    uint8_t bAspectRatioX;
    uint8_t bAspectRatioY;
    uint8_t bmInterfaceFlags;
    uint8_t bCopyProtect;
} __PACKED usb_video_vs_uncompressed_format_desc;

// USB Video Payload MJPEG
typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;         // USB_VIDEO_CS_INTERFACE
    uint8_t bDescriptorSubType;      // USB_VIDEO_VS_FORMAT_MJPEG
    uint8_t bFormatIndex;
    uint8_t bNumFrameDescriptors;
    uint8_t bmFlags;
    uint8_t bDefaultFrameIndex;
    uint8_t bAspectRatioX;
    uint8_t bAspectRatioY;
    uint8_t bmInterfaceFlags;
    uint8_t bCopyProtect;
} __PACKED usb_video_vs_mjpeg_format_desc;

// Uncompressed and MJPEG formats have the same frame descriptor structure.
typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;         // USB_VIDEO_CS_INTERFACE
    uint8_t bDescriptorSubType;      // USB_VIDEO_VS_FRAME_UNCOMPRESSED / USB_VIDEO_VS_FRAME_MJPEG
    uint8_t bFrameIndex;
    uint8_t bmCapabilities;
    uint16_t wWidth;
    uint16_t wHeight;
    uint32_t dwMinBitRate;
    uint32_t dwMaxBitRate;
    uint32_t dwMaxVideoFrameBufferSize;
    uint32_t dwDefaultFrameInterval;
    uint8_t bFrameIntervalType;
    uint32_t dwFrameInterval[];
} __PACKED usb_video_vs_frame_desc;

// Stream negotiation
#define USB_VIDEO_BM_HINT_FRAME_INTERVAL        (1 << 0)
#define USB_VIDEO_BM_HINT_KEY_FRAME_RATE        (1 << 1)
#define USB_VIDEO_BM_HINT_P_FRAME_RATE          (1 << 2)
#define USB_VIDEO_BM_HINT_COMP_QUALITY          (1 << 3)
#define USB_VIDEO_BM_HINT_COMP_WINDOW_SIZE      (1 << 4)

typedef struct {
   uint16_t bmHint;
   uint8_t bFormatIndex;
   uint8_t bFrameIndex;
   uint32_t dwFrameInterval;
   uint16_t wKeyFrameRate;
   uint16_t wPFrameRate;
   uint16_t wCompQuality;
   uint16_t wCompWindowSize;
   uint16_t wDelay;
   uint32_t dwMaxVideoFrameSize;
   uint32_t dwMaxPayloadTransferSize;
   // The following fields are optional.
   uint32_t dwClockFrequency;
   uint8_t bmFramingInfo;
   uint8_t bPreferedVersion;
   uint8_t bMinVersion;
   uint8_t bMaxVersion;
   uint8_t bUsage;
   uint8_t bBitDepthLuma;
   uint8_t bmSettings;
   uint8_t bMaxNumberOfRefFramesPlus1;
   uint16_t bmRateControlModes;
   uint32_t bmLayoutPerStream;
} __PACKED usb_video_vc_probe_and_commit_controls;

// For accessing payload bmHeaderInfo bitmap
#define USB_VIDEO_VS_PAYLOAD_HEADER_FID         (1 << 0)
#define USB_VIDEO_VS_PAYLOAD_HEADER_EOF         (1 << 1)
#define USB_VIDEO_VS_PAYLOAD_HEADER_PTS         (1 << 2)
#define USB_VIDEO_VS_PAYLOAD_HEADER_SCR         (1 << 3)
#define USB_VIDEO_VS_PAYLOAD_HEADER_RES         (1 << 4)
#define USB_VIDEO_VS_PAYLOAD_HEADER_STI         (1 << 5)
#define USB_VIDEO_VS_PAYLOAD_HEADER_ERR         (1 << 6)
#define USB_VIDEO_VS_PAYLOAD_HEADER_EOH         (1 << 7)

// Common header for all payloads.
typedef struct {
    uint8_t bHeaderLength;
    uint8_t bmHeaderInfo;

} __PACKED usb_video_vs_payload_header;

typedef struct {
    uint8_t bHeaderLength;
    uint8_t bmHeaderInfo;
    uint32_t dwPresentationTime;
    uint32_t scrSourceTimeClock;
    // Frame number when the source clock was sampled.
    uint16_t scrSourceClockSOFCounter;
} __PACKED usb_video_vs_uncompressed_payload_header;

__END_CDECLS;


#endif  // SYSROOT_ZIRCON_HW_USB_VIDEO_H_
