mirror of
https://github.com/hathach/tinyusb.git
synced 2025-04-16 05:42:56 +00:00
fix issue with ftdi host driver with status bytes
add workflow_dispatch to all ci workflow
This commit is contained in:
parent
625c27ca58
commit
26d05d7fc9
1
.github/workflows/build_aarch64.yml
vendored
1
.github/workflows/build_aarch64.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build AArch64
|
name: Build AArch64
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
1
.github/workflows/build_arm.yml
vendored
1
.github/workflows/build_arm.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build ARM
|
name: Build ARM
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
1
.github/workflows/build_esp.yml
vendored
1
.github/workflows/build_esp.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build ESP
|
name: Build ESP
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
1
.github/workflows/build_iar.yml
vendored
1
.github/workflows/build_iar.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build IAR
|
name: Build IAR
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
1
.github/workflows/build_msp430.yml
vendored
1
.github/workflows/build_msp430.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build MSP430
|
name: Build MSP430
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
1
.github/workflows/build_renesas.yml
vendored
1
.github/workflows/build_renesas.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build Renesas
|
name: Build Renesas
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
1
.github/workflows/build_riscv.yml
vendored
1
.github/workflows/build_riscv.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build RISC-V
|
name: Build RISC-V
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
1
.github/workflows/build_win_mac.yml
vendored
1
.github/workflows/build_win_mac.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Build Windows/MacOS
|
name: Build Windows/MacOS
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
|
1
.github/workflows/cifuzz.yml
vendored
1
.github/workflows/cifuzz.yml
vendored
@ -1,5 +1,6 @@
|
|||||||
name: CIFuzz
|
name: CIFuzz
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
@ -550,8 +550,7 @@ void cdch_close(uint8_t daddr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cdch_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes)
|
bool cdch_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes) {
|
||||||
{
|
|
||||||
// TODO handle stall response, retry failed transfer ...
|
// TODO handle stall response, retry failed transfer ...
|
||||||
TU_ASSERT(event == XFER_RESULT_SUCCESS);
|
TU_ASSERT(event == XFER_RESULT_SUCCESS);
|
||||||
|
|
||||||
@ -559,41 +558,40 @@ bool cdch_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t event, uint32_t
|
|||||||
cdch_interface_t * p_cdc = get_itf(idx);
|
cdch_interface_t * p_cdc = get_itf(idx);
|
||||||
TU_ASSERT(p_cdc);
|
TU_ASSERT(p_cdc);
|
||||||
|
|
||||||
if ( ep_addr == p_cdc->stream.tx.ep_addr )
|
if ( ep_addr == p_cdc->stream.tx.ep_addr ) {
|
||||||
{
|
|
||||||
// invoke tx complete callback to possibly refill tx fifo
|
// invoke tx complete callback to possibly refill tx fifo
|
||||||
if (tuh_cdc_tx_complete_cb) tuh_cdc_tx_complete_cb(idx);
|
if (tuh_cdc_tx_complete_cb) tuh_cdc_tx_complete_cb(idx);
|
||||||
|
|
||||||
if ( 0 == tu_edpt_stream_write_xfer(&p_cdc->stream.tx) )
|
if ( 0 == tu_edpt_stream_write_xfer(&p_cdc->stream.tx) ) {
|
||||||
{
|
|
||||||
// If there is no data left, a ZLP should be sent if:
|
// If there is no data left, a ZLP should be sent if:
|
||||||
// - xferred_bytes is multiple of EP Packet size and not zero
|
// - xferred_bytes is multiple of EP Packet size and not zero
|
||||||
tu_edpt_stream_write_zlp_if_needed(&p_cdc->stream.tx, xferred_bytes);
|
tu_edpt_stream_write_zlp_if_needed(&p_cdc->stream.tx, xferred_bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( ep_addr == p_cdc->stream.rx.ep_addr )
|
else if ( ep_addr == p_cdc->stream.rx.ep_addr ) {
|
||||||
{
|
|
||||||
tu_edpt_stream_read_xfer_complete(&p_cdc->stream.rx, xferred_bytes);
|
|
||||||
|
|
||||||
#if CFG_TUH_CDC_FTDI
|
#if CFG_TUH_CDC_FTDI
|
||||||
// FTDI reserve 2 bytes for status
|
|
||||||
if (p_cdc->serial_drid == SERIAL_DRIVER_FTDI) {
|
if (p_cdc->serial_drid == SERIAL_DRIVER_FTDI) {
|
||||||
uint8_t status[2];
|
// FTDI reserve 2 bytes for status
|
||||||
tu_edpt_stream_read(&p_cdc->stream.rx, status, 2);
|
// FTDI status
|
||||||
(void) status; // TODO handle status
|
// uint8_t status[2] = {
|
||||||
}
|
// p_cdc->stream.rx.ep_buf[0],
|
||||||
|
// p_cdc->stream.rx.ep_buf[1]
|
||||||
|
// };
|
||||||
|
tu_edpt_stream_read_xfer_complete_offset(&p_cdc->stream.rx, xferred_bytes, 2);
|
||||||
|
}else
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
|
tu_edpt_stream_read_xfer_complete(&p_cdc->stream.rx, xferred_bytes);
|
||||||
|
}
|
||||||
|
|
||||||
// invoke receive callback
|
// invoke receive callback
|
||||||
if (tuh_cdc_rx_cb) tuh_cdc_rx_cb(idx);
|
if (tuh_cdc_rx_cb) tuh_cdc_rx_cb(idx);
|
||||||
|
|
||||||
// prepare for next transfer if needed
|
// prepare for next transfer if needed
|
||||||
tu_edpt_stream_read_xfer(&p_cdc->stream.rx);
|
tu_edpt_stream_read_xfer(&p_cdc->stream.rx);
|
||||||
}else if ( ep_addr == p_cdc->ep_notif )
|
}else if ( ep_addr == p_cdc->ep_notif ) {
|
||||||
{
|
|
||||||
// TODO handle notification endpoint
|
// TODO handle notification endpoint
|
||||||
}else
|
}else {
|
||||||
{
|
|
||||||
TU_ASSERT(false);
|
TU_ASSERT(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,21 +148,26 @@ uint32_t tu_edpt_stream_read_xfer(tu_edpt_stream_t* s);
|
|||||||
|
|
||||||
// Must be called in the transfer complete callback
|
// Must be called in the transfer complete callback
|
||||||
TU_ATTR_ALWAYS_INLINE static inline
|
TU_ATTR_ALWAYS_INLINE static inline
|
||||||
void tu_edpt_stream_read_xfer_complete(tu_edpt_stream_t* s, uint32_t xferred_bytes)
|
void tu_edpt_stream_read_xfer_complete(tu_edpt_stream_t* s, uint32_t xferred_bytes) {
|
||||||
{
|
|
||||||
tu_fifo_write_n(&s->ff, s->ep_buf, (uint16_t) xferred_bytes);
|
tu_fifo_write_n(&s->ff, s->ep_buf, (uint16_t) xferred_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Same as tu_edpt_stream_read_xfer_complete but skip the first n bytes
|
||||||
|
TU_ATTR_ALWAYS_INLINE static inline
|
||||||
|
void tu_edpt_stream_read_xfer_complete_offset(tu_edpt_stream_t* s, uint32_t xferred_bytes, uint32_t skip_offset) {
|
||||||
|
if (skip_offset < xferred_bytes) {
|
||||||
|
tu_fifo_write_n(&s->ff, s->ep_buf + skip_offset, (uint16_t) (xferred_bytes - skip_offset));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Get the number of bytes available for reading
|
// Get the number of bytes available for reading
|
||||||
TU_ATTR_ALWAYS_INLINE static inline
|
TU_ATTR_ALWAYS_INLINE static inline
|
||||||
uint32_t tu_edpt_stream_read_available(tu_edpt_stream_t* s)
|
uint32_t tu_edpt_stream_read_available(tu_edpt_stream_t* s) {
|
||||||
{
|
|
||||||
return (uint32_t) tu_fifo_count(&s->ff);
|
return (uint32_t) tu_fifo_count(&s->ff);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline
|
TU_ATTR_ALWAYS_INLINE static inline
|
||||||
bool tu_edpt_stream_peek(tu_edpt_stream_t* s, uint8_t* ch)
|
bool tu_edpt_stream_peek(tu_edpt_stream_t* s, uint8_t* ch) {
|
||||||
{
|
|
||||||
return tu_fifo_peek(&s->ff, ch);
|
return tu_fifo_peek(&s->ff, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user