diff --git a/bench-data-connector/.gitignore b/bench-data-connector/.gitignore new file mode 100644 index 0000000..c18dd8d --- /dev/null +++ b/bench-data-connector/.gitignore @@ -0,0 +1 @@ +__pycache__/ diff --git a/bench-data-connector/.python-version b/bench-data-connector/.python-version new file mode 100644 index 0000000..24ee5b1 --- /dev/null +++ b/bench-data-connector/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/bench-data-connector/README.md b/bench-data-connector/README.md new file mode 100644 index 0000000..e69de29 diff --git a/bench-data-connector/pyproject.toml b/bench-data-connector/pyproject.toml new file mode 100644 index 0000000..d6340af --- /dev/null +++ b/bench-data-connector/pyproject.toml @@ -0,0 +1,19 @@ +[project] +name = "bench-data-connector" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +authors = [ + { name = "Martin Girard", email = "mgkik@outlook.fr" } +] +requires-python = ">=3.13" +dependencies = [ + "pyserial>=3.5", +] + +[project.scripts] +bench-data-connector = "bench_data_connector:main" + +[build-system] +requires = ["uv_build>=0.12.12,<0.13.0"] +build-backend = "uv_build" diff --git a/bench-data-connector/src/bench_data_connector/__init__.py b/bench-data-connector/src/bench_data_connector/__init__.py new file mode 100644 index 0000000..e25d756 --- /dev/null +++ b/bench-data-connector/src/bench_data_connector/__init__.py @@ -0,0 +1,73 @@ +from serial.tools import list_ports +from serial import Serial +import struct + +def main() -> None: + try: + print("Hello from bench-data-connector!") + choice = None + ports = list(list_ports.comports()) + for index, port in enumerate(ports): + print(f"{index}: {port.device} {port.description}") + try: + choice = int(input("Choose a port to connect: ")) + except ValueError: + pass + + while choice is None or choice >= len(ports): + + try: + choice = int(input("Unknown port. Try again : ")) + except ValueError: + pass + + + selected_port = ports[choice].device + print(f"Selected port : {selected_port}") + except KeyboardInterrupt: + print("\n") + exit(0) + + with Serial(selected_port,baudrate=115200,timeout=1) as ser: + while True: + start_sync(ser) + print("paquet trouvé") + payload = ser.read(9) # 9 corresponds to the payload size of the data frame + if not payload: + continue + crc = ser.read(2) + if not crc: + continue + received_crc = struct.unpack(" int: + crc = 0xFFFF + + for byte in data: + crc ^= byte << 8 + + for _ in range(8): + if crc & 0x8000: + crc = (crc << 1) ^ 0x1021 + else: + crc <<= 1 + + crc &= 0xFFFF + + return crc + + +def start_sync(ser: Serial) -> None: + previous = None + while True: + byte = ser.read(1) + if not byte : + continue + if previous == b"\xEF" and byte == b"\xBE" : + return + previous = byte + diff --git a/bench-data-connector/uv.lock b/bench-data-connector/uv.lock new file mode 100644 index 0000000..535be74 --- /dev/null +++ b/bench-data-connector/uv.lock @@ -0,0 +1,23 @@ +version = 1 +revision = 3 +requires-python = ">=3.13" + +[[package]] +name = "bench-data-connector" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "pyserial" }, +] + +[package.metadata] +requires-dist = [{ name = "pyserial", specifier = ">=3.5" }] + +[[package]] +name = "pyserial" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/7d/ae3f0a63f41e4d2f6cb66a5b57197850f919f59e558159a4dd3a818f5082/pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb", size = 159125, upload-time = "2020-11-23T03:59:15.045Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585, upload-time = "2020-11-23T03:59:13.41Z" }, +]