Skip to content

Commit

Permalink
Limit Adafruit_USBD_CDC::ignoreFlowcontrol to rp2040 core
Browse files Browse the repository at this point in the history
Adafruit_USBD_CDC::ignoreFlowcontrol added in
0672cb8 may only work for rp2040 for
now.
So add #ifdef to limit this method to rp2040 core only.
  • Loading branch information
misaka19465 committed Sep 18, 2024
1 parent 0672cb8 commit e674b68
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/arduino/Adafruit_USBD_CDC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,11 @@ void Adafruit_USBD_CDC::end(void) {
_instance = INVALID_INSTANCE;
}

#ifdef ARDUINO_ARCH_RP2040
void Adafruit_USBD_CDC::ignoreFlowControl(bool ignore) {
_ignoreFlowControl = ignore;
}
#endif

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

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

#ifdef ARDUINO_ARCH_RP2040
// 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);
#endif

// return line coding set by host
uint32_t baud(void);
Expand Down Expand Up @@ -98,7 +100,9 @@ class Adafruit_USBD_CDC : public Stream, public Adafruit_USBD_Interface {

uint8_t _instance;

#ifdef ARDUINO_ARCH_RP2040
bool _ignoreFlowControl = false;
#endif

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

0 comments on commit e674b68

Please sign in to comment.