src/eric7/MicroPython/MicroPythonDevices.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9248
3859ac3b012a
--- a/src/eric7/MicroPython/MicroPythonDevices.py	Wed Jul 13 11:16:20 2022 +0200
+++ b/src/eric7/MicroPython/MicroPythonDevices.py	Wed Jul 13 14:55:47 2022 +0200
@@ -23,236 +23,227 @@
 SupportedBoards = {
     "esp": {
         "ids": [
-            (0x0403, 0x6001),       # M5Stack ESP32 device"),
-            (0x0403, 0x6001),       # FT232/FT245 (XinaBox CW01, CW02)
-            (0x0403, 0x6010),       # FT2232C/D/L/HL/Q (ESP-WROVER-KIT)
-            (0x0403, 0x6011),       # FT4232
-            (0x0403, 0x6014),       # FT232H
-            (0x0403, 0x6015),       # Sparkfun ESP32
-            (0x0403, 0x601C),       # FT4222H
-            (0x10C4, 0xEA60),       # CP210x
-            (0x1A86, 0x55D4),       # CH343
-            (0x1A86, 0x7523),       # HL-340, CH340
+            (0x0403, 0x6001),  # M5Stack ESP32 device"),
+            (0x0403, 0x6001),  # FT232/FT245 (XinaBox CW01, CW02)
+            (0x0403, 0x6010),  # FT2232C/D/L/HL/Q (ESP-WROVER-KIT)
+            (0x0403, 0x6011),  # FT4232
+            (0x0403, 0x6014),  # FT232H
+            (0x0403, 0x6015),  # Sparkfun ESP32
+            (0x0403, 0x601C),  # FT4222H
+            (0x10C4, 0xEA60),  # CP210x
+            (0x1A86, 0x55D4),  # CH343
+            (0x1A86, 0x7523),  # HL-340, CH340
         ],
         "description": "ESP32, ESP8266",
         "icon": "esp32Device",
         "port_description": "",
     },
-    
     "circuitpython": {
         "ids": [
-            (0x04D8, 0xEA2A),       # BHDynamics DynaLoRa_USB
-            (0x04D8, 0xEAD1),       # BH Dynamics DynOSSAT-EDU-EPS-v1.0
-            (0x04D8, 0xEAD2),       # BH Dynamics DynOSSAT-EDU-OBC-v1.0
-            (0x04D8, 0xEC44),       # maholli PyCubed
-            (0x04D8, 0xEC63),       # Kevin Neubauer CircuitBrains Basic
-            (0x04D8, 0xEC64),       # Kevin Neubauer CircuitBrains Deluxe
-            (0x04D8, 0xEC72),       # XinaBox CC03
-            (0x04D8, 0xEC75),       # XinaBox CS11
-            (0x04D8, 0xED5F),       # Itaca Innovation uChip CircuitPython
-            (0x04D8, 0xED94),       # maholli kicksat-sprite
-            (0x04D8, 0xEDB3),       # Capable Robot Programmable USB Hub
-            (0x04D8, 0xEDBE),       # maholli SAM32
-            (0x04D8, 0xEE8C),       # J&J Studios LLC datum-Distance
-            (0x04D8, 0xEE8D),       # J&J Studios LLC datum-IMU
-            (0x04D8, 0xEE8E),       # J&J Studios LLC datum-Light
-            (0x04D8, 0xEE8F),       # J&J Studios LLC datum-Weather
-            (0x04D8, 0xEF67),       # senseBox MCU
-            (0x054C, 0x0BC2),       # Sony Spresense
-            (0x1209, 0x2017),       # Benjamin Shockley Mini SAM M4
-            (0x1209, 0x3141),       # CrumpSpace CrumpS2
-            (0x1209, 0x3252),       # Targett Module Clip w/Wroom
-            (0x1209, 0x3253),       # Targett Module Clip w/Wrover
-            (0x1209, 0x4D43),       # Robotics Masters Robo HAT MM1 M4
-            (0x1209, 0x4DDD),       # ODT CP Sapling
-            (0x1209, 0x4DDE),       # ODT CP Sapling M0 w/ SPI Flash
-            (0x1209, 0x4DDF),       # ODT CP Sapling Rev B
-            (0x1209, 0x4DF0),       # Oak Dev Tech Pixelwing ESP32S2
-            (0x1209, 0x4DF1),       # Oak Dev Tech BREAD2040
-            (0x1209, 0x4DF2),       # Oak Dev Tech CAST AWAY RP2040
-            (0x1209, 0x5BF0),       # Foosn Fomu
-            (0x1209, 0x7150),       # Electronic Cats Hunter Cat NFC
-            (0x1209, 0x7382),       # Invector Labs AB iLabs Challenger 840
-            (0x1209, 0x805A),       # Electronic Cats BastBLE
-            (0x1209, 0xA182),       # Solder Party RP2040 Stamp
-            (0x1209, 0xBAB0),       # Electronic Cats Bast WiFi
-            (0x1209, 0xBAB1),       # Electronic Cats Meow Meow
-            (0x1209, 0xBAB2),       # Electronic Cats CatWAN USBStick
-            (0x1209, 0xBAB3),       # Electronic Cats Bast Pro Mini M0
-            (0x1209, 0xBAB6),       # Electronic Cats Escornabot Makech
-            (0x1209, 0xBAB8),       # Electronic Cats NFC Copy Cat
-            (0x1209, 0xC051),       # Betrusted Simmel
-            (0x1209, 0xD10D),       # Diodes Delight Piunora
-            (0x1209, 0xE3E3),       # StackRduino M0 PRO
-            (0x1209, 0xF500),       # Silicognition LLC M4-Shim
-            (0x16D0, 0x08C6),       # Pimoroni Keybow 2040
-            (0x16D0, 0x08C7),       # Pimoroni Tiny 2040 (8MB)
-            (0x16D0, 0x08C8),       # Pimoroni PicoSystem
-            (0x1915, 0xB001),       # Makerdiary Pitaya Go
-            (0x192F, 0xB1B2),       # WarmBit BluePixel nRF52840
-            (0x1B4F, 0x0015),       # SparkFun RedBoard Turbo Board
-            (0x1B4F, 0x0016),       # SparkFun SAMD51 Thing+
-            (0x1B4F, 0x0017),       # SparkFun LUMIDrive Board
-            (0x1B4F, 0x0020),       # SparkFun MicroMod SAMD51 Processor
-            (0x1B4F, 0x0021),       # SparkFun MicroMod nRF52840 Processor
-            (0x1B4F, 0x0024),       # SparkFun MicroMod RP2040 Processor
-            (0x1B4F, 0x0025),       # SparkFun Thing Plus RP2040
-            (0x1B4F, 0x0026),       # SparkFun Pro Micro RP2040
-            (0x1B4F, 0x0027),       # SparkFun STM32 MicroMod Processor
-            (0x1B4F, 0x0028),       # SparkFun Thing Plus - STM32
-            (0x1B4F, 0x002E),       # PJRC/Sparkfun Teensy MicroMod
-            (0x1B4F, 0x5289),       # SparkFun SFE_nRF52840_Mini
-            (0x1B4F, 0x8D22),       # SparkFun SAMD21 Mini Breakout
-            (0x1B4F, 0x8D23),       # SparkFun SAMD21 Dev Breakout
-            (0x1B4F, 0x8D24),       # SparkFun Qwiic Micro
-            (0x1D50, 0x60E8),       # Radomir Dopieralski PewPew M4
-            (0x1D50, 0x6152),       # nrf52.jpconstantineau.com BlueMicro833
-            (0x1D50, 0x6153),       # JPConstantineau PyKey18
-            (0x1D50, 0x6153),       # JPConstantineau PyKey44
-            (0x1D50, 0x6153),       # JPConstantineau PyKey60
-            (0x1D50, 0x6153),       # JPConstantineau PyKey87
-            (0x1D50, 0x6154),       # JPConstantineau EncoderPad RP2040
-            (0x1D50, 0x6161),       # nrf52.jpconstantineau.com BlueMicro840
-            (0x2341, 0x8053),       # Arduino MKR1300
-            (0x2341, 0x8057),       # Arduino Nano 33 IoT
-            (0x2341, 0x805A),       # Arduino Arduino_Nano_33_BLE
-            (0x2341, 0x824D),       # Arduino Zero
-            (0x2786, 0x9207),       # Switch Sc. BLE-SS dev board Multi Sensor
-            (0x2786, 0x920D),       # Switch Sc. SSCI ISP1807 Dev Board
-            (0x2786, 0x920F),       # Switch Sc. SSCI ISP1807 Micro Board
-            (0x2886, 0x002F),       # Seeed Seeeduino XIAO
-            (0x2886, 0x0042),       # Seeed Seeeduino XIAO RP2040
-            (0x2886, 0x0045),       # Seeed XIAO nRF52840 Sense
-            (0x2886, 0x802D),       # Seeed Seeeduino Wio Terminal
-            (0x2886, 0x802F),       # Seeed Seeeduino XIAO KB
-            (0x2886, 0xF001),       # Makerdiary nRF52840 M.2 Developer Kit
-            (0x2886, 0xF002),       # Makerdiary M60 Keyboard
-            (0x2B04, 0xC00C),       # Particle Argon
-            (0x2B04, 0xC00D),       # Particle Boron
-            (0x2B04, 0xC00E),       # Particle Xenon
-            (0x2E8A, 0x1000),       # Cytron Maker Pi RP2040
-            (0x2E8A, 0x1002),       # Pimoroni Pico LiPo (4MB)
-            (0x2E8A, 0x1003),       # Pimoroni Pico LiPo (16MB)
-            (0x2E8A, 0x1005),       # Melopero Shake RP2040
-            (0x2E8A, 0x1006),       # Invector Labs Challenger RP2040 WiFi
-            (0x2E8A, 0x1008),       # Pimoroni PGA2040
-            (0x2E8A, 0x1009),       # Pimoroni Interstate 75
-            (0x2E8A, 0x100A),       # Pimoroni Plasma 2040
-            (0x2E8A, 0x100B),       # Invector Labs Challenger RP2040 LTE
-            (0x2E8A, 0x100D),       # Invector Labs Challenger NB RP2040 WiFi
-            (0x2E8A, 0x100E),       # Raspberry Pi Zero
-            (0x2E8A, 0x100F),       # Cytron Maker Nano RP2040
-            (0x2E8A, 0x1012),       # Raspberry Pi Compute Module 4 IO Board
-            (0x2E8A, 0x1013),       # Raspberry Pi 4B
-            (0x2E8A, 0x1014),       # Raspberry Pi Compute Module 4
-            (0x2E8A, 0x1015),       # Raspberry Pi Zero 2W
-            (0x2E8A, 0x1016),       # Pimoroni Tiny 2040 (2MB)
-            (0x2E8A, 0x1019),       # Pimoroni Motor 2040
-            (0x2E8A, 0x101A),       # Pimoroni Servo 2040
-            (0x2E8A, 0x101B),       # Pimoroni Badger 2040
-            (0x2E8A, 0x101E),       # Raspberry Pi Zero W
-            (0x2E8A, 0x101F),       # Waveshare Electronics RP2040-Zero
-            (0x2E8A, 0x1026),       # ELECFREAKS Pico:ed
-            (0x2E8A, 0x1027),       # WIZnet W5100S-EVB-Pico
-            (0x303A, 0x7001),       # Espressif ESP32-S2-HMI-DevKit-1
-            (0x303A, 0x7003),       # Espressif ESP32-S3-DevKitC-1
-            (0x303A, 0x7003),       # Espressif ESP32-S3-DevKitC-1-N8
-            (0x303A, 0x7003),       # Espressif ESP32-S3-DevKitC-1-N8R2
-            (0x303A, 0x7003),       # Espressif ESP32-S3-DevKitC-1-N8R8
-            (0x303A, 0x7003),       # Espressif ESP32-S3-DevKitC-1-nopsram
-            (0x303A, 0x7005),       # Espressif ESP32-S3-Box-2.5
-            (0x303A, 0x7007),       # Espressif ESP32-S3-DevKitM-1-N8
-            (0x303A, 0x7009),       # Espressif ESP32-S2-DevKitC-1-N4
-            (0x303A, 0x7009),       # Espressif ESP32-S2-DevKitC-1-N4R2
-            (0x303A, 0x700B),       # Espressif ESP32-S3-USB-OTG-N8
-            (0x303A, 0x8002),       # UnexpectedMaker TinyS2
-            (0x303A, 0x8007),       # LILYGO TTGO T8 ESP32-S2
-            (0x303A, 0x800D),       # Gravitech Cucumber RS
-            (0x303A, 0x80A1),       # Gravitech Cucumber R
-            (0x303A, 0x80A4),       # Gravitech Cucumber M
-            (0x303A, 0x80A7),       # Gravitech Cucumber MS
-            (0x303A, 0x80AA),       # Espressif Franzininho WIFI w/Wroom
-            (0x303A, 0x80AD),       # Espressif Franzininho WIFI w/Wrover
-            (0x303A, 0x80AF),       # Artisense Reference Design RD00
-            (0x303A, 0x80B2),       # Muselab nanoESP32-S2  w/Wrover
-            (0x303A, 0x80B5),       # UnexpectedMaker FeatherS2 Neo
-            (0x303A, 0x80B7),       # MORPHEANS MORPHESP-240
-            (0x303A, 0x80C3),       # Lolin S2 Mini
-            (0x303A, 0x80C6),       # Lolin S2 Pico
-            (0x303A, 0x80D1),       # UnexpectedMaker TinyS3
-            (0x303A, 0x80D4),       # UnexpectedMaker ProS3
-            (0x303A, 0x80D7),       # UnexpectedMaker FeatherS3
-            (0x303A, 0x80D9),       # FutureKeys HexKy_S2
-            (0x303A, 0x80E8),       # HiiBot IoTs2
-            (0x303A, 0x80EA),       # LILYGO TTGO T8 ESP32-S2-WROOM
-            (0x303A, 0x80ED),       # LILYGO TTGO T8 ESP32-S2
-            (0x30A4, 0x0002),       # Blues Inc. Swan R5
-            (0x3171, 0x0101),       # 8086.net Commander
-            (0x31E2, 0x2001),       # BDMICRO LLC VINA-D21
-            (0x31E2, 0x2011),       # BDMICRO LLC VINA-D51
-            (0x31E2, 0x2021),       # BDMICRO LLC VINA-D51
-            (0x32BD, 0x3001),       # Alorium Tech. AloriumTech Evo M51
-            (0x4097, 0x0001),       # TG-Boards Datalore IP M4
-            (0x612B, 0x80A7),       # Ai-Thinker ESP 12k NodeMCU
-            
-            (0x239A, None),         # Any Adafruit Boards
+            (0x04D8, 0xEA2A),  # BHDynamics DynaLoRa_USB
+            (0x04D8, 0xEAD1),  # BH Dynamics DynOSSAT-EDU-EPS-v1.0
+            (0x04D8, 0xEAD2),  # BH Dynamics DynOSSAT-EDU-OBC-v1.0
+            (0x04D8, 0xEC44),  # maholli PyCubed
+            (0x04D8, 0xEC63),  # Kevin Neubauer CircuitBrains Basic
+            (0x04D8, 0xEC64),  # Kevin Neubauer CircuitBrains Deluxe
+            (0x04D8, 0xEC72),  # XinaBox CC03
+            (0x04D8, 0xEC75),  # XinaBox CS11
+            (0x04D8, 0xED5F),  # Itaca Innovation uChip CircuitPython
+            (0x04D8, 0xED94),  # maholli kicksat-sprite
+            (0x04D8, 0xEDB3),  # Capable Robot Programmable USB Hub
+            (0x04D8, 0xEDBE),  # maholli SAM32
+            (0x04D8, 0xEE8C),  # J&J Studios LLC datum-Distance
+            (0x04D8, 0xEE8D),  # J&J Studios LLC datum-IMU
+            (0x04D8, 0xEE8E),  # J&J Studios LLC datum-Light
+            (0x04D8, 0xEE8F),  # J&J Studios LLC datum-Weather
+            (0x04D8, 0xEF67),  # senseBox MCU
+            (0x054C, 0x0BC2),  # Sony Spresense
+            (0x1209, 0x2017),  # Benjamin Shockley Mini SAM M4
+            (0x1209, 0x3141),  # CrumpSpace CrumpS2
+            (0x1209, 0x3252),  # Targett Module Clip w/Wroom
+            (0x1209, 0x3253),  # Targett Module Clip w/Wrover
+            (0x1209, 0x4D43),  # Robotics Masters Robo HAT MM1 M4
+            (0x1209, 0x4DDD),  # ODT CP Sapling
+            (0x1209, 0x4DDE),  # ODT CP Sapling M0 w/ SPI Flash
+            (0x1209, 0x4DDF),  # ODT CP Sapling Rev B
+            (0x1209, 0x4DF0),  # Oak Dev Tech Pixelwing ESP32S2
+            (0x1209, 0x4DF1),  # Oak Dev Tech BREAD2040
+            (0x1209, 0x4DF2),  # Oak Dev Tech CAST AWAY RP2040
+            (0x1209, 0x5BF0),  # Foosn Fomu
+            (0x1209, 0x7150),  # Electronic Cats Hunter Cat NFC
+            (0x1209, 0x7382),  # Invector Labs AB iLabs Challenger 840
+            (0x1209, 0x805A),  # Electronic Cats BastBLE
+            (0x1209, 0xA182),  # Solder Party RP2040 Stamp
+            (0x1209, 0xBAB0),  # Electronic Cats Bast WiFi
+            (0x1209, 0xBAB1),  # Electronic Cats Meow Meow
+            (0x1209, 0xBAB2),  # Electronic Cats CatWAN USBStick
+            (0x1209, 0xBAB3),  # Electronic Cats Bast Pro Mini M0
+            (0x1209, 0xBAB6),  # Electronic Cats Escornabot Makech
+            (0x1209, 0xBAB8),  # Electronic Cats NFC Copy Cat
+            (0x1209, 0xC051),  # Betrusted Simmel
+            (0x1209, 0xD10D),  # Diodes Delight Piunora
+            (0x1209, 0xE3E3),  # StackRduino M0 PRO
+            (0x1209, 0xF500),  # Silicognition LLC M4-Shim
+            (0x16D0, 0x08C6),  # Pimoroni Keybow 2040
+            (0x16D0, 0x08C7),  # Pimoroni Tiny 2040 (8MB)
+            (0x16D0, 0x08C8),  # Pimoroni PicoSystem
+            (0x1915, 0xB001),  # Makerdiary Pitaya Go
+            (0x192F, 0xB1B2),  # WarmBit BluePixel nRF52840
+            (0x1B4F, 0x0015),  # SparkFun RedBoard Turbo Board
+            (0x1B4F, 0x0016),  # SparkFun SAMD51 Thing+
+            (0x1B4F, 0x0017),  # SparkFun LUMIDrive Board
+            (0x1B4F, 0x0020),  # SparkFun MicroMod SAMD51 Processor
+            (0x1B4F, 0x0021),  # SparkFun MicroMod nRF52840 Processor
+            (0x1B4F, 0x0024),  # SparkFun MicroMod RP2040 Processor
+            (0x1B4F, 0x0025),  # SparkFun Thing Plus RP2040
+            (0x1B4F, 0x0026),  # SparkFun Pro Micro RP2040
+            (0x1B4F, 0x0027),  # SparkFun STM32 MicroMod Processor
+            (0x1B4F, 0x0028),  # SparkFun Thing Plus - STM32
+            (0x1B4F, 0x002E),  # PJRC/Sparkfun Teensy MicroMod
+            (0x1B4F, 0x5289),  # SparkFun SFE_nRF52840_Mini
+            (0x1B4F, 0x8D22),  # SparkFun SAMD21 Mini Breakout
+            (0x1B4F, 0x8D23),  # SparkFun SAMD21 Dev Breakout
+            (0x1B4F, 0x8D24),  # SparkFun Qwiic Micro
+            (0x1D50, 0x60E8),  # Radomir Dopieralski PewPew M4
+            (0x1D50, 0x6152),  # nrf52.jpconstantineau.com BlueMicro833
+            (0x1D50, 0x6153),  # JPConstantineau PyKey18
+            (0x1D50, 0x6153),  # JPConstantineau PyKey44
+            (0x1D50, 0x6153),  # JPConstantineau PyKey60
+            (0x1D50, 0x6153),  # JPConstantineau PyKey87
+            (0x1D50, 0x6154),  # JPConstantineau EncoderPad RP2040
+            (0x1D50, 0x6161),  # nrf52.jpconstantineau.com BlueMicro840
+            (0x2341, 0x8053),  # Arduino MKR1300
+            (0x2341, 0x8057),  # Arduino Nano 33 IoT
+            (0x2341, 0x805A),  # Arduino Arduino_Nano_33_BLE
+            (0x2341, 0x824D),  # Arduino Zero
+            (0x2786, 0x9207),  # Switch Sc. BLE-SS dev board Multi Sensor
+            (0x2786, 0x920D),  # Switch Sc. SSCI ISP1807 Dev Board
+            (0x2786, 0x920F),  # Switch Sc. SSCI ISP1807 Micro Board
+            (0x2886, 0x002F),  # Seeed Seeeduino XIAO
+            (0x2886, 0x0042),  # Seeed Seeeduino XIAO RP2040
+            (0x2886, 0x0045),  # Seeed XIAO nRF52840 Sense
+            (0x2886, 0x802D),  # Seeed Seeeduino Wio Terminal
+            (0x2886, 0x802F),  # Seeed Seeeduino XIAO KB
+            (0x2886, 0xF001),  # Makerdiary nRF52840 M.2 Developer Kit
+            (0x2886, 0xF002),  # Makerdiary M60 Keyboard
+            (0x2B04, 0xC00C),  # Particle Argon
+            (0x2B04, 0xC00D),  # Particle Boron
+            (0x2B04, 0xC00E),  # Particle Xenon
+            (0x2E8A, 0x1000),  # Cytron Maker Pi RP2040
+            (0x2E8A, 0x1002),  # Pimoroni Pico LiPo (4MB)
+            (0x2E8A, 0x1003),  # Pimoroni Pico LiPo (16MB)
+            (0x2E8A, 0x1005),  # Melopero Shake RP2040
+            (0x2E8A, 0x1006),  # Invector Labs Challenger RP2040 WiFi
+            (0x2E8A, 0x1008),  # Pimoroni PGA2040
+            (0x2E8A, 0x1009),  # Pimoroni Interstate 75
+            (0x2E8A, 0x100A),  # Pimoroni Plasma 2040
+            (0x2E8A, 0x100B),  # Invector Labs Challenger RP2040 LTE
+            (0x2E8A, 0x100D),  # Invector Labs Challenger NB RP2040 WiFi
+            (0x2E8A, 0x100E),  # Raspberry Pi Zero
+            (0x2E8A, 0x100F),  # Cytron Maker Nano RP2040
+            (0x2E8A, 0x1012),  # Raspberry Pi Compute Module 4 IO Board
+            (0x2E8A, 0x1013),  # Raspberry Pi 4B
+            (0x2E8A, 0x1014),  # Raspberry Pi Compute Module 4
+            (0x2E8A, 0x1015),  # Raspberry Pi Zero 2W
+            (0x2E8A, 0x1016),  # Pimoroni Tiny 2040 (2MB)
+            (0x2E8A, 0x1019),  # Pimoroni Motor 2040
+            (0x2E8A, 0x101A),  # Pimoroni Servo 2040
+            (0x2E8A, 0x101B),  # Pimoroni Badger 2040
+            (0x2E8A, 0x101E),  # Raspberry Pi Zero W
+            (0x2E8A, 0x101F),  # Waveshare Electronics RP2040-Zero
+            (0x2E8A, 0x1026),  # ELECFREAKS Pico:ed
+            (0x2E8A, 0x1027),  # WIZnet W5100S-EVB-Pico
+            (0x303A, 0x7001),  # Espressif ESP32-S2-HMI-DevKit-1
+            (0x303A, 0x7003),  # Espressif ESP32-S3-DevKitC-1
+            (0x303A, 0x7003),  # Espressif ESP32-S3-DevKitC-1-N8
+            (0x303A, 0x7003),  # Espressif ESP32-S3-DevKitC-1-N8R2
+            (0x303A, 0x7003),  # Espressif ESP32-S3-DevKitC-1-N8R8
+            (0x303A, 0x7003),  # Espressif ESP32-S3-DevKitC-1-nopsram
+            (0x303A, 0x7005),  # Espressif ESP32-S3-Box-2.5
+            (0x303A, 0x7007),  # Espressif ESP32-S3-DevKitM-1-N8
+            (0x303A, 0x7009),  # Espressif ESP32-S2-DevKitC-1-N4
+            (0x303A, 0x7009),  # Espressif ESP32-S2-DevKitC-1-N4R2
+            (0x303A, 0x700B),  # Espressif ESP32-S3-USB-OTG-N8
+            (0x303A, 0x8002),  # UnexpectedMaker TinyS2
+            (0x303A, 0x8007),  # LILYGO TTGO T8 ESP32-S2
+            (0x303A, 0x800D),  # Gravitech Cucumber RS
+            (0x303A, 0x80A1),  # Gravitech Cucumber R
+            (0x303A, 0x80A4),  # Gravitech Cucumber M
+            (0x303A, 0x80A7),  # Gravitech Cucumber MS
+            (0x303A, 0x80AA),  # Espressif Franzininho WIFI w/Wroom
+            (0x303A, 0x80AD),  # Espressif Franzininho WIFI w/Wrover
+            (0x303A, 0x80AF),  # Artisense Reference Design RD00
+            (0x303A, 0x80B2),  # Muselab nanoESP32-S2  w/Wrover
+            (0x303A, 0x80B5),  # UnexpectedMaker FeatherS2 Neo
+            (0x303A, 0x80B7),  # MORPHEANS MORPHESP-240
+            (0x303A, 0x80C3),  # Lolin S2 Mini
+            (0x303A, 0x80C6),  # Lolin S2 Pico
+            (0x303A, 0x80D1),  # UnexpectedMaker TinyS3
+            (0x303A, 0x80D4),  # UnexpectedMaker ProS3
+            (0x303A, 0x80D7),  # UnexpectedMaker FeatherS3
+            (0x303A, 0x80D9),  # FutureKeys HexKy_S2
+            (0x303A, 0x80E8),  # HiiBot IoTs2
+            (0x303A, 0x80EA),  # LILYGO TTGO T8 ESP32-S2-WROOM
+            (0x303A, 0x80ED),  # LILYGO TTGO T8 ESP32-S2
+            (0x30A4, 0x0002),  # Blues Inc. Swan R5
+            (0x3171, 0x0101),  # 8086.net Commander
+            (0x31E2, 0x2001),  # BDMICRO LLC VINA-D21
+            (0x31E2, 0x2011),  # BDMICRO LLC VINA-D51
+            (0x31E2, 0x2021),  # BDMICRO LLC VINA-D51
+            (0x32BD, 0x3001),  # Alorium Tech. AloriumTech Evo M51
+            (0x4097, 0x0001),  # TG-Boards Datalore IP M4
+            (0x612B, 0x80A7),  # Ai-Thinker ESP 12k NodeMCU
+            (0x239A, None),  # Any Adafruit Boards
         ],
         "description": "CircuitPython",
         "icon": "circuitPythonDevice",
         "port_description": "",
     },
-    
     "bbc_microbit": {
         "ids": [
-            (0x0D28, 0x0204),       # micro:bit
+            (0x0D28, 0x0204),  # micro:bit
         ],
         "description": "BBC micro:bit",
         "icon": "microbitDevice",
         "port_description": "BBC micro:bit CMSIS-DAP",
     },
-    
     "calliope": {
         "ids": [
-            (0x0D28, 0x0204),       # Calliope mini
+            (0x0D28, 0x0204),  # Calliope mini
         ],
         "description": "Calliope mini",
         "icon": "calliope_mini",
         "port_description": "DAPLink CMSIS-DAP",
     },
-    
     "pyboard": {
         "ids": [
-            (0xF055, 0x9800),       # Pyboard in CDC mode
-            (0xF055, 0x9801),       # Pyboard in CDC+HID mode
-            (0xF055, 0x9802),       # Pyboard in CDC+MSC mode
+            (0xF055, 0x9800),  # Pyboard in CDC mode
+            (0xF055, 0x9801),  # Pyboard in CDC+HID mode
+            (0xF055, 0x9802),  # Pyboard in CDC+MSC mode
         ],
         "description": "PyBoard",
         "icon": "micropython48",
         "port_description": "",
     },
-    
     "rp2040": {
         "ids": [
-            (0x2E8A, 0x0005),       # Raspberry Pi Pico
+            (0x2E8A, 0x0005),  # Raspberry Pi Pico
         ],
-        "description": QCoreApplication.translate(
-            "MicroPythonDevice", "RP2040 based"),
+        "description": QCoreApplication.translate("MicroPythonDevice", "RP2040 based"),
         "icon": "rp2040Device",
         "port_description": "",
     },
-    
     "generic": {
         # only manually configured devices use this
         "ids": [],
-        "description": QCoreApplication.translate(
-            "MicroPythonDevice", "Generic Board"),
+        "description": QCoreApplication.translate("MicroPythonDevice", "Generic Board"),
         "icon": "micropython48",
         "port_description": "",
     },
 }
 
 IgnoredBoards = (
-    (0x8086, 0x9c3d),
+    (0x8086, 0x9C3D),
     (0x8086, None),
 )
 
@@ -260,21 +251,20 @@
 def getSupportedDevices():
     """
     Function to get a list of supported MicroPython devices.
-    
+
     @return set of tuples with the board type and description
     @rtype set of tuples of (str, str)
     """
     boards = []
     for board in SupportedBoards:
-        boards.append(
-            (board, SupportedBoards[board]["description"]))
+        boards.append((board, SupportedBoards[board]["description"]))
     return boards
 
 
 def getFoundDevices():
     """
     Function to check the serial ports for supported MicroPython devices.
-    
+
     @return tuple containing a list of tuples with the board type, the port
         description, a description, the serial port it is connected at, the
         VID and PID for known device types, a list of tuples with VID, PID
@@ -285,80 +275,88 @@
         list of tuples of (int, int, str, str)
     """
     from PyQt6.QtSerialPort import QSerialPortInfo
-    
+
     foundDevices = []
     unknownDevices = []
     unknownPorts = []
-    
+
     manualDevices = {}
     for deviceDict in Preferences.getMicroPython("ManualDevices"):
         manualDevices[(deviceDict["vid"], deviceDict["pid"])] = deviceDict
-    
+
     availablePorts = QSerialPortInfo.availablePorts()
     for port in availablePorts:
         if port.hasVendorIdentifier() and port.hasProductIdentifier():
             supported = False
             vid = port.vendorIdentifier()
             pid = port.productIdentifier()
-            
+
             for board in SupportedBoards:
-                if (
-                    (vid, pid) in SupportedBoards[board]["ids"] or
-                    (vid, None) in SupportedBoards[board]["ids"]
-                ):
-                    if (
-                        board in ("bbc_microbit", "calliope") and
-                        (port.description().strip() !=
-                         SupportedBoards[board]["port_description"])
+                if (vid, pid) in SupportedBoards[board]["ids"] or (
+                    vid,
+                    None,
+                ) in SupportedBoards[board]["ids"]:
+                    if board in ("bbc_microbit", "calliope") and (
+                        port.description().strip()
+                        != SupportedBoards[board]["port_description"]
                     ):
                         # both boards have the same VID and PID
                         # try to differentiate based on port description
                         continue
-                    foundDevices.append((
+                    foundDevices.append(
+                        (
+                            board,
+                            port.description(),
+                            SupportedBoards[board]["description"],
+                            port.portName(),
+                            vid,
+                            pid,
+                        )
+                    )
+                    supported = True
+            if not supported and (vid, pid) in manualDevices:
+                # check the locally added ones next
+                board = manualDevices[(vid, pid)]["type"]
+                foundDevices.append(
+                    (
                         board,
                         port.description(),
                         SupportedBoards[board]["description"],
                         port.portName(),
                         vid,
                         pid,
-                    ))
-                    supported = True
-            if not supported and (vid, pid) in manualDevices:
-                # check the locally added ones next
-                board = manualDevices[(vid, pid)]["type"]
-                foundDevices.append((
-                    board,
-                    port.description(),
-                    SupportedBoards[board]["description"],
-                    port.portName(),
-                    vid,
-                    pid,
-                ))
+                    )
+                )
                 supported = True
             if not supported:
                 if vid and pid:
-                    if (
-                        (vid, pid) not in IgnoredBoards and
-                        (vid, None) not in IgnoredBoards
-                    ):
+                    if (vid, pid) not in IgnoredBoards and (
+                        vid,
+                        None,
+                    ) not in IgnoredBoards:
                         unknownDevices.append((vid, pid, port.description()))
-                        logging.debug("Unknown device: (0x%04x:0x%04x %s)",
-                                      vid, pid, port.description())
+                        logging.debug(
+                            "Unknown device: (0x%04x:0x%04x %s)",
+                            vid,
+                            pid,
+                            port.description(),
+                        )
                 else:
                     # either VID or PID or both not detected
                     desc = port.description()
                     if not desc:
-                        desc = QCoreApplication.translate("MicroPythonDevice",
-                                                          "Unknown Device")
+                        desc = QCoreApplication.translate(
+                            "MicroPythonDevice", "Unknown Device"
+                        )
                     unknownPorts.append((vid, pid, desc, port.portName()))
-    
+
     return foundDevices, unknownDevices, unknownPorts
 
 
 def getDeviceIcon(boardName, iconFormat=True):
     """
     Function to get the icon for the given board.
-    
+
     @param boardName name of the board
     @type str
     @param iconFormat flag indicating to get an icon or a pixmap
@@ -369,11 +367,12 @@
     """
     iconName = (
         SupportedBoards[boardName]["icon"]
-        if boardName in SupportedBoards else
+        if boardName in SupportedBoards
+        else
         # return a generic MicroPython icon
         "micropython48"
     )
-    
+
     if iconFormat:
         return UI.PixmapCache.getIcon(iconName)
     else:
@@ -383,7 +382,7 @@
 def getDevice(deviceType, microPythonWidget, vid, pid):
     """
     Public method to instantiate a specific MicroPython device interface.
-    
+
     @param deviceType type of the device interface
     @type str
     @param microPythonWidget reference to the main MicroPython widget
@@ -397,23 +396,28 @@
     """
     if deviceType == "esp":
         from .EspDevices import EspDevice
+
         return EspDevice(microPythonWidget, deviceType)
     elif deviceType == "circuitpython":
         from .CircuitPythonDevices import CircuitPythonDevice
+
         return CircuitPythonDevice(microPythonWidget, deviceType)
     elif deviceType in ("bbc_microbit", "calliope"):
         from .MicrobitDevices import MicrobitDevice
+
         return MicrobitDevice(microPythonWidget, deviceType)
     elif deviceType == "pyboard":
         from .PyBoardDevices import PyBoardDevice
+
         return PyBoardDevice(microPythonWidget, deviceType)
     elif deviceType == "rp2040":
         from .RP2040Devices import RP2040Device
+
         return RP2040Device(microPythonWidget, deviceType)
     elif deviceType == "generic":
         from .GenericMicroPythonDevices import GenericMicroPythonDevice
-        return GenericMicroPythonDevice(microPythonWidget, deviceType,
-                                        vid, pid)
+
+        return GenericMicroPythonDevice(microPythonWidget, deviceType, vid, pid)
     else:
         # nothing specific requested
         return MicroPythonDevice(microPythonWidget, deviceType)
@@ -423,10 +427,11 @@
     """
     Base class for the more specific MicroPython devices.
     """
+
     def __init__(self, microPythonWidget, deviceType, parent=None):
         """
         Constructor
-        
+
         @param microPythonWidget reference to the main MicroPython widget
         @type MicroPythonWidget
         @param deviceType device type assigned to this device interface
@@ -435,150 +440,149 @@
         @type QObject
         """
         super().__init__(parent)
-        
+
         self._deviceType = deviceType
         self.microPython = microPythonWidget
-    
+
     def getDeviceType(self):
         """
         Public method to get the device type.
-        
+
         @return type of the device
         @rtype str
         """
         return self._deviceType
-    
+
     def setButtons(self):
         """
         Public method to enable the supported action buttons.
         """
         self.microPython.setActionButtons(
-            open=False, save=False,
-            run=False, repl=False, files=False, chart=False)
-    
+            open=False, save=False, run=False, repl=False, files=False, chart=False
+        )
+
     def forceInterrupt(self):
         """
         Public method to determine the need for an interrupt when opening the
         serial connection.
-        
+
         @return flag indicating an interrupt is needed
         @rtype bool
         """
         return True
-    
+
     def deviceName(self):
         """
         Public method to get the name of the device.
-        
+
         @return name of the device
         @rtype str
         """
         return self.tr("Unsupported Device")
-    
+
     def canStartRepl(self):
         """
         Public method to determine, if a REPL can be started.
-        
+
         @return tuple containing a flag indicating it is safe to start a REPL
             and a reason why it cannot.
         @rtype tuple of (bool, str)
         """
         return False, self.tr("REPL is not supported by this device.")
-    
+
     def setRepl(self, on):
         """
         Public method to set the REPL status and dependent status.
-        
+
         @param on flag indicating the active status
         @type bool
         """
         pass
-    
+
     def canStartPlotter(self):
         """
         Public method to determine, if a Plotter can be started.
-        
+
         @return tuple containing a flag indicating it is safe to start a
             Plotter and a reason why it cannot.
         @rtype tuple of (bool, str)
         """
         return False, self.tr("Plotter is not supported by this device.")
-    
+
     def setPlotter(self, on):
         """
         Public method to set the Plotter status and dependent status.
-        
+
         @param on flag indicating the active status
         @type bool
         """
         pass
-    
+
     def canRunScript(self):
         """
         Public method to determine, if a script can be executed.
-        
+
         @return tuple containing a flag indicating it is safe to start a
             Plotter and a reason why it cannot.
         @rtype tuple of (bool, str)
         """
-        return False, self.tr("Running scripts is not supported by this"
-                              " device.")
-    
+        return False, self.tr("Running scripts is not supported by this" " device.")
+
     def runScript(self, script):
         """
         Public method to run the given Python script.
-        
+
         @param script script to be executed
         @type str
         """
         pass
-    
+
     def canStartFileManager(self):
         """
         Public method to determine, if a File Manager can be started.
-        
+
         @return tuple containing a flag indicating it is safe to start a
             File Manager and a reason why it cannot.
         @rtype tuple of (bool, str)
         """
         return False, self.tr("File Manager is not supported by this device.")
-    
+
     def setFileManager(self, on):
         """
         Public method to set the File Manager status and dependent status.
-        
+
         @param on flag indicating the active status
         @type bool
         """
         pass
-    
+
     def supportsLocalFileAccess(self):
         """
         Public method to indicate file access via a local directory.
-        
+
         @return flag indicating file access via local directory
         @rtype bool
         """
-        return False        # default
-    
+        return False  # default
+
     def getWorkspace(self):
         """
         Public method to get the workspace directory.
-        
+
         @return workspace directory used for saving files
         @rtype str
         """
         return (
-            Preferences.getMicroPython("MpyWorkspace") or
-            Preferences.getMultiProject("Workspace") or
-            os.path.expanduser("~")
+            Preferences.getMicroPython("MpyWorkspace")
+            or Preferences.getMultiProject("Workspace")
+            or os.path.expanduser("~")
         )
-    
+
     def selectDeviceDirectory(self, deviceDirectories):
         """
         Public method to select the device directory from a list of detected
         ones.
-        
+
         @param deviceDirectories list of directories to select from
         @type list of str
         @return selected directory or an empty string
@@ -589,108 +593,112 @@
             self.tr("Select Device Directory"),
             self.tr("Select the directory for the connected device:"),
             [""] + deviceDirectories,
-            0, False)
+            0,
+            False,
+        )
         if ok:
             return deviceDirectory
         else:
             # user cancelled
             return ""
-    
+
     def sendCommands(self, commandsList):
         """
         Public method to send a list of commands to the device.
-        
+
         @param commandsList list of commands to be sent to the device
         @type list of str
         """
-        rawOn = [       # sequence of commands to enter raw mode
-            b'\x02',            # Ctrl-B: exit raw repl (just in case)
-            b'\r\x03\x03\x03',  # Ctrl-C three times: interrupt any running
-                                # program
-            b'\r\x01',          # Ctrl-A: enter raw REPL
+        rawOn = [  # sequence of commands to enter raw mode
+            b"\x02",  # Ctrl-B: exit raw repl (just in case)
+            b"\r\x03\x03\x03",  # Ctrl-C three times: interrupt any running
+            # program
+            b"\r\x01",  # Ctrl-A: enter raw REPL
         ]
-        newLine = [b'print("\\n")\r', ]
-        commands = [c.encode("utf-8)") + b'\r' for c in commandsList]
-        commands.append(b'\r')
-        commands.append(b'\x04')
-        rawOff = [b'\x02', b'\x02']
+        newLine = [
+            b'print("\\n")\r',
+        ]
+        commands = [c.encode("utf-8)") + b"\r" for c in commandsList]
+        commands.append(b"\r")
+        commands.append(b"\x04")
+        rawOff = [b"\x02", b"\x02"]
         commandSequence = rawOn + newLine + commands + rawOff
         self.microPython.commandsInterface().executeAsync(commandSequence)
-    
+
     @pyqtSlot()
     def handleDataFlood(self):
         """
         Public slot handling a data floof from the device.
         """
         pass
-    
+
     def addDeviceMenuEntries(self, menu):
         """
         Public method to add device specific entries to the given menu.
-        
+
         @param menu reference to the context menu
         @type QMenu
         """
         pass
-    
+
     def hasFlashMenuEntry(self):
         """
         Public method to check, if the device has its own flash menu entry.
-        
+
         @return flag indicating a specific flash menu entry
         @rtype bool
         """
         return False
-    
+
     def hasTimeCommands(self):
         """
         Public method to check, if the device supports time commands.
-        
+
         The default returns True.
-        
+
         @return flag indicating support for time commands
         @rtype bool
         """
         return True
-    
+
     def hasDocumentationUrl(self):
         """
         Public method to check, if the device has a configured documentation
         URL.
-        
+
         @return flag indicating a configured documentation URL
         @rtype bool
         """
         return bool(self.getDocumentationUrl())
-    
+
     def getDocumentationUrl(self):
         """
         Public method to get the device documentation URL.
-        
+
         @return documentation URL of the device
         @rtype str
         """
         return ""
-    
+
     def hasFirmwareUrl(self):
         """
         Public method to check, if the device has a configured firmware
         download URL.
-        
+
         @return flag indicating a configured firmware download URL
         @rtype bool
         """
         return bool(self.getFirmwareUrl())
-    
+
     def getFirmwareUrl(self):
         """
         Public method to get the device firmware download URL.
-        
+
         @return firmware download URL of the device
         @rtype str
         """
         return ""
-    
+
     def downloadFirmware(self):
         """
         Public method to download the device firmware.
@@ -698,11 +706,11 @@
         url = self.getFirmwareUrl()
         if url:
             ericApp().getObject("UserInterface").launchHelpViewer(url)
-    
+
     def getDownloadMenuEntries(self):
         """
         Public method to retrieve the entries for the downloads menu.
-        
+
         @return list of tuples with menu text and URL to be opened for each
             entry
         @rtype list of tuple of (str, str)

eric ide

mercurial