// Copyright 2018 The Chromium 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 "device/gamepad/hid_haptic_gamepad_linux.h"

#include "base/posix/eintr_wrapper.h"

namespace device {

HidHapticGamepadLinux::HidHapticGamepadLinux(const base::ScopedFD& fd,
                                             const HapticReportData& data)
    : HidHapticGamepadBase(data), fd_(fd.get()) {}

HidHapticGamepadLinux::~HidHapticGamepadLinux() = default;

// static
std::unique_ptr<HidHapticGamepadLinux> HidHapticGamepadLinux::Create(
    uint16_t vendor_id,
    uint16_t product_id,
    const base::ScopedFD& fd) {
  const auto* haptic_data = GetHapticReportData(vendor_id, product_id);
  if (!haptic_data)
    return nullptr;
  return std::make_unique<HidHapticGamepadLinux>(fd, *haptic_data);
}

size_t HidHapticGamepadLinux::WriteOutputReport(void* report,
                                                size_t report_length) {
  ssize_t bytes_written = HANDLE_EINTR(write(fd_, report, report_length));
  return bytes_written < 0 ? 0 : static_cast<size_t>(bytes_written);
}

}  // namespace device
