mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-07 05:54:11 +08:00
Merge pull request #1289 from kasjer/kasjer/vendor-update
vendor: Write improvements
This commit is contained in:
commit
4c6bb161e2
17
src/class/vendor/vendor_device.c
vendored
17
src/class/vendor/vendor_device.c
vendored
@ -113,7 +113,7 @@ void tud_vendor_n_read_flush (uint8_t itf)
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Write API
|
// Write API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
static bool maybe_transmit(vendord_interface_t* p_itf)
|
static uint16_t maybe_transmit(vendord_interface_t* p_itf)
|
||||||
{
|
{
|
||||||
// skip if previous transfer not complete
|
// skip if previous transfer not complete
|
||||||
TU_VERIFY( !usbd_edpt_busy(TUD_OPT_RHPORT, p_itf->ep_in) );
|
TU_VERIFY( !usbd_edpt_busy(TUD_OPT_RHPORT, p_itf->ep_in) );
|
||||||
@ -123,14 +123,24 @@ static bool maybe_transmit(vendord_interface_t* p_itf)
|
|||||||
{
|
{
|
||||||
TU_ASSERT( usbd_edpt_xfer(TUD_OPT_RHPORT, p_itf->ep_in, p_itf->epin_buf, count) );
|
TU_ASSERT( usbd_edpt_xfer(TUD_OPT_RHPORT, p_itf->ep_in, p_itf->epin_buf, count) );
|
||||||
}
|
}
|
||||||
return true;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize)
|
uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize)
|
||||||
{
|
{
|
||||||
vendord_interface_t* p_itf = &_vendord_itf[itf];
|
vendord_interface_t* p_itf = &_vendord_itf[itf];
|
||||||
uint16_t ret = tu_fifo_write_n(&p_itf->tx_ff, buffer, bufsize);
|
uint16_t ret = tu_fifo_write_n(&p_itf->tx_ff, buffer, bufsize);
|
||||||
maybe_transmit(p_itf);
|
if (tu_fifo_count(&p_itf->tx_ff) >= CFG_TUD_VENDOR_EPSIZE) {
|
||||||
|
maybe_transmit(p_itf);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t tud_vendor_n_flush (uint8_t itf)
|
||||||
|
{
|
||||||
|
vendord_interface_t* p_itf = &_vendord_itf[itf];
|
||||||
|
uint32_t ret = maybe_transmit(p_itf);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,6 +257,7 @@ bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint
|
|||||||
}
|
}
|
||||||
else if ( ep_addr == p_itf->ep_in )
|
else if ( ep_addr == p_itf->ep_in )
|
||||||
{
|
{
|
||||||
|
if (tud_vendor_tx_cb) tud_vendor_tx_cb(itf, xferred_bytes);
|
||||||
// Send complete, try to send more if possible
|
// Send complete, try to send more if possible
|
||||||
maybe_transmit(p_itf);
|
maybe_transmit(p_itf);
|
||||||
}
|
}
|
||||||
|
9
src/class/vendor/vendor_device.h
vendored
9
src/class/vendor/vendor_device.h
vendored
@ -52,6 +52,7 @@ uint32_t tud_vendor_n_write_available (uint8_t itf);
|
|||||||
|
|
||||||
static inline
|
static inline
|
||||||
uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str);
|
uint32_t tud_vendor_n_write_str (uint8_t itf, char const* str);
|
||||||
|
uint32_t tud_vendor_n_flush (uint8_t itf);
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Application API (Single Port)
|
// Application API (Single Port)
|
||||||
@ -64,6 +65,7 @@ static inline void tud_vendor_read_flush (void);
|
|||||||
static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize);
|
static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize);
|
||||||
static inline uint32_t tud_vendor_write_str (char const* str);
|
static inline uint32_t tud_vendor_write_str (char const* str);
|
||||||
static inline uint32_t tud_vendor_write_available (void);
|
static inline uint32_t tud_vendor_write_available (void);
|
||||||
|
static inline uint32_t tud_vendor_flush (void);
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Application Callback API (weak is optional)
|
// Application Callback API (weak is optional)
|
||||||
@ -71,6 +73,8 @@ static inline uint32_t tud_vendor_write_available (void);
|
|||||||
|
|
||||||
// Invoked when received new data
|
// Invoked when received new data
|
||||||
TU_ATTR_WEAK void tud_vendor_rx_cb(uint8_t itf);
|
TU_ATTR_WEAK void tud_vendor_rx_cb(uint8_t itf);
|
||||||
|
// Invoked when last rx transfer finished
|
||||||
|
TU_ATTR_WEAK void tud_vendor_tx_cb(uint8_t itf, uint32_t sent_bytes);
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Inline Functions
|
// Inline Functions
|
||||||
@ -121,6 +125,11 @@ static inline uint32_t tud_vendor_write_available (void)
|
|||||||
return tud_vendor_n_write_available(0);
|
return tud_vendor_n_write_available(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint32_t tud_vendor_flush (void)
|
||||||
|
{
|
||||||
|
return tud_vendor_n_flush(0);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Internal Class Driver API
|
// Internal Class Driver API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
Loading…
x
Reference in New Issue
Block a user