Initial public release

This commit is contained in:
2026-07-17 15:29:53 -04:00
commit 2d71ce77a1
81 changed files with 32056 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
"""Test serial communication with the ATOMS3 MacroPad device."""
import sys
import os
import time
import json
sys.path.insert(0, os.path.dirname(__file__))
import serial
import serial.tools.list_ports
ESPRESSIF_VID = 0x303A
DEVICE_ID = "ATOMS3-MACROPAD"
def find_device():
ports = serial.tools.list_ports.comports()
candidates = []
for port in ports:
if port.vid == ESPRESSIF_VID:
candidates.append(port)
print(f" Found Espressif device: {port.device} "
f"(VID={hex(port.vid)}, PID={hex(port.pid)}, desc={port.description})")
return candidates
def test_connection(port_name, attempt=1):
"""Try to connect and ping the device."""
print(f"\n--- Attempt {attempt} on {port_name} ---")
try:
ser = serial.Serial()
ser.port = port_name
ser.baudrate = 115200
ser.timeout = 2
ser.dtr = False
ser.rts = False
ser.open()
print(f" Port opened")
time.sleep(0.1)
ser.dtr = True
time.sleep(0.5)
ser.reset_input_buffer()
cmd = b'{"cmd":"ping"}\n'
ser.write(cmd)
print(f" Sent: {cmd.strip()}")
line = ser.readline().decode("utf-8", errors="ignore").strip()
print(f" Received: {repr(line)}")
if line:
try:
data = json.loads(line)
if data.get("id") == DEVICE_ID:
print(f" PING OK - Device identified as {DEVICE_ID}")
ser.close()
return True
else:
print(f" Wrong device ID: {data}")
except json.JSONDecodeError:
print(f" Invalid JSON response")
else:
print(f" No response (empty)")
ser.close()
return False
except serial.SerialException as e:
print(f" Serial error: {e}")
return False
except OSError as e:
print(f" OS error: {e}")
return False
def test_reconnect(port_name):
print(f"\n=== Testing reconnect cycle on {port_name} ===")
for i in range(3):
if not test_connection(port_name, i + 1):
print(f"\nRECONNECT TEST FAILED on attempt {i + 1}")
return False
if i < 2:
print(" Waiting 1s before reconnect...")
time.sleep(1)
print(f"\nRECONNECT TEST PASSED - 3/3 cycles successful")
return True
def main():
print("=== ATOMS3 MacroPad Serial Test ===\n")
print("Scanning for Espressif USB devices...")
candidates = find_device()
if not candidates:
print("\nNo Espressif USB devices found!")
print("Make sure the ATOMS3 is connected via USB.")
return 1
for port in candidates:
if test_reconnect(port.device):
print(f"\nAll tests PASSED on {port.device}")
return 0
print("\nAll tests FAILED")
return 1
if __name__ == "__main__":
sys.exit(main())