Remove EP0 remaining bytes manipulation
Renaming edpt_xact to edpt_schedule_packets
This commit is contained in:
parent
067287ef91
commit
4f69bcea7e
|
@ -186,7 +186,7 @@ static void end_of_reset(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void edpt_xact(uint8_t const epnum, uint8_t const dir, uint16_t const num_packets, uint16_t total_bytes) {
|
static void edpt_schedule_packets(uint8_t const epnum, uint8_t const dir, uint16_t const num_packets, uint16_t total_bytes) {
|
||||||
USB_OTG_DeviceTypeDef * const dev = DEVICE_BASE;
|
USB_OTG_DeviceTypeDef * const dev = DEVICE_BASE;
|
||||||
USB_OTG_OUTEndpointTypeDef * const out_ep = OUT_EP_BASE;
|
USB_OTG_OUTEndpointTypeDef * const out_ep = OUT_EP_BASE;
|
||||||
USB_OTG_INEndpointTypeDef * const in_ep = IN_EP_BASE;
|
USB_OTG_INEndpointTypeDef * const in_ep = IN_EP_BASE;
|
||||||
|
@ -393,7 +393,7 @@ bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
|
||||||
if(epnum == 0) {
|
if(epnum == 0) {
|
||||||
ep0_pending[dir] = total_bytes;
|
ep0_pending[dir] = total_bytes;
|
||||||
// Schedule the first transaction for EP0 transfer
|
// Schedule the first transaction for EP0 transfer
|
||||||
edpt_xact(epnum, dir, 1, ep0_pending[dir]);
|
edpt_schedule_packets(epnum, dir, 1, ep0_pending[dir]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -405,8 +405,8 @@ bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
|
||||||
num_packets++;
|
num_packets++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Schedule the transaction for endpoint transfer
|
// Schedule packets to be sent within interrupt
|
||||||
edpt_xact(epnum, dir, num_packets, total_bytes);
|
edpt_schedule_packets(epnum, dir, num_packets, total_bytes);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -570,15 +570,11 @@ static void handle_rxflvl_ints(USB_OTG_OUTEndpointTypeDef * out_ep) {
|
||||||
{
|
{
|
||||||
xfer_ctl_t * xfer = XFER_CTL_BASE(epnum, TUSB_DIR_OUT);
|
xfer_ctl_t * xfer = XFER_CTL_BASE(epnum, TUSB_DIR_OUT);
|
||||||
|
|
||||||
// Use BCNT to calculate correct bytes before data entry popped out from RxFIFO
|
|
||||||
uint16_t remaining_bytes = ((out_ep[epnum].DOEPTSIZ & USB_OTG_DOEPTSIZ_XFRSIZ_Msk) \
|
|
||||||
>> USB_OTG_DOEPTSIZ_XFRSIZ_Pos) + bcnt;
|
|
||||||
|
|
||||||
// Adjust remaining bytes in case of multi packet EP0 transfer
|
|
||||||
if(epnum == 0) remaining_bytes += ep0_pending[TUSB_DIR_OUT];
|
|
||||||
|
|
||||||
// Read packet off RxFIFO
|
// Read packet off RxFIFO
|
||||||
read_fifo_packet((xfer->buffer + xfer->total_len - remaining_bytes), bcnt);
|
read_fifo_packet(xfer->buffer, bcnt);
|
||||||
|
|
||||||
|
// Increment pointer to xfer data
|
||||||
|
xfer->buffer += bcnt;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x03: // Out packet done (Interrupt)
|
case 0x03: // Out packet done (Interrupt)
|
||||||
|
@ -624,7 +620,7 @@ static void handle_epout_ints(USB_OTG_DeviceTypeDef * dev, USB_OTG_OUTEndpointTy
|
||||||
// EP0 can only handle one packet
|
// EP0 can only handle one packet
|
||||||
if((n == 0) && ep0_pending[TUSB_DIR_OUT]) {
|
if((n == 0) && ep0_pending[TUSB_DIR_OUT]) {
|
||||||
// Schedule another packet to be received.
|
// Schedule another packet to be received.
|
||||||
edpt_xact(n, TUSB_DIR_OUT, 1, ep0_pending[TUSB_DIR_OUT]);
|
edpt_schedule_packets(n, TUSB_DIR_OUT, 1, ep0_pending[TUSB_DIR_OUT]);
|
||||||
} else {
|
} else {
|
||||||
dcd_event_xfer_complete(0, n, xfer->total_len, XFER_RESULT_SUCCESS, true);
|
dcd_event_xfer_complete(0, n, xfer->total_len, XFER_RESULT_SUCCESS, true);
|
||||||
}
|
}
|
||||||
|
@ -651,7 +647,7 @@ static void handle_epin_ints(USB_OTG_DeviceTypeDef * dev, USB_OTG_INEndpointType
|
||||||
// EP0 can only handle one packet
|
// EP0 can only handle one packet
|
||||||
if((n == 0) && ep0_pending[TUSB_DIR_IN]) {
|
if((n == 0) && ep0_pending[TUSB_DIR_IN]) {
|
||||||
// Schedule another packet to be transmitted.
|
// Schedule another packet to be transmitted.
|
||||||
edpt_xact(n, TUSB_DIR_IN, 1, ep0_pending[TUSB_DIR_IN]);
|
edpt_schedule_packets(n, TUSB_DIR_IN, 1, ep0_pending[TUSB_DIR_IN]);
|
||||||
} else {
|
} else {
|
||||||
dcd_event_xfer_complete(0, n | TUSB_DIR_IN_MASK, xfer->total_len, XFER_RESULT_SUCCESS, true);
|
dcd_event_xfer_complete(0, n | TUSB_DIR_IN_MASK, xfer->total_len, XFER_RESULT_SUCCESS, true);
|
||||||
}
|
}
|
||||||
|
@ -679,11 +675,11 @@ static void handle_epin_ints(USB_OTG_DeviceTypeDef * dev, USB_OTG_INEndpointType
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adjust remaining bytes in case of multi packet EP0 transfer
|
|
||||||
if(n == 0) remaining_bytes += ep0_pending[TUSB_DIR_IN];
|
|
||||||
|
|
||||||
// Push packet to Tx-FIFO
|
// Push packet to Tx-FIFO
|
||||||
write_fifo_packet(n, (xfer->buffer + xfer->total_len - remaining_bytes), packet_size);
|
write_fifo_packet(n, xfer->buffer, packet_size);
|
||||||
|
|
||||||
|
// Increment pointer to xfer data
|
||||||
|
xfer->buffer += packet_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn off TXFE if all bytes are written.
|
// Turn off TXFE if all bytes are written.
|
||||||
|
|
Loading…
Reference in New Issue