14 uint16_t HIDUniversal::GetHidClassDescrLen(uint8_t type, uint8_t num) {
16 if (descrInfo[i].bDescrType == type) {
25 void HIDUniversal::Initialize() {
27 rptParsers[i].rptId = 0;
28 rptParsers[i].rptParser = NULL;
35 hidInterfaces[i].bmInterface = 0;
36 hidInterfaces[i].bmProtocol = 0;
39 hidInterfaces[i].epIndex[j] = 0;
51 ZeroMemory(constBuffLen, prevBuf);
56 if (rptParsers[i].rptId == 0 && rptParsers[i].rptParser == NULL) {
57 rptParsers[i].rptId = id;
58 rptParsers[i].rptParser = prs;
67 return ((rptParsers[0].rptParser) ? rptParsers[0].rptParser : NULL);
70 if (rptParsers[i].rptId ==
id)
71 return rptParsers[i].rptParser;
79 uint8_t buf[constBufSize];
118 len = (buf[0] > constBufSize) ? constBufSize : buf[0];
124 goto FailGetDevDescr;
167 goto FailGetDevDescr;
175 goto FailSetDevTblEntry;
179 for (uint8_t i = 0; i < num_of_conf; i++) {
188 goto FailGetConfDescr;
206 goto FailSetConfDescr;
208 for (uint8_t i = 0; i < bNumIface; i++) {
212 rcode =
SetIdle(hidInterfaces[i].bmInterface, 0, 0);
226 #ifdef DEBUG_USB_HOST
232 #ifdef DEBUG_USB_HOST
238 #ifdef DEBUG_USB_HOST
244 #ifdef DEBUG_USB_HOST
251 #ifdef DEBUG_USB_HOST
256 #ifdef DEBUG_USB_HOST
263 HIDUniversal::HIDInterface* HIDUniversal::FindInterface(uint8_t iface, uint8_t alt, uint8_t proto) {
265 if (hidInterfaces[i].bmInterface == iface && hidInterfaces[i].bmAltSet == alt
266 && hidInterfaces[i].bmProtocol == proto)
267 return hidInterfaces + i;
273 if (bNumEP > 1 && conf != bConfNum)
283 HIDInterface *piface = FindInterface(iface, alt, proto);
287 piface = hidInterfaces + bNumIface;
288 piface->bmInterface = iface;
289 piface->bmAltSet = alt;
290 piface->bmProtocol = proto;
307 piface->epIndex[index] = bNumEP;
324 bool HIDUniversal::BuffersIdentical(uint8_t len, uint8_t *buf1, uint8_t *buf2) {
325 for (uint8_t i = 0; i < len; i++)
326 if (buf1[i] != buf2[i])
331 void HIDUniversal::ZeroMemory(uint8_t len, uint8_t *buf) {
332 for (uint8_t i = 0; i < len; i++)
336 void HIDUniversal::SaveBuffer(uint8_t len, uint8_t *src, uint8_t *dest) {
337 for (uint8_t i = 0; i < len; i++)
347 if (qNextPollTime <= millis()) {
348 qNextPollTime = millis() + 50;
350 uint8_t buf[constBuffLen];
352 for (uint8_t i = 0; i < bNumIface; i++) {
354 uint16_t read = (uint16_t)epInfo[index].maxPktSize;
356 ZeroMemory(constBuffLen, buf);
366 if (read > constBuffLen)
369 bool identical = BuffersIdentical(read, buf, prevBuf);
371 SaveBuffer(read, buf, prevBuf);
376 Notify(PSTR(
"\r\nBuf: "), 0x80);
378 for (uint8_t i = 0; i < read; i++)
379 D_PrintHex<uint8_t > (buf[i], 0x80);
381 Notify(PSTR(
"\r\n"), 0x80);
uint8_t getConfDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t *dataptr)
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)
#define USB_ERROR_EPINFO_IS_NULL
static const uint8_t epInterruptOutIndex
uint8_t setConf(uint8_t addr, uint8_t ep, uint8_t conf_value)
#define NotifyFailGetDevDescr(...)
uint8_t setEpInfoEntry(uint8_t addr, uint8_t epcount, EpInfo *eprecord_ptr)
virtual uint8_t Release()
#define CP_MASK_COMPARE_CLASS
virtual uint8_t OnInitSuccessful()
virtual void FreeAddress(uint8_t addr)=0
uint16_t wDescriptorLength
virtual UsbDevice * GetUsbDevicePtr(uint8_t addr)=0
uint8_t setAddr(uint8_t oldaddr, uint8_t ep, uint8_t newaddr)
#define NotifyFailGetConfDescr(...)
#define USB_NAK_MAX_POWER
virtual HIDReportParser * GetReportParser(uint8_t id)
virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)
virtual uint8_t AllocAddress(uint8_t parent, bool is_hub=false, uint8_t port=0)=0
#define USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE
#define USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL
virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)=0
uint8_t inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t *data)
#define MAX_REPORT_PARSERS
#define USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED
uint8_t SetIdle(uint8_t iface, uint8_t reportID, uint8_t duration)
static const uint8_t epInterruptInIndex
#define USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL
AddressPool & GetAddressPool()
uint8_t RegisterDeviceClass(USBDeviceConfig *pdev)
static const uint8_t totalEndpoints
#define NotifyFailSetConfDescr(...)
#define HID_MAX_HID_CLASS_DESCRIPTORS
static const uint8_t maxEpPerInterface
virtual bool SetReportParser(uint8_t id, HIDReportParser *prs)
uint8_t getDevDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t *dataptr)
defined(USB_METHODS_INLINE)
#define NotifyFailSetDevTblEntry(...)
static const uint8_t maxHidInterfaces