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
3// found in the LICENSE file.
4
5#ifndef DEVICE_USB_USB_DEVICE_FILTER_H_
6#define DEVICE_USB_USB_DEVICE_FILTER_H_
7
8#include <vector>
9
10#include "base/memory/ref_counted.h"
11
12namespace base {
13class Value;
14}
15
16namespace device {
17
18class UsbDevice;
19
20class UsbDeviceFilter {
21 public:
22  UsbDeviceFilter();
23  ~UsbDeviceFilter();
24
25  void SetVendorId(uint16 vendor_id);
26  void SetProductId(uint16 product_id);
27  void SetInterfaceClass(uint8 interface_class);
28  void SetInterfaceSubclass(uint8 interface_subclass);
29  void SetInterfaceProtocol(uint8 interface_protocol);
30
31  bool Matches(scoped_refptr<UsbDevice> device) const;
32  base::Value* ToValue() const;
33
34  static bool MatchesAny(scoped_refptr<UsbDevice> device,
35                         const std::vector<UsbDeviceFilter>& filters);
36
37 private:
38  uint16 vendor_id_;
39  uint16 product_id_;
40  uint8 interface_class_;
41  uint8 interface_subclass_;
42  uint8 interface_protocol_;
43  bool vendor_id_set_ : 1;
44  bool product_id_set_ : 1;
45  bool interface_class_set_ : 1;
46  bool interface_subclass_set_ : 1;
47  bool interface_protocol_set_ : 1;
48};
49
50}  // namespace device
51
52#endif  // DEVICE_USB_USB_DEVICE_FILTER_H_
53