Home | History | Annotate | Download | only in hid
      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