21 #include "Predicates.hpp" 22 #include "Typedefs.hpp" 26 #include <unordered_map> 44 const size_t USB_GENERIC_STRING_MAX_LENGTH = UINT8_MAX - 2;
49 const size_t USB_VID_STRING_MAX_LENGTH = 4;
54 const size_t USB_PID_STRING_MAX_LENGTH = 4;
59 const size_t USB_PORT_STRING_MAX_LENGTH = PATH_MAX;
68 const uint8_t USB_DESCRIPTOR_TYPE_UNKNOWN = 0x00;
69 const uint8_t USB_DESCRIPTOR_TYPE_DEVICE = 0x01;
70 const uint8_t USB_DESCRIPTOR_TYPE_CONFIGURATION = 0x02;
71 const uint8_t USB_DESCRIPTOR_TYPE_STRING = 0x03;
72 const uint8_t USB_DESCRIPTOR_TYPE_INTERFACE = 0x04;
73 const uint8_t USB_DESCRIPTOR_TYPE_ENDPOINT = 0x05;
74 const uint8_t USB_DESCRIPTOR_TYPE_ASSOCIATION_INTERFACE = 0x0b;
76 enum class USBDescriptorType : uint8_t {
77 Unknown = USB_DESCRIPTOR_TYPE_UNKNOWN,
78 Device = USB_DESCRIPTOR_TYPE_DEVICE,
79 Configuration = USB_DESCRIPTOR_TYPE_CONFIGURATION,
80 String = USB_DESCRIPTOR_TYPE_STRING,
81 Interface = USB_DESCRIPTOR_TYPE_INTERFACE,
82 Endpoint = USB_DESCRIPTOR_TYPE_ENDPOINT,
83 AssociationInterface = USB_DESCRIPTOR_TYPE_ASSOCIATION_INTERFACE
88 uint8_t bDescriptorType;
89 } __attribute__((packed));
94 } __attribute__((packed));
100 uint8_t bDeviceSubClass;
101 uint8_t bDeviceProtocol;
102 uint8_t bMaxPacketSize;
106 uint8_t iManufacturer;
108 uint8_t iSerialNumber;
109 uint8_t bNumConfigurations;
110 } __attribute__((packed));
114 uint16_t wTotalLength;
115 uint8_t bNumInterfaces;
116 uint8_t bConfigurationValue;
117 uint8_t iConfiguration;
118 uint8_t bmAttributes;
120 } __attribute__((packed));
124 uint8_t bInterfaceNumber;
125 uint8_t bAlternateSetting;
126 uint8_t bNumEndpoints;
127 uint8_t bInterfaceClass;
128 uint8_t bInterfaceSubClass;
129 uint8_t bInterfaceProtocol;
131 } __attribute__((packed));
135 uint8_t bEndpointAddress;
136 uint8_t bmAttributes;
137 uint16_t wMaxPacketSize;
139 } __attribute__((packed));
143 uint8_t bEndpointAddress;
144 uint8_t bmAttributes;
145 uint16_t wMaxPacketSize;
148 uint8_t bSynchAddress;
149 } __attribute__((packed));
175 USBDeviceID(
const std::string& vendor_id,
const std::string& product_id = std::string());
203 static void checkDeviceID(
const std::string& vendor_id,
const std::string& product_id);
215 void setVendorID(
const std::string& vendor_id);
227 void setProductID(
const std::string& product_id);
234 const std::string& getVendorID()
const;
241 const std::string& getProductID()
const;
250 std::string toRuleString()
const;
257 std::string toString()
const;
271 std::string _vendor_id;
272 std::string _product_id;
275 namespace Predicates DLL_PUBLIC
302 static const uint8_t MatchClass = 1<<0;
303 static const uint8_t MatchSubClass = 1<<1;
304 static const uint8_t MatchProtocol = 1<<2;
305 static const uint8_t MatchAll = MatchClass|MatchSubClass|MatchProtocol;
323 USBInterfaceType(uint8_t bClass, uint8_t bSubClass, uint8_t bProtocol, uint8_t mask = MatchAll);
371 const std::string typeString()
const;
380 const std::string toRuleString()
const;
394 static const std::string typeString(uint8_t bClass, uint8_t bSubClass, uint8_t bProtocol, uint8_t mask = MatchAll);
405 namespace Predicates DLL_PUBLIC
420 class USBDescriptorParser;
443 size_t parse(std::istream& stream);
455 const std::vector<USBDescriptor>* getDescriptor(uint8_t bDescriptorType)
const;
464 void setDescriptor(uint8_t bDescriptorType,
const USBDescriptor& descriptor);
472 void delDescriptor(uint8_t bDescriptorType);
483 bool haveDescriptor(uint8_t bDescriptorType)
const;
490 const std::vector<std::pair<uint8_t, size_t>> getDescriptorCounts()
const;
495 std::unordered_map<uint8_t, std::vector<USBDescriptor>> _dstate_map;
496 std::unordered_map<uint8_t, size_t> _count_map;
Represents USB interface.
Definition: USB.hpp:299
Parses USB descriptors.
Definition: USB.hpp:432
Represents ID of a USB device.
Definition: USB.hpp:158