From edd981778e3f8d0cae27306e33307a0ab46093e3 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Mon, 6 Apr 2026 22:53:00 -0600 Subject: [PATCH] refactor: rename package to donglora-python, import as donglora_python --- {donglora => donglora_python}/__init__.py | 21 +++++++++++++++++---- pyproject.toml | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) rename {donglora => donglora_python}/__init__.py (94%) diff --git a/donglora/__init__.py b/donglora_python/__init__.py similarity index 94% rename from donglora/__init__.py rename to donglora_python/__init__.py index 9911688..bb58efa 100644 --- a/donglora/__init__.py +++ b/donglora_python/__init__.py @@ -19,9 +19,17 @@ from cobs import cobs USB_VID_PID = "1209:5741" +# Known USB-UART bridge VID:PIDs found on some board revisions. +BRIDGE_VID_PIDS = {"10c4:ea60", "1a86:55d4", "1a86:7523", "0403:6001"} + def find_port() -> str | None: - """Find the DongLoRa serial port by USB VID:PID.""" + """Find the DongLoRa serial port by USB VID:PID. + + Checks for native USB CDC-ACM first (1209:5741), then falls back to + known USB-UART bridge chips found on some board revisions. + """ + bridge_match = None for path in sorted(glob.glob("/dev/ttyACM*")) + sorted(glob.glob("/dev/ttyUSB*")): try: result = subprocess.run( @@ -33,11 +41,16 @@ def find_port() -> str | None: ) vid = props.get("ID_VENDOR_ID", "").lower() pid = props.get("ID_MODEL_ID", "").lower() - if f"{vid}:{pid}" == USB_VID_PID: + vid_pid = f"{vid}:{pid}" + if vid_pid == USB_VID_PID: return path + if bridge_match is None and vid_pid in BRIDGE_VID_PIDS: + bridge_match = path except Exception: continue - ports = sorted(glob.glob("/dev/ttyACM*")) + if bridge_match is not None: + return bridge_match + ports = sorted(glob.glob("/dev/ttyACM*")) + sorted(glob.glob("/dev/ttyUSB*")) return ports[0] if ports else None @@ -345,7 +358,7 @@ def connect(port: str | None = None, timeout: float = 2.0) -> serial.Serial | Mu # No mux available — direct USB serial if port is None: port = wait_for_device() - ser = serial.Serial(port, timeout=timeout) + ser = serial.Serial(port, baudrate=115200, timeout=timeout) ser.reset_input_buffer() return ser diff --git a/pyproject.toml b/pyproject.toml index 488621b..36f145c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "donglora" +name = "donglora-python" version = "0.1.0" description = "DongLoRa host library — talk LoRa from Python over USB" license = "MIT"