12 KiB
Executable File
Affichage des Informations USB Détaillées - Frontend
Vue d'ensemble
Section dynamique ajoutée au formulaire de périphériques pour afficher toutes les informations techniques USB extraites lors de l'import.
Comportement
Affichage Conditionnel
La section "Informations USB Détaillées" est :
- ✅ Visible : Si le périphérique contient des données USB (
vendor_id,product_id,usb_type, ouinterface_classes) - ❌ Cachée : Si aucune donnée USB n'est présente (périphériques non-USB)
Déclenchement
La section est automatiquement remplie lors de :
- Import USB CLI (
lsusb -v) → FonctionimportSelectedUSBDevice() - Import USB Structuré (info formatée) → Fonction
importUSBStructured() - Édition d'un périphérique existant avec données USB
Champs Affichés
Grille Responsive (12 champs)
| Champ | Description | Exemple | Source USB |
|---|---|---|---|
| Vendor ID | Identifiant hexadécimal du fabricant | 0x0781 |
idVendor |
| Product ID | Identifiant hexadécimal du produit | 0x55ab |
idProduct |
| Fabricant | Nom du fabricant | SanDisk Corp. |
iManufacturer |
| Type USB Réel | Type basé sur vitesse négociée | USB 3.0 |
Vitesse → Type |
| Version USB Déclarée | Version déclarée par le périphérique | USB 3.20 |
bcdUSB |
| Vitesse Négociée | Vitesse réelle de connexion | SuperSpeed (5 Gbps) |
Détection vitesse |
| Puissance Max | Consommation maximale | 896 mA |
MaxPower |
| Mode Alimentation | Type d'alimentation | Bus Powered |
bmAttributes |
| Alimentation Suffisante | Suffisance du port | ✅ Oui / ⚠️ Non |
Calcul normatif |
| Firmware Requis | Nécessite pilote spécifique | ✅ Non / ⚠️ Oui |
Classe 255 |
| Device Class | Classe du périphérique | 0 [unknown] |
bDeviceClass |
| Interface Classes | Classes d'interface (normative) | 8 (Mass Storage) |
bInterfaceClass |
Indicateurs Visuels
Alimentation Suffisante
- ✅ Oui : Le port peut alimenter le périphérique
- USB 2.0 : MaxPower ≤ 500 mA
- USB 3.x : MaxPower ≤ 900 mA
- ⚠️ Non : Risque d'alimentation insuffisante
Firmware Requis
- ✅ Non : Utilise des classes USB standard
- ⚠️ Oui (classe 255) : Nécessite pilote + microcode spécifique (Vendor Specific)
Implémentation Technique
HTML Structure
<div class="form-section full-width" id="usb-details-section" style="display: none;">
<h3>Informations USB Détaillées</h3>
<div class="usb-details-grid">
<div class="form-group">
<label for="usb_vendor_id">
Vendor ID
<span class="help-text-inline">(idVendor)</span>
</label>
<input type="text" id="usb_vendor_id" readonly>
</div>
<!-- ... 11 autres champs ... -->
</div>
</div>
CSS Grid
.usb-details-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1rem;
}
.usb-details-grid .form-group input[readonly] {
background-color: #1e1e1e;
color: #a9b7c6;
border: 1px solid #3a3a3a;
cursor: default;
}
Avantages :
- Grille responsive s'adaptant à la largeur d'écran
- Minimum 250px par colonne
- Remplissage automatique de l'espace disponible
JavaScript Logic
function fillUSBDetails(caracteristiques) {
if (!caracteristiques) {
// Hide section if no data
document.getElementById('usb-details-section').style.display = 'none';
return;
}
// Check if we have USB-specific fields
const hasUSBData = caracteristiques.vendor_id ||
caracteristiques.product_id ||
caracteristiques.usb_type ||
caracteristiques.interface_classes;
if (!hasUSBData) {
document.getElementById('usb-details-section').style.display = 'none';
return;
}
// Show section and fill fields
document.getElementById('usb-details-section').style.display = 'block';
// Set all fields
setField('usb_vendor_id', caracteristiques.vendor_id);
setField('usb_product_id', caracteristiques.product_id);
// ... etc
// Format interface classes
if (caracteristiques.interface_classes?.length > 0) {
const interfaceClassesStr = caracteristiques.interface_classes
.map(ic => `${ic.code} (${ic.name})`)
.join(', ');
setField('usb_interface_classes', interfaceClassesStr);
}
}
Workflows Utilisateur
Workflow 1 : Import USB CLI (lsusb -v)
- Utilisateur clique "Importer USB (lsusb)"
- Colle la sortie de
sudo lsusb -v - Sélectionne un périphérique
- Click "Finaliser"
- ✅ Formulaire pré-rempli avec section USB détaillée visible
- Utilisateur vérifie les informations techniques
- Enregistre le périphérique
Workflow 2 : Import USB Structuré (Info)
- Utilisateur clique "Importer USB (Info)"
- Colle les informations formatées
- Click "Importer"
- ✅ Formulaire pré-rempli avec section USB détaillée visible
- Utilisateur complète et enregistre
Workflow 3 : Périphérique Non-USB
- Utilisateur crée un périphérique manuel (câble, console, etc.)
- Remplit les champs généraux
- ❌ Section USB masquée (pas de données USB)
- Enregistre normalement
Exemples de Rendu
Exemple 1 : Clé USB SanDisk
┌─────────────────────────────────────────────────────────────┐
│ Informations USB Détaillées │
├─────────────────────────────────────────────────────────────┤
│ Vendor ID │ Product ID │
│ 0x0781 │ 0x55ab │
├────────────────────────┼────────────────────────────────────┤
│ Fabricant │ Type USB Réel │
│ SanDisk Corp. │ USB 3.0 │
├────────────────────────┼────────────────────────────────────┤
│ Version USB Déclarée │ Vitesse Négociée │
│ USB 3.20 │ SuperSpeed (5 Gbps) │
├────────────────────────┼────────────────────────────────────┤
│ Puissance Max │ Mode Alimentation │
│ 896 mA │ Bus Powered │
├────────────────────────┼────────────────────────────────────┤
│ Alimentation Suffisante│ Firmware Requis │
│ ✅ Oui │ ✅ Non │
├────────────────────────┼────────────────────────────────────┤
│ Device Class │ Interface Classes │
│ 0 [unknown] │ 8 (Mass Storage) │
└────────────────────────┴────────────────────────────────────┘
Observations :
- Type USB 3.0 détecté depuis vitesse SuperSpeed
- Alimentation suffisante : 896 mA ≤ 900 mA (USB 3.x)
- Classification normative via
bInterfaceClass = 8
Exemple 2 : Adaptateur WiFi Realtek (Firmware Requis)
┌─────────────────────────────────────────────────────────────┐
│ Informations USB Détaillées │
├─────────────────────────────────────────────────────────────┤
│ Vendor ID │ Product ID │
│ 0x0bda │ 0x8176 │
├────────────────────────┼────────────────────────────────────┤
│ Fabricant │ Type USB Réel │
│ Realtek Semiconductor │ USB 2.0 │
├────────────────────────┼────────────────────────────────────┤
│ Puissance Max │ Mode Alimentation │
│ 500 mA │ Bus Powered │
├────────────────────────┼────────────────────────────────────┤
│ Alimentation Suffisante│ Firmware Requis │
│ ✅ Oui │ ⚠️ Oui (classe 255) │
├────────────────────────┼────────────────────────────────────┤
│ Interface Classes │ │
│ 255 (Vendor Specific) │ │
└────────────────────────┴────────────────────────────────────┘
Observations :
- ⚠️ Firmware Requis : Nécessite pilote Realtek spécifique
- Classe 255 (Vendor Specific) détectée
Fichiers Modifiés
Frontend
-
frontend/peripherals.html - Lignes 241-325
- Nouvelle section
id="usb-details-section" - 12 champs en lecture seule
- Nouvelle section
-
frontend/css/peripherals.css - Lignes 668-685
- Classe
.usb-details-grid - Styles pour champs
readonly
- Classe
-
- Lignes 32-107 : Fonction
fillUSBDetails() - Ligne 459 : Appel depuis import CLI
- Ligne 629 : Appel depuis import structuré
- Lignes 32-107 : Fonction
Avantages
✅ Transparence : Toutes les informations USB visibles
✅ Pédagogique : Explications inline (tooltips)
✅ Diagnostic : Détection problèmes alimentation/firmware
✅ Normative : Affichage bInterfaceClass (critique)
✅ Responsive : Adaptation automatique à la taille d'écran
✅ Conditionnel : Masqué pour périphériques non-USB
Limitations
⚠️ Champs en lecture seule : Informations extraites automatiquement, non éditables ⚠️ Pas de validation : Les données proviennent directement de l'import ⚠️ Langue française : Labels en français uniquement
Améliorations Futures
- Tooltips explicatifs : Au survol, explication détaillée de chaque champ
- Copie rapide : Bouton pour copier vendor_id:product_id
- Liens externes : Lien vers USB ID Database pour vendor/product
- Codes couleur : Rouge/Orange/Vert selon type USB et puissance
- Export : Bouton pour exporter les infos USB en JSON/YAML
- Comparaison : Afficher différences avant/après mise à jour