Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(498)

Unified Diff: device/hid/hid_device_filter.cc

Issue 514923002: Add more generic filters to the chrome.hid.getDevices API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean up the chrome.hid documentation even more. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/hid/hid_device_filter.h ('k') | device/hid/hid_device_filter_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/hid/hid_device_filter.cc
diff --git a/device/hid/hid_device_filter.cc b/device/hid/hid_device_filter.cc
new file mode 100644
index 0000000000000000000000000000000000000000..70ebcf4927d03ea2ce09ac082dd63fe08ce54a26
--- /dev/null
+++ b/device/hid/hid_device_filter.cc
@@ -0,0 +1,89 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device/hid/hid_device_filter.h"
+
+#include "device/hid/hid_device_info.h"
+
+namespace device {
+
+HidDeviceFilter::HidDeviceFilter()
+ : vendor_id_set_(false),
+ product_id_set_(false),
+ usage_page_set_(false),
+ usage_set_(false) {
+}
+
+HidDeviceFilter::~HidDeviceFilter() {
+}
+
+void HidDeviceFilter::SetVendorId(uint16_t vendor_id) {
+ vendor_id_set_ = true;
+ vendor_id_ = vendor_id;
+}
+
+void HidDeviceFilter::SetProductId(uint16_t product_id) {
+ product_id_set_ = true;
+ product_id_ = product_id;
+}
+
+void HidDeviceFilter::SetUsagePage(uint16_t usage_page) {
+ usage_page_set_ = true;
+ usage_page_ = usage_page;
+}
+
+void HidDeviceFilter::SetUsage(uint16_t usage) {
+ usage_set_ = true;
+ usage_ = usage;
+}
+
+bool HidDeviceFilter::Matches(const HidDeviceInfo& device_info) const {
+ if (vendor_id_set_) {
+ if (device_info.vendor_id != vendor_id_) {
+ return false;
+ }
+
+ if (product_id_set_ && device_info.product_id != product_id_) {
+ return false;
+ }
+ }
+
+ if (usage_page_set_) {
+ bool found_matching_collection = false;
+ for (std::vector<HidCollectionInfo>::const_iterator i =
+ device_info.collections.begin();
+ i != device_info.collections.end() && !found_matching_collection;
+ ++i) {
+ const HidCollectionInfo& collection = *i;
+ if (collection.usage.usage_page != usage_page_) {
+ continue;
+ }
+ if (usage_set_ && collection.usage.usage != usage_) {
+ continue;
+ }
+ found_matching_collection = true;
+ }
+ if (!found_matching_collection) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+// static
+bool HidDeviceFilter::MatchesAny(
+ const HidDeviceInfo& device_info,
+ const std::vector<HidDeviceFilter>& filters) {
+ for (std::vector<HidDeviceFilter>::const_iterator i = filters.begin();
+ i != filters.end();
+ ++i) {
+ if (i->Matches(device_info)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+} // namespace device
« no previous file with comments | « device/hid/hid_device_filter.h ('k') | device/hid/hid_device_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698