feat(dof): detection reelle, gestion cabinet.xml dans l'UI, backboard Teensy + fix libdof - #86
Merged
KarotsSugarpie merged 13 commits intoAug 31, 2026
Conversation
…pack fictif) - dof_simple_manager_card / _friendly : definies mais jamais appelees, aucune page ne les rendait ; boutons pointant vers /dof/manager qui ne fait quun redirect. Supprimees avec leurs helpers exclusifs (dof_usb_present, dof_support_ready, dof_configurator_status, dof_status_badge, dof_manager_families, dof_path_exists). - Carte Driver Pack : listait 11 binaires pincabos-*ctl qui nexistent sur aucune installation (ni dans le depot) -> affichait toujours absent/safe mode. Retiree avec sa route API et son script de refresh. - CONSERVE : toute la couche support par famille (LedWiz, Pinscape KL25Z, Pico, Dudes Cab, PacLed, FTDI, Arduino, Serial) : dof_component_definitions, checks paquets/modules/udev, route /dof/install-utils. Elle est reactivee et rendue fonctionnelle dans les commits suivants.
- install-dof-component.sh : le script que la route /dof/install-utils lancait n'existait pas (ni dans le depot, ni sur les cabs). Version reelle : paquets (libusb/hidapi/pyserial), modules noyau, regles udev pour TOUTES les familles (LedWiz, Pinscape KL25Z/Pico, Teensy, Dudes Cab/ESP, PacLed, FTDI, Arduino). Idempotent, tolere le hors-ligne. - Famille Teensy/PJRC (VID 16c0) ajoutee : elle etait totalement absente de PinCabOS alors que c'est le controleur le plus courant pour les strips adressables (backboard). Aucune famille existante retiree. - La carte Utilitaires/Drivers DOF est desormais rendue sur /dof (le code existait mais n'etait appele nulle part).
… ensemble) Quitter une table plantait par intermittence (double free) quand une Dudes Cab et un TeensyStripController coexistaient : use-after-free dans DudesCab::Finish() au teardown. Fix propose upstream (libdof PR PinCabOs#65) ; en attendant le merge, on embarque le build corrige (master eef645d + patch). Remplace libdof.so.0.4.7 aux trois endroits livres par l'ISO : - overlay vpinfe-dof-ledwiz-hidraw-stable (charge par vpinfe via le bridge) - vpinfe/_internal/third-party/dof (copies embarquees) - plugins/dof de VPX (chemin utilise en jeu) Valide sur cab reel (backboard Teensy 144x16 + Dudes Cab). Modulable : sans Dudes Cab ou sans Teensy, comportement inchange (le fix ne touche que le teardown DudesCab). Provenance et rollback documentes dans README-libdof-build.md.
…xml) + port Teensy auto - tools/dof-cabinet/dof-cabinet.py : detection des controleurs DOF par VID/PID via udevadm (Teensy 16c0, DudesCab/RP2040 2e8a, LedWiz fafa, Ultimarc d209, Pinscape 1209, FTDI 0403), avec distinction AutoConfig / a-declarer, et generation de cabinet.xml conforme au parseur libdof : AutoConfigEnabled + OutputControllers (strips adressables Teensy/Wemos, ArtNet, PinOne) + Toys (LedStrip, LedWizEquivalent). Modulable : cab sans strip adressable -> cabinet.xml AutoConfig seul (DudesCab, LedWiz, KL25Z, Pico, PacLed restent autodetectes par DOF). Sortie generee validee identique a un cabinet.xml de cab reel. - tools/fix-teensy-port.sh + drop-in ExecStartPre vpinfe : le /dev/ttyACM* du Teensy change selon l'ordre d'enumeration USB au boot -> recale <ComPortName> dans cabinet.xml a chaque demarrage. Sans Teensy ou sans cabinet.xml : sortie 0, aucun effet (safe sur tous les cabs).
…ce web Nouvelle page web de gestion materielle DOF, branchee sur l'outil tools/dof-cabinet (source unique de verite CLI + web) : - detection reelle des controleurs par VID/PID udev : Teensy, Dudes Cab, LedWiz, Pinscape KL25Z/Pico, PacLed, FTDI... avec distinction AutoConfig / a-declarer. Chaque cab est different : tout est optionnel, la page reflete uniquement le materiel reellement branche. - lecture du cabinet.xml actuel selon le schema reellement lu par libdof (controleurs declares, toys LedStrip/LedWizEquivalent) au lieu du simple present/absent. - assistant de generation : cab sans strip adressable -> AutoConfig seul ; strip Teensy/Wemos declare seulement si voulu ; port serie 'auto' ; garde-fou luminosite. Apercu avant application, sauvegarde automatique de l'ancien fichier, restauration en un clic, redemarrage vpinfe optionnel. - boutons d'acces depuis /dof et /dof/commander ; famille Teensy ajoutee au resume peripheriques du Commander (VID 16c0, absent jusqu'ici). - endpoint JSON /dof/hardware/detect.json pour reutilisation (dashboard...). Enregistrement isole dans un try (meme pattern que DudesCabConfig) : si le module ou l'outil manque, le reste de l'interface fonctionne normalement.
La page /dof (etat general, drivers, imports) n'etait accessible depuis aucun menu : le hub Outils ne proposait que DOF Commander. Ajout : - carte 'DOF - Materiel & Config' dans le hub Outils -> /dof ; - chaque page DOF pointe vers les autres : /dof <-> /dof/hardware <-> /dof/commander (boutons croises).
/dof/hardware devient un inventaire persistant du materiel DOF (/opt/pincabos/config/dof/hardware-inventory.json) : - chaque equipement declare (Teensy, Wemos, ArtNet, PinOne) s'active ou se desactive ; le cabinet.xml est genere depuis la COMBINAISON du materiel actif : plusieurs Teensy (port resolu par numero de serie), Wemos reseau, ArtNet... chacun avec son toy LedStrip + LedWizEquivalent. - le materiel AutoConfig (Dude's Cab, LedWiz, Pinscape, PacLed) est affiche dans l'inventaire mais n'a rien a declarer : une seule ligne AutoConfigEnabled suffit, DOF les prend en charge a l'execution. Les extensions Dude's Cab (MOSLight, barres MX, splits) pointent vers DudesCabConfig + DOF Config Tool (c'est la que ca se configure). - premier lancement : inventaire amorce automatiquement depuis le cabinet.xml existant (continuite des cabs deja configures). - un Teensy branche mais non declare est propose a l'ajout en un clic ; ajout manuel pour le materiel non detectable USB (Wemos/ArtNet). - outil dof-cabinet : resolution du port serie par numero de serie (indispensable avec plusieurs Teensy).
…ibdof Verification dans le source libdof (OutputControllerList::FromXml boucle sur tous les enfants -> N controleurs du meme type OK) avec 3 corrections : - Wemos : WemosD1MPStripController HERITE de TeensyStripController dans libdof -> USB SERIE (ComPortName), pas reseau. Le generateur emettait un HostName inexistant dans le schema ; les deux types partagent maintenant le meme generateur serie (+ resolution du port par numero de serie). - strips 1..10 : libdof lit NumberOfLedsStrip1..10, on n'en gerait que 8. Les entrees 9-10 ne sont emises que si non nulles -> les cabinet.xml existants a 8 entrees restent octet-identiques a la regeneration. - fix-teensy-port.sh : la version sed ecrasait TOUS les <ComPortName> avec le port du premier Teensy (destructeur avec plusieurs cartes). Reecrit : chaque bloc TeensyStripController/Wemos est resolu par NUMERO DE SERIE via l'inventaire ; fallback mono-carte conserve ; sinon port laisse intact. - n° LedWiz auto-incremente a l'ajout d'un equipement (30, 31, 32...) pour eviter les collisions de fichier directoutputconfigNN.ini. Smoke test : 3 Teensy + 4 Wemos -> 7 blocs, 7 ports, 7 toys, 7 LedWiz distincts, pas de HostName, retro-compat 8 entrees verifiee.
- Detection : fini les familles « detecte / probable » deduites de mots-cles (ttyACM present -> Arduino probable, hidraw present -> HID detecte...). La page liste uniquement le materiel REELLEMENT branche (VID/PID udev via dof-cabinet), avec son role cabinet.xml (AutoConfig / a declarer). Note explicite : les extensions portees par une carte (Walter, MOSLight sur la Dude's Cab) ne sont pas des peripheriques USB separes. - Page compacte : 2 cartes (etat + import DOF Config Tool), le reste (dependances par famille, fichiers, logs) replie dans « Avance ». - Cle API DOF Config Tool : n'est PLUS affichee dans la page (champ password vide ; la cle enregistree est reutilisee si on laisse vide). La cle personnelle de l'auteur, versionnee dans le depot et livree sur les ISO (publy.sh l'excluait de la publication mais pas de git), est retiree.
Fusion des tuiles 'DOF Commander - Outputs' et 'DOF - Materiel & Config' en une seule tuile 'DOF' -> /dof, qui sert de page d'accueil DOF (boutons vers Materiel & cabinet.xml et Commander).
Le firmware Dude's Cab est la propriete d'Arnoz : le configurateur le telecharge a la volee depuis ses canaux officiels (dude.arnoz.com stable/beta) et le met en cache localement sur le cab de l'utilisateur, uniquement pour flasher son propre materiel. Rien n'est redistribue. Verrouillage structurel : - retrait des manifests de cache dude_versions-*.json versionnes par erreur (opt/pincabos/config/dudescab/cache/) ; - exclusion explicite ^opt/pincabos/config/dudescab(/|$) dans publy.sh, en plus du mecanisme iso.sh existant (KEEP_INVENTORY : le dossier est garde sur la machine en mise a jour et efface du payload d'installation neuve). Audit realise : aucun .uf2/.hex/.bin dans aucune branche du depot ni dans les outils annexes ; toutes les references Arnoz sont des URLs de telechargement runtime vers ses serveurs.
Valide avec une vraie Wemos branchee sur le cab : elle se presente par sa
puce USB-serie (ici CP210x 10c4:ea60 -> /dev/ttyUSB0), pas comme 'Wemos'.
- VID 10c4 (CP210x), 1a86 (CH340) et 303a (ESP32 natif) reconnus comme
candidats WemosD1MPStripController ('possible' : ces VID sont partages
avec d'autres adaptateurs serie).
- la page /dof/hardware propose l'ajout 1-clic en type Wemos (comme pour
les Teensy) ; FTDI et autres series ne sont pas proposes comme strips.
Le materiel branche est deja liste sur /dof (detection reelle) et gere dans /dof/hardware : la carte 'Peripheriques branches' (familles detecte/non detecte par VID) etait redondante -> retiree avec sa fonction dof_commander_devices_summary. Les cartes 'Controleurs dans les configs' et 'Fichiers DOF trouves' sont repliees dans une section Avance. Nettoyage au passage de balises div orphelines dans le corps de la page. Le Commander se concentre sur son role : outputs/toys + tests + import cabinet JSON.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Objectif
Faire du DOF une couche fonctionnelle et cohérente dans PinCabOS : détection
matérielle réelle, gestion du
cabinet.xmldepuis l'interface web, et prise encharge du backboard adressable (Teensy) aux côtés de la Dude's Cab. Tout est
modulable : chaque cab est différent (Dude's Cab, Teensy, Wemos, KL25Z,
LedWiz, PacLed…), rien n'est imposé, la page reflète uniquement le matériel réel.
Testé de bout en bout sur cab réel (Dude's Cab + Teensy 4.0 backboard 144×16, et
une Wemos CP2104 en test).
Contenu (13 commits)
Place nette
« Driver Pack » listant 11 binaires
pincabos-*ctlinexistants (vérifiéabsent du dépôt et des cabs → affichait toujours « absent / safe mode »).
FTDI, Arduino, Serial) est conservée et rendue fonctionnelle.
Détection réelle & matériel
install-dof-component.sh: le script réel que/dof/install-utilslançait(il n'existait nulle part) → paquets/modules/règles udev par famille.
c'est le contrôleur le plus courant pour les strips adressables.
lsusb(fini les« détecté / probable » hasardeux). Détection Wemos/ESP (CP210x, CH340, ESP32).
Page « Matériel & cabinet.xml » (
/dof/hardware)équipement ; le
cabinet.xmlest généré depuis la combinaison du matérielactif (plusieurs Teensy résolus par n° de série, Wemos, ArtNet, PinOne).
cabinet.xmlexistant (continuité).mais n'a rien à déclarer ; les extensions Dude's Cab (MOSLight, barres MX,
splits) renvoient vers DudesCabConfig + le DOF Config Tool.
AutoConfigEnabled+OutputControllers+Toys=LedStrip/LedWizEquivalent), avec aperçu,sauvegarde automatique, restauration, redémarrage vpinfe optionnel.
opt/pincabos/tools/dof-cabinet/.fix-teensy-port.sh(ExecStartPre) : recale le<ComPortName>de chaquestrip par n° de série (le
/dev/ttyACM*peut changer au boot).Correctif libdof embarqué (Dude's Cab + Teensy ensemble)
libdof.so.0.4.7aux 3 emplacements livrés par un build corrigeant unuse-after-free dans
DudesCab::Finish()au teardown (plantait parintermittence quand une Dude's Cab et un Teensy coexistent).
corrigé est embarqué (provenance/rollback dans
README-libdof-build.md).Simplification & cohérence
/dofcompacte (état + matériel réel + import DOF Config Tool ; le restereplié en « Avancé »). DOF Commander recentré sur les outputs/tests.
Nettoyage sécurité
aussi affichée en clair dans la page → champ password vide, clé stockée
réutilisée).
publy.sh,retrait de manifests de cache versionnés). Téléchargé à la volée depuis
dude.arnoz.com, sources fermées respectées — intégration validée par Arnoz.Notes pour la revue
main(Alpha 2.80). La branche est un peu en retard surmain; lediff GitHub est calculé via merge-base, indépendant des PRs récentes.
libdof.so.0.4.7sont des binaires (build custom = fix(import): complete Smart Import fallback for issue #61 #65). À remplacerpar un simple bump libdof quand fix(import): complete Smart Import fallback for issue #61 #65 sera mergé upstream.
cabinet.xml= AutoConfig seul.