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 HidUsageAndPage usage_and_page; |
| 159 CFDictionaryRef deviceUsagePair = base::mac::CFCast<CFDictionaryRef>( |
| 160 CFArrayGetValueAtIndex(deviceUsagePairs, i)); |
| 161 CFNumberRef usage_page_raw = base::mac::CFCast<CFNumberRef>( |
| 162 CFDictionaryGetValue(deviceUsagePair, CFSTR(kIOHIDDeviceUsagePageKey))); |
| 163 CFNumberGetValue( |
| 164 usage_page_raw, kCFNumberSInt32Type, &usage_and_page.usage_page); |
| 165 CFNumberRef usage_raw = base::mac::CFCast<CFNumberRef>( |
| 166 CFDictionaryGetValue(deviceUsagePair, CFSTR(kIOHIDDeviceUsageKey))); |
| 167 CFNumberGetValue(usage_raw, kCFNumberSInt32Type, &usage_and_page.usage); |
| 168 device_info.usages.push_back(usage_and_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 |