v1.3.0

v1.3.0 überarbeitet die Kommunikationsschicht der Kamera rund um ein strukturiertes Befehls-/Antwortprotokoll und fügt sowohl für die IDE als auch für ihre gebündelten Ressourcen eine integrierte automatische Aktualisierung hinzu. Sie basiert auf Qt Creator 4.0.2 und enthält die OpenMV-Kamera-Firmware 2.0.0. Unter macOS und Linux erfordert das DFU-Flashen der Firmware nun eine einmalige Installation von Python sowie libusb und pyusb; siehe Breaking Changes.

Highlights

  • Überarbeitete Kommunikationsschicht. Der Code für Serial/USB-Debug wurde rund um ein strukturiertes Befehls-/Antwortprotokoll mit befehlsspezifischen Antwortlängen sowie Start-/Endwartezeiten neu aufgebaut, um zuverlässigere Vorgänge beim Verbinden, Skriptausführen, beim Framebuffer und beim Bootloader zu ermöglichen.

  • Integrierter Auto-Updater in der IDE. Die IDE prüft nun openmv.io auf eine neuere Version und bietet eine Download-Schaltfläche an; separat lädt und installiert sie aktualisierte Ressourcenpakete (Beispiele, Firmware, Dokumentation) und fordert anschließend zum Neustart auf.

  • Firmware-Aktualisierung mit einem Klick. Die Firmware-Version in der Statusleiste ist nun eine anklickbare Schaltfläche, die die angeschlossene Kamera mit der gebündelten Firmware vergleicht und eine Aktualisierung mit einem Klick anbietet, wenn eine neuere Version verfügbar ist.

  • DFU-Firmware-Flashen auf jeder Plattform. Firmware kann jetzt unter Windows, macOS, Linux x86 und Linux x86_64 über DFU geflasht werden, und die Firmware-Auswahl akzeptiert neben .bin auch .dfu-Dateien.

  • Automatischer DFU-Fallback. Wenn der serielle Bootloader während einer Firmware-Aktualisierung nicht erreicht werden kann, bietet die IDE nun an, stattdessen über den DFU-Bootloader der Kamera zu aktualisieren, und führt Sie durch das Setzen eines BOOT/RST-Jumpers.

Neue Funktionen

  • Integrierter Updater in der IDE. Prüft openmv.io auf eine neuere IDE-Version und bietet eine Download-Schaltfläche, die openmv.io/download öffnet; außerdem lädt, entpackt und installiert sie openmv-ide-resources-X.Y.Z.zip-Ressourcenpakete direkt in die IDE, bevor sie zum Neustart auffordert (8a1f92bb1, 194acd828, b0be97e3e).

  • Anklickbare Firmware-Versions-Schaltfläche. Das Versionslabel in der Statusleiste wurde zu einem QToolButton, der mit einem updateCam()-Ablauf verbunden ist, der die gebündelte firmware/firmware.txt liest, sie mit der angeschlossenen Kamera vergleicht und bei einer neueren Version eine Firmware Update mit optionalem Löschen des internen Dateisystems anbietet (b2ac8defe).

  • Unterstützung von DFU-Dateien. Der Bootloader-/Firmware-Flash-Dialog akzeptiert nun neben .bin auch .dfu-Dateien und erzwingt beim Flashen einer .dfu ein vollständiges Löschen des internen Dateisystems. Der Filter der Firmware-Auswahl wurde auf Firmware Binary (*.bin *.dfu) erweitert, und der erzwungene Löschvorgang für .dfu wurde in 4ad2be5f9 eingeführt; das stets aktivierte, deaktivierte Lösch-Kontrollkästchen, das sich automatisch anhand der gewählten Dateierweiterung umschaltet, wurde in b2ac8defe ergänzt (4ad2be5f9, b2ac8defe).

  • Automatischer DFU-Fallback bei Bootloader-Fehlern. Wenn eine .bin-Firmware-Aktualisierung den seriellen Bootloader nicht starten kann, meldet die IDE nun Unable to connect to the bootloader! und bietet anschließend an, stattdessen über den DFU-Bootloader der Kamera zu aktualisieren. Dabei warnt sie, dass DFU das interne Flash-Dateisystem löscht, und führt Sie durch das Setzen einer BOOT/RST-Jumperbrücke und das erneute Verbinden, bevor sie DfuSeCommand.exe (Windows) ausführt (4ad2be5f9).

  • HoG-Beispiel. Ein Visualisierungsbeispiel für Histogram of Oriented Gradients (09-Feature-Detection/hog.py) wurde hinzugefügt, das img.find_hog() verwendet (b03a707f7).

Weitere Änderungen und Verbesserungen

  • Der alte improvisierte Code für Baudrate/Pakete wurde durch die Klassen OpenMVPluginSerialPortCommand/Result, die Opcodes __USBDBG_* und __BOOTLDR_* sowie die Hilfsfunktionen command()/commandResult() anstelle von write()/readAll()/isOpen() ersetzt (b03a707f7, 141122e21, b2ac8defe, 1d72fe4bf, b4cf2fe43, c60936d5f).

  • Die Installation des seriellen Port-Treibers unter Windows erfolgt nun unbeaufsichtigt/ohne Eingabeaufforderung. Die Treiberskripte openmv.cmd/pybcdc.cmd wurden auf dpinst-basierte Installer anstelle des interaktiven InfDefaultInstall umgestellt, und der Installer für das Visual C++ Redistributable (vcr.cmd, das vcredist_x86.exe und vcredist_x64.exe im Hintergrund ausführt) wurde hinzugefügt und korrigiert (a5a6e0590, 754d0776d, b0be97e3e, 452a29f0d, c051c6e30, ad1b674ef, 565f1eccd).

Fehlerbehebungen

  • Behoben wurde, dass Firmware-Flashen und Kommunikation innerhalb virtueller Maschinen fehlschlugen; außerdem wurden verschiedene Befehls-Timeouts sowie das Polling von Frame-Buffer/Tx-Puffer gelockert, sodass Verbinden und Ausführen robuster sind. Der Reprogram-Dialog weist nun darauf hin, dass es „may take up to 5 minutes“, und das Timeout des DFU-Prozesses wurde in 324f243f9 von 240s auf 300s erhöht (c051c6e30, b0be97e3e, 1d72fe4bf, b4cf2fe43, 324f243f9, c60936d5f).

  • Der Vergleich für verfügbare Firmware-/IDE-Aktualisierungen wurde korrigiert, sodass eine neuere Minor- oder Patch-Version nicht mehr fälschlicherweise auslöst, wenn ein höheres Feld gleich ist; außerdem wird nun verlangt, dass im Bootloader-Dialog vor dem Flashen eine gültige Datei ausgewählt ist (4ad2be5f9).

  • Datei-Handles (Boards-Liste, Firmware-/Versionsdateien) werden nach dem Lesen geschlossen, und das Padding der Firmware-Flash-Chunks wurde korrigiert, sodass auf FLASH_WRITE_CHUNK_SIZE aufgefüllt wird; dadurch werden geleakte Handles und falsch aufgefüllte letzte Chunks bei Firmware-Aktualisierungen verhindert (4ad2be5f9).

  • Das OpenMV-Help-Menü und die Ausgabebereiche wurden korrigiert: Der Eintrag About OpenMV Cam kollidiert nicht mehr mit der plattformeigenen About-Rolle (AboutRoleApplicationSpecificRole), und die Ausgabebereiche belegen nicht mehr die Tastenkombinationen Alt/Cmd + Zahl (a0694eac7).

  • Beim Öffnen externer OpenMV-Weblinks (Foren, Download, Support) wird nun ein Fehlerdialog „Failed to open“ angezeigt, wenn die URL nicht gestartet werden kann, anstatt stillschweigend nichts zu tun (b0be97e3e).

Plattform- und Tool-Unterstützung

  • Qt-Creator-Basis: 4.0.2.

  • Gebündelte Kamera-Firmware: aktualisiert auf 2.0.0, mit neuer firmware.bin/openmv.bin und neu hinzugefügten firmware.dfu/bootloader.dfu/firmware.elf/bootloader.elf für OMV2 und OMV7.

  • DFU-Flashen unter Windows wurde hinzugefügt unter Verwendung einer gebündelten ST-DfuSeCommand.exe, des ST-DfuSe-USB-Treiberpakets (DfuSe v3.0.4.0 unter Win7/Win8, v3.0.5.0 unter Win8.1) und eines dfuse.cmd-Treiberinstallers (4ad2be5f9).

  • DFU-Flashen unter macOS und Linux wurde von vorkompilierten dfu-util-Binaries auf einen gebündelten pydfu.py-Flasher umgestellt, wobei die IDE die erforderlichen libusb/pyusb-Installationsbefehle anzeigt. ac248c0ec fügte kurzzeitig Linux-x86_64-Binaries dfu-util/dfu-prefix/dfu-suffix hinzu, doch 324f243f9 entfernte sie dann alle zugunsten von pydfu.py. Im finalen Release werden keine dfu-util-Binaries ausgeliefert; static.pro bündelt das pydfu-Datenverzeichnis für alle Nicht-Windows-Hosts, während Windows den gebündelten DfuSe-Ablauf verwendet (ac248c0ec, 324f243f9, 7837a07da).

  • Linux-udev-Regeln wurden aktualisiert, um SUBSYSTEM-Matching zu verwenden (Kamera VID 1209/PID abd1 tty und STM DFU 0483/df11), damit die Geräte- und DFU-Symlinks unter 32-Bit-Linux funktionieren; außerdem wurden Netzwerkanfragen mit Redirect-Folge für ältere Qt-Versionen abgesichert (194acd828).

Breaking Changes

Die gebündelten eigenständigen dfu-util-Binaries für macOS und Linux wurden entfernt und durch einen Python-pydfu.py-Flasher ersetzt. Unter macOS und Linux erfordert das DFU-Flashen der Firmware nun eine einmalige Installation von Python sowie libusb und pyusb (die IDE zeigt die genauen MacPorts-/HomeBrew-/apt-get-Befehle an). Windows verwendet weiterhin den gebündelten DfuSe-basierten Ablauf. Es gibt keine Brüche in der Skripting-API, und die Qt-Creator-4.0.2-Basis ist unverändert.