blob: 037945e67364029e91ec0db1891c7c5cbb98241f [file] [log] [blame]
// Copyright 2014 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 <memory>
#include "base/compiler_specific.h"
#include "base/files/scoped_file.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "build/build_config.h"
#include "device/hid/hid_device_info.h"
#include "device/hid/hid_service.h"
namespace device {
class HidServiceLinux : public HidService {
~HidServiceLinux() override;
// HidService:
void Connect(const HidDeviceId& device_id,
const ConnectCallback& callback) override;
struct ConnectParams;
class BlockingTaskHelper;
// These functions implement the process of locating, requesting access to and
// opening a device. Because this operation crosses multiple threads these
// functions are static and the necessary parameters are passed as a single
// struct.
#if defined(OS_CHROMEOS)
static void OnPathOpenComplete(std::unique_ptr<ConnectParams> params,
base::ScopedFD fd);
static void OnPathOpenError(const std::string& device_path,
const ConnectCallback& callback,
const std::string& error_name,
const std::string& error_message);
static void OpenOnBlockingThread(std::unique_ptr<ConnectParams> params);
static void FinishOpen(std::unique_ptr<ConnectParams> params);
static void CreateConnection(std::unique_ptr<ConnectParams> params);
const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
// |helper_| lives on the sequence |blocking_task_runner_| posts to and holds
// a weak reference back to the service that owns it.
std::unique_ptr<BlockingTaskHelper> helper_;
base::WeakPtrFactory<HidServiceLinux> weak_factory_;
} // namespace device