32 uint16_t HIDComposite::GetHidClassDescrLen(uint8_t type, uint8_t num) {
34 if(descrInfo[i].bDescrType == type) {
43 void HIDComposite::Initialize() {
45 rptParsers[i].rptId = 0;
46 rptParsers[i].rptParser = NULL;
74 if(rptParsers[i].rptId == 0 && rptParsers[i].rptParser == NULL) {
75 rptParsers[i].rptId = id;
76 rptParsers[i].rptParser = prs;
85 return ((rptParsers[0].rptParser) ? rptParsers[0].rptParser : NULL);
88 if(rptParsers[i].rptId ==
id)
89 return rptParsers[i].rptParser;
97 uint8_t buf[constBufSize];
137 len = (buf[0] > constBufSize) ? constBufSize : buf[0];
143 goto FailGetDevDescr;
186 goto FailGetDevDescr;
197 goto FailSetDevTblEntry;
201 for(uint8_t i = 0; i < num_of_conf; i++) {
210 goto FailGetConfDescr;
228 goto FailSetConfDescr;
232 for(uint8_t i = 0; i < bNumIface; i++) {
252 #ifdef DEBUG_USB_HOST 258 #ifdef DEBUG_USB_HOST 264 #ifdef DEBUG_USB_HOST 270 #ifdef DEBUG_USB_HOST 277 #ifdef DEBUG_USB_HOST 281 #ifdef DEBUG_USB_HOST 289 HIDComposite::HIDInterface* HIDComposite::FindInterface(uint8_t iface, uint8_t alt, uint8_t proto) {
305 HIDInterface *piface = FindInterface(iface, alt, proto);
310 piface->bmInterface = iface;
311 piface->bmAltSet = alt;
312 piface->bmProtocol = proto;
333 piface->epIndex[index] = bNumEP;
335 if(pollInterval < pep->bInterval)
352 void HIDComposite::ZeroMemory(uint8_t len, uint8_t *buf) {
353 for(uint8_t i = 0; i < len; i++)
363 if((
long)(millis() - qNextPollTime) >= 0
L) {
364 qNextPollTime = millis() + pollInterval;
366 uint8_t buf[constBuffLen];
368 for(uint8_t i = 0; i < bNumIface; i++) {
374 uint16_t read = (uint16_t)
epInfo[index].maxPktSize;
376 ZeroMemory(constBuffLen, buf);
382 USBTRACE3(
"(hidcomposite.h) Poll:", rcode, 0x81);
389 if(read > constBuffLen)
395 for(uint8_t i = 0; i < read; i++) {
396 D_PrintHex<uint8_t > (buf[i], 0x80);
uint8_t getConfDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t *dataptr)
#define USB_ERROR_EPINFO_IS_NULL
#define HID_MAX_HID_CLASS_DESCRIPTORS
#define MAX_REPORT_PARSERS
virtual uint8_t OnInitSuccessful()
uint8_t setConf(uint8_t addr, uint8_t ep, uint8_t conf_value)
HIDInterface hidInterfaces[maxHidInterfaces]
virtual void ParseHIDData(USBHID *hid, uint8_t ep, bool is_rpt_id, uint8_t len, uint8_t *buf)
#define NotifyFailGetDevDescr(...)
uint8_t setEpInfoEntry(uint8_t addr, uint8_t epcount, EpInfo *eprecord_ptr)
uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)
EpInfo epInfo[totalEndpoints]
#define CP_MASK_COMPARE_CLASS
virtual void FreeAddress(uint8_t addr)=0
uint16_t wDescriptorLength
virtual UsbDevice * GetUsbDevicePtr(uint8_t addr)=0
uint8_t SetIdle(uint8_t iface, uint8_t reportID, uint8_t duration)
uint8_t setAddr(uint8_t oldaddr, uint8_t ep, uint8_t newaddr)
#define NotifyFailGetConfDescr(...)
#define USB_NAK_MAX_POWER
uint8_t outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t *data)
static const uint8_t epInterruptOutIndex
static const uint8_t maxEpPerInterface
virtual bool SelectInterface(uint8_t iface, uint8_t proto)=0
static const uint8_t epInterruptInIndex
virtual uint8_t AllocAddress(uint8_t parent, bool is_hub=false, uint8_t port=0)=0
static const uint8_t maxHidInterfaces
#define USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE
#define USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL
#define USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED
static const uint8_t totalEndpoints
void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)
uint8_t inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t *data, uint8_t bInterval=0)
uint8_t bNumConfigurations
#define USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL
uint8_t SndRpt(uint16_t nbytes, uint8_t *dataptr)
AddressPool & GetAddressPool()
bool SetReportParser(uint8_t id, HIDReportParser *prs)
HIDReportParser * GetReportParser(uint8_t id)
#define USBTRACE3(s, r, l)
uint8_t RegisterDeviceClass(USBDeviceConfig *pdev)
#define NotifyFailSetConfDescr(...)
virtual void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)=0
uint8_t getDevDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t *dataptr)
defined(USB_METHODS_INLINE)
#define NotifyFailSetDevTblEntry(...)