@@ -32,7 +32,28 @@ class ElectroBlocks:
32
32
verbose = False
33
33
pins = {}
34
34
35
-
35
+ # Known vendor IDs (decimal)
36
+ KNOWN_VIDS = {
37
+ 9025 , # 0x2341 - Arduino
38
+ 6790 , # 0x1A86 - WCH (CH340/CH341)
39
+ 4292 , # 0x10C4 - Silicon Labs (CP210x)
40
+ 1027 , # 0x0403 - FTDI
41
+ 1659 , # 0x067B - Prolific
42
+ }
43
+
44
+ # Known product IDs (decimal)
45
+ KNOWN_PIDS = {
46
+ 67 , # 0x0043 - Uno R3 PID
47
+ 66 , # 0x0042 - Mega R3 PID (common variant)
48
+ 16 , # 0x0010 - Mega2560 pre-R3
49
+ 60000 , # 0xEA60 - CP210x example (Silicon Labs)
50
+ 29987 , # 0x7523 - CH340 common PID
51
+ 24577 , # 0x6001 - FTDI FT232
52
+ 24592 , # 0x6010 - FTDI FT2232
53
+ 24593 , # 0x6011 - FTDI FT4232
54
+ 24596 , # 0x6014 - FTDI variant
55
+ 24597 , # 0x6015 - FTDI FT231X
56
+ }
36
57
37
58
def __init__ (self , baudrate = 115200 , timeout = 2 , verbose = False ):
38
59
self .ser = self ._auto_connect (baudrate , timeout )
@@ -45,7 +66,7 @@ def __init__(self, baudrate=115200, timeout=2, verbose = False):
45
66
def _auto_connect (self , baudrate , timeout ):
46
67
ports = list (serial .tools .list_ports .comports ())
47
68
for p in ports :
48
- if p .vid in ( 9025 , 6790 , 4292 ) or p .pid in ( 67 , 16 , 60000 ): # Arduino Uno or Mega and Indian Arduino UNO
69
+ if p .vid in self . KNOWN_VIDS or p .pid in self . KNOWN_VIDS :
49
70
try :
50
71
ser = serial .Serial (p .device , baudrate , timeout = timeout )
51
72
time .sleep (2 ) # Give Arduino time to reset
0 commit comments