@@ -493,16 +493,31 @@ def flush(self, flush_what: int = FLUSH_BOTH) -> None:
493
493
`FLUSH_INPUT` (just the rx buffer);
494
494
`FLUSH_OUTPUT` (just the tx buffer)
495
495
"""
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
+
506
521
res = fn (byref (self .ctx ))
507
522
if res != 0 :
508
523
msg = "%s (%d)" % (self .get_error_string (), res )
0 commit comments