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 "base/callback.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/tuple.h"
11 #include "device/hid/hid_connection.h"
12 #include "device/hid/hid_device_info.h"
13 #include "device/hid/hid_service_mac.h"
21 class HidConnectionMac
: public HidConnection
{
23 HidConnectionMac(HidServiceMac
* service
,
24 HidDeviceInfo device_info
,
25 IOHIDDeviceRef device
);
27 virtual void Read(scoped_refptr
<net::IOBuffer
> buffer
,
29 const IOCallback
& callback
) OVERRIDE
;
30 virtual void Write(scoped_refptr
<net::IOBuffer
> buffer
,
32 const IOCallback
& callback
) OVERRIDE
;
33 virtual void GetFeatureReport(scoped_refptr
<net::IOBuffer
> buffer
,
35 const IOCallback
& callback
) OVERRIDE
;
36 virtual void SendFeatureReport(scoped_refptr
<net::IOBuffer
> buffer
,
38 const IOCallback
& callback
) OVERRIDE
;
41 virtual ~HidConnectionMac();
43 static void InputReportCallback(void * context
,
49 CFIndex reportLength
);
50 void ProcessReadQueue();
51 void ProcessInputReport(IOHIDReportType type
,
52 scoped_refptr
<net::IOBuffer
> report
,
53 CFIndex reportLength
);
55 void WriteReport(IOHIDReportType type
,
56 scoped_refptr
<net::IOBuffer
> buffer
,
58 const IOCallback
& callback
);
60 HidServiceMac
* service_
;
61 scoped_refptr
<base::MessageLoopProxy
> message_loop_
;
62 base::ScopedCFTypeRef
<IOHIDDeviceRef
> device_
;
63 scoped_ptr_malloc
<uint8_t> inbound_buffer_
;
66 typedef std::pair
<scoped_refptr
<net::IOBuffer
>, size_t> PendingReport
;
67 std::queue
<PendingReport
> input_reports_
;
68 typedef Tuple3
<scoped_refptr
<net::IOBuffer
>, size_t, IOCallback
> PendingRead
;
69 std::queue
<PendingRead
> read_queue_
;
71 DISALLOW_COPY_AND_ASSIGN(HidConnectionMac
);
77 #endif // DEVICE_HID_HID_CONNECTION_MAC_H_