Skip to content

Commit 5a79aef

Browse files
author
steve
committed
Fix: flush() now calls libftdi >= 1.5 tc[io]flush functions.
1 parent 9be4076 commit 5a79aef

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

src/pylibftdi/device.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -493,16 +493,31 @@ def flush(self, flush_what: int = FLUSH_BOTH) -> None:
493493
`FLUSH_INPUT` (just the rx buffer);
494494
`FLUSH_OUTPUT` (just the tx buffer)
495495
"""
496-
if flush_what == FLUSH_BOTH:
497-
fn = self.fdll.ftdi_usb_purge_buffers
498-
elif flush_what == FLUSH_INPUT:
499-
fn = self.fdll.ftdi_usb_purge_rx_buffer
500-
elif flush_what == FLUSH_OUTPUT:
501-
fn = self.fdll.ftdi_usb_purge_tx_buffer
502-
else:
503-
raise ValueError(
504-
f"Invalid value passed to {self.__class__.__name__}.flush()"
505-
)
496+
497+
# Prefer the libftdi >= 1.5 POSIX-style functions if they exist
498+
if hasattr(self.fdll, "ftdi_tcioflush"):
499+
if flush_what == FLUSH_BOTH:
500+
fn = self.fdll.ftdi_tcioflush
501+
elif flush_what == FLUSH_INPUT:
502+
fn = self.fdll.ftdi_tciflush
503+
elif flush_what == FLUSH_OUTPUT:
504+
fn = self.fdll.ftdi_tcoflush
505+
else:
506+
raise ValueError(
507+
f"Invalid value passed to {self.__class__.__name__}.flush()"
508+
)
509+
else: # fall back for older libftdi
510+
if flush_what == FLUSH_BOTH:
511+
fn = self.fdll.ftdi_usb_purge_buffers
512+
elif flush_what == FLUSH_INPUT:
513+
fn = self.fdll.ftdi_usb_purge_rx_buffer
514+
elif flush_what == FLUSH_OUTPUT:
515+
fn = self.fdll.ftdi_usb_purge_tx_buffer
516+
else:
517+
raise ValueError(
518+
f"Invalid value passed to {self.__class__.__name__}.flush()"
519+
)
520+
506521
res = fn(byref(self.ctx))
507522
if res != 0:
508523
msg = "%s (%d)" % (self.get_error_string(), res)

0 commit comments

Comments
 (0)