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

#include "hal/usb/vendor_tag.h"

namespace cros {

// static
const VendorTagManager& VendorTagOps::GetVendorTagManager() {
  static const auto manager = []() {
    VendorTagManager m;
    m.Add(kVendorTagVendorId, kVendorUsbSectionName, "vendorId", TYPE_BYTE);
    m.Add(kVendorTagProductId, kVendorUsbSectionName, "productId", TYPE_BYTE);
    m.Add(kVendorTagModelName, kVendorUsbSectionName, "modelName", TYPE_BYTE);
    m.Add(kVendorTagDevicePath, kVendorUsbSectionName, "devicePath", TYPE_BYTE);
    m.Add(kVendorTagTimestampSync, kVendorUsbSectionName, "timestampSync",
          TYPE_INT32);
    m.Add(kVendorTagControlBrightness, kVendorControlSectionName, "brightness",
          TYPE_INT32);
    m.Add(kVendorTagControlBrightnessRange, kVendorControlSectionName,
          "brightnessRange", TYPE_INT32);
    m.Add(kVendorTagControlBrightnessDefault, kVendorControlSectionName,
          "brightnessDefault", TYPE_INT32);
    m.Add(kVendorTagControlContrast, kVendorControlSectionName, "contrast",
          TYPE_INT32);
    m.Add(kVendorTagControlContrastRange, kVendorControlSectionName,
          "contrastRange", TYPE_INT32);
    m.Add(kVendorTagControlContrastDefault, kVendorControlSectionName,
          "contrastDefault", TYPE_INT32);
    m.Add(kVendorTagControlPan, kVendorControlSectionName, "pan", TYPE_INT32);
    m.Add(kVendorTagControlPanRange, kVendorControlSectionName, "panRange",
          TYPE_INT32);
    m.Add(kVendorTagControlPanDefault, kVendorControlSectionName, "panDefault",
          TYPE_INT32);
    m.Add(kVendorTagControlSaturation, kVendorControlSectionName, "saturation",
          TYPE_INT32);
    m.Add(kVendorTagControlSaturationRange, kVendorControlSectionName,
          "saturationRange", TYPE_INT32);
    m.Add(kVendorTagControlSaturationDefault, kVendorControlSectionName,
          "saturationDefault", TYPE_INT32);
    m.Add(kVendorTagControlSharpness, kVendorControlSectionName, "sharpness",
          TYPE_INT32);
    m.Add(kVendorTagControlSharpnessRange, kVendorControlSectionName,
          "sharpnessRange", TYPE_INT32);
    m.Add(kVendorTagControlSharpnessDefault, kVendorControlSectionName,
          "sharpnessDefault", TYPE_INT32);
    m.Add(kVendorTagControlTilt, kVendorControlSectionName, "tilt", TYPE_INT32);
    m.Add(kVendorTagControlTiltRange, kVendorControlSectionName, "tiltRange",
          TYPE_INT32);
    m.Add(kVendorTagControlTiltDefault, kVendorControlSectionName,
          "tiltDefault", TYPE_INT32);
    m.Add(kVendorTagControlZoom, kVendorControlSectionName, "zoom", TYPE_INT32);
    m.Add(kVendorTagControlZoomRange, kVendorControlSectionName, "zoomRange",
          TYPE_INT32);
    m.Add(kVendorTagControlZoomDefault, kVendorControlSectionName,
          "zoomDefault", TYPE_INT32);
    return m;
  }();
  return manager;
}

// static
int VendorTagOps::GetTagCount(const vendor_tag_ops_t*) {
  return GetVendorTagManager().GetTagCount();
}

// static
void VendorTagOps::GetAllTags(const vendor_tag_ops_t*, uint32_t* tag_array) {
  GetVendorTagManager().GetAllTags(tag_array);
}

// static
const char* VendorTagOps::GetSectionName(const vendor_tag_ops_t*,
                                         uint32_t tag) {
  return GetVendorTagManager().GetSectionName(tag);
}

// static
const char* VendorTagOps::GetTagName(const vendor_tag_ops_t*, uint32_t tag) {
  return GetVendorTagManager().GetTagName(tag);
}

// static
int VendorTagOps::GetTagType(const vendor_tag_ops_t*, uint32_t tag) {
  return GetVendorTagManager().GetTagType(tag);
}

}  // namespace cros
