//---------------------------------------------------------------------------- VOID IEP0InterruptHandler(VOID) { USBCTL |= FRSTE; // Function Reset Connection Enable tEndPoint0DescriptorBlock.bOEPBCNT = 0x00; if(bStatusAction == STATUS_ACTION_DATA_IN) { usbSendNextPacketOnIEP0(); } else { tEndPoint0DescriptorBlock.bIEPCNFG |= EPCNF_STALL; // no more data } }
void usbSendDataPacketOnEP0(uint8_t* pbBuffer) { uint16_t wTemp; pbIEP0Buffer = pbBuffer; wTemp = tSetupPacket.wLength; // Limit transfer size to wLength if needed // this prevent USB device sending 'more than require' data back to host if(wBytesRemainingOnIEP0 >= wTemp){ wBytesRemainingOnIEP0 = wTemp; bHostAskMoreDataThanAvailable = FALSE; }else bHostAskMoreDataThanAvailable = TRUE; usbSendNextPacketOnIEP0(); }
VOID usbSendDataPacketOnEP0(PBYTE pbBuffer) { WORD bTemp; pbIEP0Buffer = pbBuffer; bTemp = tSetupPacket.wLength; // Limit transfer size to wLength if needed // this prevent USB device sending 'more than require' data back to host if(wBytesRemainingOnIEP0 >= bTemp) { wBytesRemainingOnIEP0 = bTemp; bHostAskMoreDataThanAvailable = FALSE; } else { bHostAskMoreDataThanAvailable = TRUE; } usbSendNextPacketOnIEP0(); }