Skip to content

Commit

Permalink
add Adafruit_USBD_CDC::ignoreFlowControl
Browse files Browse the repository at this point in the history
In some cases, the target application will not assert the DTR virtual line, thus preventing writing operations to succeed.
For this reason, the Adafruit_USBD_CDC::ignoreFlowControl() method disables the connection’s state verification, enabling the program to write on the port, even though the data might be lost.
  • Loading branch information
misaka19465 committed Sep 15, 2024
1 parent 05686e7 commit 0672cb8
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/arduino/Adafruit_USBD_CDC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ void Adafruit_USBD_CDC::end(void) {
_instance = INVALID_INSTANCE;
}

void Adafruit_USBD_CDC::ignoreFlowControl(bool ignore) {
_ignoreFlowControl = ignore;
}

uint32_t Adafruit_USBD_CDC::baud(void) {
if (!isValid()) {
return 0;
Expand Down Expand Up @@ -243,7 +247,7 @@ size_t Adafruit_USBD_CDC::write(const uint8_t *buffer, size_t size) {
}

size_t remain = size;
while (remain && tud_cdc_n_connected(_instance)) {
while (remain && (tud_cdc_n_connected(_instance) || _ignoreFlowControl)) {
size_t wrcount = tud_cdc_n_write(_instance, buffer, remain);
remain -= wrcount;
buffer += wrcount;
Expand Down
10 changes: 10 additions & 0 deletions src/arduino/Adafruit_USBD_CDC.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ class Adafruit_USBD_CDC : public Stream, public Adafruit_USBD_Interface {
void begin(uint32_t baud, uint8_t config);
void end(void);

// In some cases, the target application will not assert
// the DTR virtual line, thus preventing writing operations
// to succeed. For this reason, the
// Adafruit_USBD_CDC::ignoreFlowControl() method disables the
// connection’s state verification, enabling the program to
// write on the port, even though the data might be lost.
void ignoreFlowControl(bool ignore = true);

// return line coding set by host
uint32_t baud(void);
uint8_t stopbits(void);
Expand Down Expand Up @@ -90,6 +98,8 @@ class Adafruit_USBD_CDC : public Stream, public Adafruit_USBD_Interface {

uint8_t _instance;

bool _ignoreFlowControl = false;

bool isValid(void) { return _instance != INVALID_INSTANCE; }
};

Expand Down

0 comments on commit 0672cb8

Please sign in to comment.