OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "device/hid/hid_service_mac.h" | 5 #include "device/hid/hid_service_mac.h" |
6 | 6 |
7 #include <CoreFoundation/CoreFoundation.h> | 7 #include <CoreFoundation/CoreFoundation.h> |
8 #include <IOKit/hid/IOHIDManager.h> | 8 #include <IOKit/hid/IOHIDManager.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
136 // Note that our ownership of hid_device is implied if calling this method. | 136 // Note that our ownership of hid_device is implied if calling this method. |
137 // It is balanced in PlatformRemoveDevice. | 137 // It is balanced in PlatformRemoveDevice. |
138 DCHECK(thread_checker_.CalledOnValidThread()); | 138 DCHECK(thread_checker_.CalledOnValidThread()); |
139 | 139 |
140 HidDeviceInfo device_info; | 140 HidDeviceInfo device_info; |
141 device_info.device_id = hid_device; | 141 device_info.device_id = hid_device; |
142 device_info.vendor_id = | 142 device_info.vendor_id = |
143 GetHidIntProperty(hid_device, CFSTR(kIOHIDVendorIDKey)); | 143 GetHidIntProperty(hid_device, CFSTR(kIOHIDVendorIDKey)); |
144 device_info.product_id = | 144 device_info.product_id = |
145 GetHidIntProperty(hid_device, CFSTR(kIOHIDProductIDKey)); | 145 GetHidIntProperty(hid_device, CFSTR(kIOHIDProductIDKey)); |
146 device_info.usage = | |
147 GetHidIntProperty(hid_device, CFSTR(kIOHIDPrimaryUsageKey)); | |
148 device_info.usage_page = | |
149 GetHidIntProperty(hid_device, CFSTR(kIOHIDPrimaryUsagePageKey)); | |
150 device_info.input_report_size = | 146 device_info.input_report_size = |
151 GetHidIntProperty(hid_device, CFSTR(kIOHIDMaxInputReportSizeKey)); | 147 GetHidIntProperty(hid_device, CFSTR(kIOHIDMaxInputReportSizeKey)); |
152 device_info.output_report_size = | 148 device_info.output_report_size = |
153 GetHidIntProperty(hid_device, CFSTR(kIOHIDMaxOutputReportSizeKey)); | 149 GetHidIntProperty(hid_device, CFSTR(kIOHIDMaxOutputReportSizeKey)); |
154 device_info.feature_report_size = | 150 device_info.feature_report_size = |
155 GetHidIntProperty(hid_device, CFSTR(kIOHIDMaxFeatureReportSizeKey)); | 151 GetHidIntProperty(hid_device, CFSTR(kIOHIDMaxFeatureReportSizeKey)); |
152 CFTypeRef deviceUsagePairsRaw = | |
153 IOHIDDeviceGetProperty(hid_device, CFSTR(kIOHIDDeviceUsagePairsKey)); | |
154 CFArrayRef deviceUsagePairs = | |
155 base::mac::CFCast<CFArrayRef>(deviceUsagePairsRaw); | |
156 CFIndex deviceUsagePairsCount = CFArrayGetCount(deviceUsagePairs); | |
157 for (CFIndex i = 0; i < deviceUsagePairsCount; i++) { | |
158 CFDictionaryRef deviceUsagePair = base::mac::CFCast<CFDictionaryRef>( | |
159 CFArrayGetValueAtIndex(deviceUsagePairs, i)); | |
160 CFNumberRef usage_raw = base::mac::CFCast<CFNumberRef>( | |
161 CFDictionaryGetValue(deviceUsagePair, CFSTR(kIOHIDDeviceUsageKey))); | |
162 uint16_t usage; | |
163 CFNumberGetValue(usage_raw, kCFNumberSInt32Type, &usage); | |
164 CFNumberRef page_raw = base::mac::CFCast<CFNumberRef>( | |
165 CFDictionaryGetValue(deviceUsagePair, CFSTR(kIOHIDDeviceUsagePageKey))); | |
166 UsagePage page; | |
Ken Rockot(use gerrit already)
2014/04/24 19:26:18
Gah. Sorry. I should have been more careful about
jracle (use Gerrit)
2014/04/24 19:47:01
Gasp, wish I could rebuild.
Let's retry, if we rea
| |
167 CFNumberGetValue(page_raw, kCFNumberSInt32Type, &page); | |
168 device_info.usages.push_back(HidUsageAndPage(usage, page)); | |
169 } | |
156 device_info.product_name = | 170 device_info.product_name = |
157 GetHidStringProperty(hid_device, CFSTR(kIOHIDProductKey)); | 171 GetHidStringProperty(hid_device, CFSTR(kIOHIDProductKey)); |
158 device_info.serial_number = | 172 device_info.serial_number = |
159 GetHidStringProperty(hid_device, CFSTR(kIOHIDSerialNumberKey)); | 173 GetHidStringProperty(hid_device, CFSTR(kIOHIDSerialNumberKey)); |
160 AddDevice(device_info); | 174 AddDevice(device_info); |
161 } | 175 } |
162 | 176 |
163 void HidServiceMac::PlatformRemoveDevice(IOHIDDeviceRef hid_device) { | 177 void HidServiceMac::PlatformRemoveDevice(IOHIDDeviceRef hid_device) { |
164 DCHECK(thread_checker_.CalledOnValidThread()); | 178 DCHECK(thread_checker_.CalledOnValidThread()); |
165 RemoveDevice(hid_device); | 179 RemoveDevice(hid_device); |
166 CFRelease(hid_device); | 180 CFRelease(hid_device); |
167 } | 181 } |
168 | 182 |
169 scoped_refptr<HidConnection> HidServiceMac::Connect( | 183 scoped_refptr<HidConnection> HidServiceMac::Connect( |
170 const HidDeviceId& device_id) { | 184 const HidDeviceId& device_id) { |
171 DCHECK(thread_checker_.CalledOnValidThread()); | 185 DCHECK(thread_checker_.CalledOnValidThread()); |
172 HidDeviceInfo device_info; | 186 HidDeviceInfo device_info; |
173 if (!GetDeviceInfo(device_id, &device_info)) | 187 if (!GetDeviceInfo(device_id, &device_info)) |
174 return NULL; | 188 return NULL; |
175 return scoped_refptr<HidConnection>(new HidConnectionMac(device_info)); | 189 return scoped_refptr<HidConnection>(new HidConnectionMac(device_info)); |
176 } | 190 } |
177 | 191 |
178 } // namespace device | 192 } // namespace device |
OLD | NEW |