24 #if !defined(_usb_h_) || defined(__CONFDESCPARSER_H__) 25 #error "Never include confdescparser.h directly; include Usb.h instead" 28 #define __CONFDESCPARSER_H__ 35 virtual void EndpointXtract(uint8_t conf __attribute__((unused)), uint8_t iface __attribute__((unused)), uint8_t alt __attribute__((unused)), uint8_t proto __attribute__((unused)),
const USB_ENDPOINT_DESCRIPTOR *ep __attribute__((unused))) {
39 #define CP_MASK_COMPARE_CLASS 1 40 #define CP_MASK_COMPARE_SUBCLASS 2 41 #define CP_MASK_COMPARE_PROTOCOL 4 42 #define CP_MASK_COMPARE_ALL 7 46 template <const u
int8_t CLASS_ID, const u
int8_t SUBCLASS_ID, const u
int8_t PROTOCOL_ID, const u
int8_t MASK>
52 uint8_t varBuffer[16 ];
54 uint8_t stateParseDescr;
66 bool ParseDescriptor(uint8_t **pp, uint16_t *pcntdn);
75 void Parse(
const uint16_t len,
const uint8_t *pbuf,
const uint16_t &offset);
78 template <const u
int8_t CLASS_ID, const u
int8_t SUBCLASS_ID, const u
int8_t PROTOCOL_ID, const u
int8_t MASK>
80 theXtractor(xtractor),
85 theBuffer.
pValue = varBuffer;
90 template <const u
int8_t CLASS_ID, const u
int8_t SUBCLASS_ID, const u
int8_t PROTOCOL_ID, const u
int8_t MASK>
92 uint16_t cntdn = (uint16_t)len;
93 uint8_t *p = (uint8_t*)pbuf;
96 if(!ParseDescriptor(&p, &cntdn))
102 template <const u
int8_t CLASS_ID, const u
int8_t SUBCLASS_ID, const u
int8_t PROTOCOL_ID, const u
int8_t MASK>
106 switch(stateParseDescr) {
113 if(!valParser.
Parse(pp, pcntdn))
115 dscrLen = *((uint8_t*)theBuffer.
pValue);
116 dscrType = *((uint8_t*)theBuffer.
pValue + 1);
125 theBuffer.
pValue = varBuffer + 2;
131 isGoodInterface =
false;
145 if(!valParser.
Parse(pp, pcntdn))
150 if(!valParser.
Parse(pp, pcntdn))
163 isGoodInterface =
true;
169 if(!valParser.
Parse(pp, pcntdn))
181 if(!theSkipper.
Skip(pp, pcntdn, dscrLen - 2))
184 theBuffer.
pValue = varBuffer;
190 template <const u
int8_t CLASS_ID, const u
int8_t SUBCLASS_ID, const u
int8_t PROTOCOL_ID, const u
int8_t MASK>
192 Notify(
PSTR(
"\r\n\r\nHID Descriptor:\r\n"), 0x80);
194 PrintHex<uint8_t > (pDesc->
bLength, 0x80);
200 PrintHex<uint16_t > (pDesc->
bcdHID, 0x80);
214 Notify(
PSTR(
"\r\nwDescriptorLength:\t"), 0x80);
221 #endif // __CONFDESCPARSER_H__ #define CP_MASK_COMPARE_PROTOCOL
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)
#define USB_DESCRIPTOR_ENDPOINT
uint8_t bConfigurationValue
void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset)
#define CP_MASK_COMPARE_CLASS
uint16_t wDescriptorLength
#define USB_DESCRIPTOR_CONFIGURATION
bool Skip(uint8_t **pp, uint16_t *pcntdn, uint16_t bytes_to_skip)
void Initialize(MultiValueBuffer *pbuf)
#define CP_MASK_COMPARE_SUBCLASS
bool Parse(uint8_t **pp, uint16_t *pcntdn)
#define HID_DESCRIPTOR_HID
uint8_t bAlternateSetting
ConfigDescParser(UsbConfigXtracter *xtractor)
void Initialize(MultiValueBuffer *const pbuf)
uint8_t bInterfaceSubClass
uint8_t bInterfaceProtocol
#define USB_DESCRIPTOR_INTERFACE