USBUS CDC ACM: discard oldest data if unconnected
This commit is contained in:
parent
b0b2ba61c1
commit
01c3043f6f
@ -126,7 +126,20 @@ static size_t _gen_full_acm_descriptor(usbus_t *usbus, void *arg)
|
||||
/* Submit (ACM interface in) */
|
||||
size_t usbus_cdc_acm_submit(usbus_cdcacm_device_t *cdcacm, const uint8_t *buf, size_t len)
|
||||
{
|
||||
return tsrb_add(&cdcacm->tsrb, buf, len);
|
||||
if (cdcacm->state != USBUS_CDC_ACM_LINE_STATE_DISCONNECTED) {
|
||||
return tsrb_add(&cdcacm->tsrb, buf, len);
|
||||
}
|
||||
/* stuff as much data as possible into tsrb, discarding the oldest */
|
||||
size_t n = tsrb_free(&cdcacm->tsrb);
|
||||
if (len > n) {
|
||||
n += tsrb_drop(&cdcacm->tsrb, len - n);
|
||||
buf += len - n;
|
||||
} else {
|
||||
n = len;
|
||||
}
|
||||
tsrb_add(&cdcacm->tsrb, buf, n);
|
||||
/* behave as if everything has been written correctly */
|
||||
return len;
|
||||
}
|
||||
|
||||
void usbus_cdc_acm_set_coding_cb(usbus_cdcacm_device_t *cdcacm,
|
||||
@ -161,7 +174,7 @@ void usbus_cdc_acm_init(usbus_t *usbus, usbus_cdcacm_device_t *cdcacm,
|
||||
|
||||
static void _init(usbus_t *usbus, usbus_handler_t *handler)
|
||||
{
|
||||
DEBUG("CDC_ACM: intialization\n");
|
||||
DEBUG("CDC_ACM: initialization\n");
|
||||
usbus_cdcacm_device_t *cdcacm = (usbus_cdcacm_device_t*)handler;
|
||||
|
||||
cdcacm->flush.handler = _handle_flush;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user