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/IOHIDDevice.h> | 8 #include <IOKit/hid/IOHIDDevice.h> |
9 | 9 |
10 #include <set> | 10 #include <set> |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 CFIndex collectionsCount = CFArrayGetCount(collections); | 99 CFIndex collectionsCount = CFArrayGetCount(collections); |
100 *has_report_id = false; | 100 *has_report_id = false; |
101 for (CFIndex i = 0; i < collectionsCount; i++) { | 101 for (CFIndex i = 0; i < collectionsCount; i++) { |
102 const IOHIDElementRef collection = static_cast<IOHIDElementRef>( | 102 const IOHIDElementRef collection = static_cast<IOHIDElementRef>( |
103 const_cast<void*>(CFArrayGetValueAtIndex(collections, i))); | 103 const_cast<void*>(CFArrayGetValueAtIndex(collections, i))); |
104 // Top-Level Collection has no parent | 104 // Top-Level Collection has no parent |
105 if (IOHIDElementGetParent(collection) == 0) { | 105 if (IOHIDElementGetParent(collection) == 0) { |
106 HidCollectionInfo collection_info; | 106 HidCollectionInfo collection_info; |
107 HidUsageAndPage::Page page = static_cast<HidUsageAndPage::Page>( | 107 HidUsageAndPage::Page page = static_cast<HidUsageAndPage::Page>( |
108 IOHIDElementGetUsagePage(collection)); | 108 IOHIDElementGetUsagePage(collection)); |
109 uint16_t usage = IOHIDElementGetUsage(collection); | 109 uint32_t usage = IOHIDElementGetUsage(collection); |
110 collection_info.usage = HidUsageAndPage(usage, page); | 110 if (usage > std::numeric_limits<uint16_t>::max()) |
| 111 continue; |
| 112 collection_info.usage = |
| 113 HidUsageAndPage(static_cast<uint16_t>(usage), page); |
111 // Explore children recursively and retrieve their report IDs | 114 // Explore children recursively and retrieve their report IDs |
112 GetReportIds(collection, &collection_info.report_ids); | 115 GetReportIds(collection, &collection_info.report_ids); |
113 if (collection_info.report_ids.size() > 0) { | 116 if (collection_info.report_ids.size() > 0) { |
114 *has_report_id = true; | 117 *has_report_id = true; |
115 } | 118 } |
116 top_level_collections->push_back(collection_info); | 119 top_level_collections->push_back(collection_info); |
117 } | 120 } |
118 } | 121 } |
119 } | 122 } |
120 | 123 |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 } | 294 } |
292 | 295 |
293 task_runner_->PostTask( | 296 task_runner_->PostTask( |
294 FROM_HERE, | 297 FROM_HERE, |
295 base::Bind(callback, | 298 base::Bind(callback, |
296 make_scoped_refptr(new HidConnectionMac( | 299 make_scoped_refptr(new HidConnectionMac( |
297 hid_device.release(), device_info, file_task_runner_)))); | 300 hid_device.release(), device_info, file_task_runner_)))); |
298 } | 301 } |
299 | 302 |
300 } // namespace device | 303 } // namespace device |
OLD | NEW |