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/memory/scoped_ptr.h" 14 #include "base/message_loop/message_loop.h" 15 #include "base/threading/thread_checker.h" 16 #include "device/hid/hid_device_info.h" 17 18 namespace device { 19 20 class HidConnection; 21 22 class HidService : public base::MessageLoop::DestructionObserver { 23 public: 24 // Must be called on FILE thread. 25 static HidService* GetInstance(); 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 // Implements base::MessageLoop::DestructionObserver 38 virtual void WillDestroyCurrentMessageLoop() OVERRIDE; 39 40 protected: 41 friend struct base::DefaultDeleter<HidService>; 42 friend class HidConnectionTest; 43 44 typedef std::map<HidDeviceId, HidDeviceInfo> DeviceMap; 45 46 HidService(); 47 virtual ~HidService(); 48 49 static HidService* CreateInstance(); 50 51 void AddDevice(const HidDeviceInfo& info); 52 void RemoveDevice(const HidDeviceId& device_id); 53 54 base::ThreadChecker thread_checker_; 55 56 private: 57 DeviceMap devices_; 58 59 DISALLOW_COPY_AND_ASSIGN(HidService); 60 }; 61 62 } // namespace device 63 64 #endif // DEVICE_HID_HID_SERVICE_H_ 65