mirror of
https://github.com/felis/USB_Host_Shield_2.0.git
synced 2024-03-22 11:31:26 +01:00
Add delay between multiple calls to dispatchpkt inside InTransfer
Fixes: #167
This commit is contained in:
parent
607932b437
commit
e7bb5fafb1
3 changed files with 9 additions and 8 deletions
4
BTD.cpp
4
BTD.cpp
|
@ -388,7 +388,7 @@ void BTD::disconnect() {
|
||||||
|
|
||||||
void BTD::HCI_event_task() {
|
void BTD::HCI_event_task() {
|
||||||
uint16_t length = BULK_MAXPKTSIZE; // Request more than 16 bytes anyway, the inTransfer routine will take care of this
|
uint16_t length = BULK_MAXPKTSIZE; // Request more than 16 bytes anyway, the inTransfer routine will take care of this
|
||||||
uint8_t rcode = pUsb->inTransfer(bAddress, epInfo[ BTD_EVENT_PIPE ].epAddr, &length, hcibuf); // Input on endpoint 1
|
uint8_t rcode = pUsb->inTransfer(bAddress, epInfo[ BTD_EVENT_PIPE ].epAddr, &length, hcibuf, pollInterval); // Input on endpoint 1
|
||||||
|
|
||||||
if(!rcode || rcode == hrNAK) { // Check for errors
|
if(!rcode || rcode == hrNAK) { // Check for errors
|
||||||
switch(hcibuf[0]) { // Switch on event type
|
switch(hcibuf[0]) { // Switch on event type
|
||||||
|
@ -900,7 +900,7 @@ void BTD::HCI_task() {
|
||||||
|
|
||||||
void BTD::ACL_event_task() {
|
void BTD::ACL_event_task() {
|
||||||
uint16_t length = BULK_MAXPKTSIZE;
|
uint16_t length = BULK_MAXPKTSIZE;
|
||||||
uint8_t rcode = pUsb->inTransfer(bAddress, epInfo[ BTD_DATAIN_PIPE ].epAddr, &length, l2capinbuf); // Input on endpoint 2
|
uint8_t rcode = pUsb->inTransfer(bAddress, epInfo[ BTD_DATAIN_PIPE ].epAddr, &length, l2capinbuf, pollInterval); // Input on endpoint 2
|
||||||
|
|
||||||
if(!rcode) { // Check for errors
|
if(!rcode) { // Check for errors
|
||||||
if(length > 0) { // Check if any data was read
|
if(length > 0) { // Check if any data was read
|
||||||
|
|
9
Usb.cpp
9
Usb.cpp
|
@ -203,7 +203,7 @@ uint8_t USB::ctrlReq(uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bReque
|
||||||
|
|
||||||
/* rcode 0 if no errors. rcode 01-0f is relayed from dispatchPkt(). Rcode f0 means RCVDAVIRQ error,
|
/* rcode 0 if no errors. rcode 01-0f is relayed from dispatchPkt(). Rcode f0 means RCVDAVIRQ error,
|
||||||
fe USB xfer timeout */
|
fe USB xfer timeout */
|
||||||
uint8_t USB::inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data) {
|
uint8_t USB::inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data, uint8_t bInterval /*= 0*/) {
|
||||||
EpInfo *pep = NULL;
|
EpInfo *pep = NULL;
|
||||||
uint16_t nak_limit = 0;
|
uint16_t nak_limit = 0;
|
||||||
|
|
||||||
|
@ -215,10 +215,10 @@ uint8_t USB::inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t*
|
||||||
USBTRACE3("(USB::InTransfer) ep requested ", ep, 0x81);
|
USBTRACE3("(USB::InTransfer) ep requested ", ep, 0x81);
|
||||||
return rcode;
|
return rcode;
|
||||||
}
|
}
|
||||||
return InTransfer(pep, nak_limit, nbytesptr, data);
|
return InTransfer(pep, nak_limit, nbytesptr, data, bInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t USB::InTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t* data) {
|
uint8_t USB::InTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t* data, uint8_t bInterval /*= 0*/) {
|
||||||
uint8_t rcode = 0;
|
uint8_t rcode = 0;
|
||||||
uint8_t pktsize;
|
uint8_t pktsize;
|
||||||
|
|
||||||
|
@ -280,7 +280,8 @@ uint8_t USB::InTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, ui
|
||||||
//printf("\r\n");
|
//printf("\r\n");
|
||||||
rcode = 0;
|
rcode = 0;
|
||||||
break;
|
break;
|
||||||
} // if
|
} else if(bInterval > 0)
|
||||||
|
delay(bInterval); // Delay according to polling interval
|
||||||
} //while( 1 )
|
} //while( 1 )
|
||||||
return ( rcode);
|
return ( rcode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -245,7 +245,7 @@ public:
|
||||||
/**/
|
/**/
|
||||||
uint8_t ctrlData(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr, bool direction);
|
uint8_t ctrlData(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr, bool direction);
|
||||||
uint8_t ctrlStatus(uint8_t ep, bool direction, uint16_t nak_limit);
|
uint8_t ctrlStatus(uint8_t ep, bool direction, uint16_t nak_limit);
|
||||||
uint8_t inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data);
|
uint8_t inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data, uint8_t bInterval = 0);
|
||||||
uint8_t outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data);
|
uint8_t outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data);
|
||||||
uint8_t dispatchPkt(uint8_t token, uint8_t ep, uint16_t nak_limit);
|
uint8_t dispatchPkt(uint8_t token, uint8_t ep, uint16_t nak_limit);
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ private:
|
||||||
void init();
|
void init();
|
||||||
uint8_t SetAddress(uint8_t addr, uint8_t ep, EpInfo **ppep, uint16_t *nak_limit);
|
uint8_t SetAddress(uint8_t addr, uint8_t ep, EpInfo **ppep, uint16_t *nak_limit);
|
||||||
uint8_t OutTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t nbytes, uint8_t *data);
|
uint8_t OutTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t nbytes, uint8_t *data);
|
||||||
uint8_t InTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t *data);
|
uint8_t InTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t *data, uint8_t bInterval = 0);
|
||||||
uint8_t AttemptConfig(uint8_t driver, uint8_t parent, uint8_t port, bool lowspeed);
|
uint8_t AttemptConfig(uint8_t driver, uint8_t parent, uint8_t port, bool lowspeed);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue