mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-25 23:38:06 +00:00
update xferred bytes of control xfer for nrf5x
This commit is contained in:
parent
d96abdb0ad
commit
b253291314
@ -86,7 +86,9 @@ typedef struct
|
|||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint8_t* buffer;
|
uint8_t* buffer;
|
||||||
uint16_t len;
|
uint16_t total_len;
|
||||||
|
uint16_t actual_len;
|
||||||
|
|
||||||
uint8_t dir;
|
uint8_t dir;
|
||||||
}control;
|
}control;
|
||||||
|
|
||||||
@ -173,7 +175,7 @@ static void edpt_dma_end(void)
|
|||||||
static void control_xact_start(void)
|
static void control_xact_start(void)
|
||||||
{
|
{
|
||||||
// Each transaction is up to 64 bytes
|
// Each transaction is up to 64 bytes
|
||||||
uint8_t const xact_len = min16_of(_dcd.control.len, MAX_PACKET_SIZE);
|
uint8_t const xact_len = min16_of(_dcd.control.total_len-_dcd.control.actual_len, MAX_PACKET_SIZE);
|
||||||
|
|
||||||
if ( _dcd.control.dir == TUSB_DIR_OUT )
|
if ( _dcd.control.dir == TUSB_DIR_OUT )
|
||||||
{
|
{
|
||||||
@ -191,8 +193,8 @@ static void control_xact_start(void)
|
|||||||
edpt_dma_start(0, TUSB_DIR_IN);
|
edpt_dma_start(0, TUSB_DIR_IN);
|
||||||
}
|
}
|
||||||
|
|
||||||
_dcd.control.buffer += xact_len;
|
_dcd.control.buffer += xact_len;
|
||||||
_dcd.control.len -= xact_len;
|
_dcd.control.actual_len += xact_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dcd_control_xfer (uint8_t rhport, tusb_dir_t dir, uint8_t * buffer, uint16_t length)
|
bool dcd_control_xfer (uint8_t rhport, tusb_dir_t dir, uint8_t * buffer, uint16_t length)
|
||||||
@ -202,9 +204,10 @@ bool dcd_control_xfer (uint8_t rhport, tusb_dir_t dir, uint8_t * buffer, uint16_
|
|||||||
if ( length )
|
if ( length )
|
||||||
{
|
{
|
||||||
// Data Phase
|
// Data Phase
|
||||||
_dcd.control.len = length;
|
_dcd.control.total_len = length;
|
||||||
_dcd.control.buffer = buffer;
|
_dcd.control.actual_len = 0;
|
||||||
_dcd.control.dir = (uint8_t) dir;
|
_dcd.control.buffer = buffer;
|
||||||
|
_dcd.control.dir = (uint8_t) dir;
|
||||||
|
|
||||||
control_xact_start();
|
control_xact_start();
|
||||||
}else
|
}else
|
||||||
@ -424,13 +427,13 @@ void USBD_IRQHandler(void)
|
|||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
// IN: data transferred from Endpoint -> Host
|
// IN: data transferred from Endpoint -> Host
|
||||||
if ( _dcd.control.len > 0 )
|
if ( _dcd.control.actual_len < _dcd.control.total_len )
|
||||||
{
|
{
|
||||||
control_xact_start();
|
control_xact_start();
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
// Control IN complete
|
// Control IN complete
|
||||||
dcd_xfer_complete(0, 0, 0, true);
|
dcd_control_complete(0, _dcd.control.actual_len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -438,13 +441,13 @@ void USBD_IRQHandler(void)
|
|||||||
// OUT data moved from Endpoint -> SRAM
|
// OUT data moved from Endpoint -> SRAM
|
||||||
if ( int_status & USBD_INTEN_ENDEPOUT0_Msk)
|
if ( int_status & USBD_INTEN_ENDEPOUT0_Msk)
|
||||||
{
|
{
|
||||||
if ( _dcd.control.len > 0 )
|
if ( _dcd.control.actual_len < _dcd.control.total_len )
|
||||||
{
|
{
|
||||||
control_xact_start();
|
control_xact_start();
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
// Control OUT complete
|
// Control OUT complete
|
||||||
dcd_xfer_complete(0, 0, 0, true);
|
dcd_control_complete(0, _dcd.control.actual_len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user