1 // Copyright (c) 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.
5 #ifndef DEVICE_HID_HID_CONNECTION_MAC_H_
6 #define DEVICE_HID_HID_CONNECTION_MAC_H_
8 #include <CoreFoundation/CoreFoundation.h>
9 #include <IOKit/hid/IOHIDManager.h>
13 #include "base/mac/foundation_util.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "device/hid/hid_connection.h"
18 class MessageLoopProxy;
27 class HidConnectionMac : public HidConnection {
29 explicit HidConnectionMac(HidDeviceInfo device_info);
31 // HidConnection implementation.
32 virtual void PlatformRead(scoped_refptr<net::IOBufferWithSize> buffer,
33 const IOCallback& callback) OVERRIDE;
34 virtual void PlatformWrite(uint8_t report_id,
35 scoped_refptr<net::IOBufferWithSize> buffer,
36 const IOCallback& callback) OVERRIDE;
37 virtual void PlatformGetFeatureReport(
39 scoped_refptr<net::IOBufferWithSize> buffer,
40 const IOCallback& callback) OVERRIDE;
41 virtual void PlatformSendFeatureReport(
43 scoped_refptr<net::IOBufferWithSize> buffer,
44 const IOCallback& callback) OVERRIDE;
47 virtual ~HidConnectionMac();
49 static void InputReportCallback(void* context,
54 uint8_t* report_bytes,
55 CFIndex report_length);
57 void WriteReport(IOHIDReportType type,
59 scoped_refptr<net::IOBufferWithSize> buffer,
60 const IOCallback& callback);
63 void ProcessInputReport(scoped_refptr<net::IOBufferWithSize> buffer);
64 void ProcessReadQueue();
66 base::ScopedCFTypeRef<IOHIDDeviceRef> device_;
67 scoped_refptr<base::MessageLoopProxy> message_loop_;
68 std::vector<uint8_t> inbound_buffer_;
70 std::queue<PendingHidReport> pending_reports_;
71 std::queue<PendingHidRead> pending_reads_;
73 DISALLOW_COPY_AND_ASSIGN(HidConnectionMac);
78 #endif // DEVICE_HID_HID_CONNECTION_MAC_H_