diff options
author | ikarienator@chromium.org <ikarienator@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-30 10:41:05 +0000 |
---|---|---|
committer | ikarienator@chromium.org <ikarienator@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-30 10:41:05 +0000 |
commit | a2c724ab72ccebb6d78e228caefd36b100e8308a (patch) | |
tree | f023f4383558055b3a41f6183983da7e9183e1ee /device/hid/hid_service_mac.h | |
parent | 441e25cdf56a650df64a17416314aeee1598ccff (diff) | |
download | chromium_src-a2c724ab72ccebb6d78e228caefd36b100e8308a.zip chromium_src-a2c724ab72ccebb6d78e228caefd36b100e8308a.tar.gz chromium_src-a2c724ab72ccebb6d78e228caefd36b100e8308a.tar.bz2 |
HID backend
BUG=290428
Review URL: https://codereview.chromium.org/143883005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@247926 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'device/hid/hid_service_mac.h')
-rw-r--r-- | device/hid/hid_service_mac.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/device/hid/hid_service_mac.h b/device/hid/hid_service_mac.h new file mode 100644 index 0000000..ef02e4f --- /dev/null +++ b/device/hid/hid_service_mac.h @@ -0,0 +1,81 @@ +// 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. + +#ifndef DEVICE_HID_HID_SERVICE_MAC_H_ +#define DEVICE_HID_HID_SERVICE_MAC_H_ + +#include <map> +#include <string> +#include <vector> + +#include "base/basictypes.h" +#include "base/mac/foundation_util.h" +#include "base/memory/ref_counted.h" +#include "base/memory/singleton.h" +#include "base/message_loop/message_loop.h" +#include "base/strings/string16.h" +#include "base/synchronization/waitable_event.h" +#include "base/threading/thread.h" +#include "base/threading/thread_checker.h" +#include "build/build_config.h" +#include "device/hid/hid_device_info.h" +#include "device/hid/hid_service.h" + +#include <CoreFoundation/CoreFoundation.h> +#include <IOKit/hid/IOHIDManager.h> + +namespace device { + +class HidConnection; +class HidService; + +class HidServiceMac : public HidService { + public: + HidServiceMac(); + + virtual scoped_refptr<HidConnection> Connect(std::string device_id) OVERRIDE; + + private: + virtual ~HidServiceMac(); + + void ScheduleRunLoop(); + void UnscheduleRunLoop(); + + // Device changing callbacks. + static void AddDeviceCallback(void* context, + IOReturn result, + void* sender, + IOHIDDeviceRef ref); + static void RemoveDeviceCallback(void* context, + IOReturn result, + void* sender, + IOHIDDeviceRef ref); + static HidServiceMac* InstanceFromContext(void* context); + + IOHIDDeviceRef FindDevice(std::string id); + + void Enumerate(); + + void PlatformAddDevice(IOHIDDeviceRef ref); + void PlatformRemoveDevice(IOHIDDeviceRef ref); + + // The message loop this object belongs to. + scoped_refptr<base::MessageLoopProxy> message_loop_; + + // Platform HID Manager + base::ScopedCFTypeRef<IOHIDManagerRef> hid_manager_ref_; + + // Enumeration thread. + scoped_ptr<base::Thread> enumeration_runloop_thread_; + CFRunLoopRef enumeration_runloop_; + base::WaitableEvent enumeration_runloop_init_; + + bool available_; + + DISALLOW_COPY_AND_ASSIGN(HidServiceMac); +}; + +} // namespace device + +#endif // DEVICE_HID_HID_SERVICE_MAC_H_ |