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 scoped_ptr
<uint8_t, base::FreeDeleter
> 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_