1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef DEVICE_HID_HID_SERVICE_H_ 6#define DEVICE_HID_HID_SERVICE_H_ 7 8#include <map> 9#include <string> 10#include <vector> 11 12#include "base/memory/ref_counted.h" 13#include "base/single_thread_task_runner.h" 14#include "base/threading/thread_checker.h" 15#include "device/hid/hid_device_info.h" 16 17namespace device { 18 19class HidConnection; 20 21class HidService { 22 public: 23 static HidService* GetInstance( 24 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, 25 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); 26 27 // Enumerates and returns a list of device identifiers. 28 virtual void GetDevices(std::vector<HidDeviceInfo>* devices); 29 30 // Fills in a DeviceInfo struct with info for the given device_id. 31 // Returns |true| if successful or |false| if |device_id| is invalid. 32 bool GetDeviceInfo(const HidDeviceId& device_id, HidDeviceInfo* info) const; 33 34 virtual scoped_refptr<HidConnection> Connect( 35 const HidDeviceId& device_id) = 0; 36 37 protected: 38 friend class HidConnectionTest; 39 40 typedef std::map<HidDeviceId, HidDeviceInfo> DeviceMap; 41 42 HidService(); 43 virtual ~HidService(); 44 45 void AddDevice(const HidDeviceInfo& info); 46 void RemoveDevice(const HidDeviceId& device_id); 47 48 const DeviceMap& devices() const { return devices_; } 49 50 base::ThreadChecker thread_checker_; 51 52 private: 53 class Destroyer; 54 55 DeviceMap devices_; 56 57 DISALLOW_COPY_AND_ASSIGN(HidService); 58}; 59 60} // namespace device 61 62#endif // DEVICE_HID_HID_SERVICE_H_ 63