Source code for pylibftdi.examples.serial_loopback
#!/usr/bin/env python3 -u
"""
test serial loopback; assumes Rx and Tx are connected
Copyright (c) 2010-2020 Ben Bass <benbass@codedstructure.net>
All rights reserved.
"""
import os
import sys
import time
from pylibftdi import SerialDevice
[docs]
def test_string(length):
return os.urandom(length)
[docs]
class LoopbackTester:
[docs]
def __init__(self):
self.device = SerialDevice(chunk_size=16)
[docs]
def test_loopback(self, length):
test_str = test_string(length)
if self.device.write(test_str) != len(test_str):
sys.stdout.write("*")
time.sleep(0.1)
result = ""
for _ in range(5):
result = self.device.read(length)
time.sleep(0.1)
if result:
break
if result != test_str:
self.device.flush()
time.sleep(0.25)
return result == test_str
[docs]
def test_iter(self, lengths):
self.device.flush()
time.sleep(0.1)
for length in lengths:
yield self.test_loopback(length)
[docs]
def bisect(self):
xmin, xmax = 1, 5000
last_test = None
while True:
test = (xmin + xmax) // 2
if test == last_test:
break
if self.test_loopback(test):
xmin = test
else:
xmax = test
last_test = test
return test
[docs]
def main(self):
print("Determining largest non-streamed buffer size")
for bd in [9600, 31250, 115200, 1152000]:
print(f"Baudrate: {bd}")
self.device.baudrate = bd
result = self.bisect()
print(f"Buffer size: {result}")
if __name__ == "__main__":
tester = LoopbackTester()
tester.main()