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 17 namespace device { 18 19 class HidConnection; 20 21 class 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