318 lines
8.1 KiB
Markdown
Executable File
318 lines
8.1 KiB
Markdown
Executable File
# Import de périphériques depuis fichiers Markdown
|
||
|
||
Le module périphériques permet d'importer automatiquement des spécifications de périphériques depuis des fichiers Markdown (.md).
|
||
|
||
## Formats supportés
|
||
|
||
Le parser supporte deux formats de fichiers .md :
|
||
|
||
### Format simple
|
||
|
||
Le format minimal avec juste un titre et une description :
|
||
|
||
```markdown
|
||
# USB Device ID 0b05_17cb
|
||
|
||
## Description
|
||
Broadcom BCM20702A0 – Bluetooth USB (ASUS)
|
||
```
|
||
|
||
**Extraction automatique :**
|
||
- Nom du périphérique depuis la description
|
||
- Vendor ID et Product ID depuis le titre ou le nom de fichier
|
||
- Type de périphérique déduit de la description (souris, clavier, WiFi, etc.)
|
||
- Marque extraite de la description
|
||
|
||
### Format détaillé
|
||
|
||
Le format complet avec toutes les spécifications USB :
|
||
|
||
```markdown
|
||
# USB Device Specification — ID 0781:55ab
|
||
|
||
## Identification
|
||
- **Vendor ID**: 0x0781 (SanDisk Corp.)
|
||
- **Product ID**: 0x55ab
|
||
- **Commercial name**: SanDisk 3.2 Gen1 USB Flash Drive
|
||
- **Manufacturer string**: USB
|
||
- **Product string**: SanDisk 3.2Gen1
|
||
- **Serial number**: 040123d47e7a47e4ac9e89dd25318ac819d7be0fe18a9961190fdffe1052426fd4ae00000000000000000000a8e587bdff867418ab55810792a96c46
|
||
|
||
## USB Characteristics
|
||
- **USB version**: USB 3.2 Gen 1 (SuperSpeed)
|
||
- **Negotiated speed**: 5 Gb/s
|
||
- **bcdUSB**: 3.20
|
||
- **Max packet size (EP0)**: 9 bytes
|
||
- **Power mode**: Bus-powered
|
||
- **Max power draw**: 896 mA
|
||
|
||
## Device Class
|
||
- **Interface class**: 08 — Mass Storage
|
||
- **Subclass**: 06 — SCSI transparent command set
|
||
- **Protocol**: 80 — Bulk-Only Transport (BOT)
|
||
|
||
## Functional Role
|
||
- USB flash storage device
|
||
- Removable mass storage
|
||
- No HID or radio functionality
|
||
|
||
## Classification Summary
|
||
**Category**: USB Mass Storage Device
|
||
**Subcategory**: USB 3.x Flash Drive
|
||
**Criticality**: Low (non real-time device)
|
||
```
|
||
|
||
**Extraction complète :**
|
||
- Vendor ID et Product ID
|
||
- Nom commercial et modèle
|
||
- Marque (manufacturer)
|
||
- Numéro de série
|
||
- Version USB
|
||
- Vitesse de connexion
|
||
- Classe USB, sous-classe et protocole
|
||
- Catégorie fonctionnelle
|
||
- Notes sur le rôle, la performance, etc.
|
||
|
||
## Nommage des fichiers
|
||
|
||
Le parser peut extraire les IDs USB depuis le nom de fichier :
|
||
|
||
- `ID_0781_55ab.md` → Vendor: 0x0781, Product: 0x55ab
|
||
- `id_0b05_17cb.md` → Vendor: 0x0b05, Product: 0x17cb
|
||
- `ID_046d_c52b.md` → Vendor: 0x046d, Product: 0x c52b
|
||
|
||
## Détection automatique du type
|
||
|
||
Le parser détecte automatiquement le type de périphérique depuis la description :
|
||
|
||
| Mots-clés détectés | Type assigné |
|
||
|-------------------|--------------|
|
||
| souris, mouse | USB / Souris |
|
||
| clavier, keyboard | USB / Clavier |
|
||
| wifi, wireless | WiFi / Adaptateur WiFi |
|
||
| bluetooth | Bluetooth / Adaptateur Bluetooth |
|
||
| usb flash, clé usb, flash drive | USB / Clé USB |
|
||
| dongle | USB / Dongle |
|
||
|
||
## Extraction de la marque
|
||
|
||
Les marques courantes sont détectées automatiquement :
|
||
- Logitech
|
||
- SanDisk
|
||
- Ralink
|
||
- Broadcom
|
||
- ASUS
|
||
- Realtek
|
||
- TP-Link
|
||
- Intel
|
||
- Samsung
|
||
- Kingston
|
||
- Corsair
|
||
|
||
## Utilisation
|
||
|
||
### Via l'interface web
|
||
|
||
1. Accédez à [http://localhost:8087/peripherals.html](http://localhost:8087/peripherals.html)
|
||
2. Cliquez sur "Importer .md"
|
||
3. Sélectionnez votre fichier .md
|
||
4. Cliquez sur "Importer"
|
||
5. Le formulaire d'ajout s'ouvre avec les données pré-remplies
|
||
6. Vérifiez et complétez les informations
|
||
7. Enregistrez
|
||
|
||
### Via l'API
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8007/api/peripherals/import/markdown \
|
||
-F "file=@/path/to/ID_0781_55ab.md"
|
||
```
|
||
|
||
**Réponse :**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"filename": "ID_0781_55ab.md",
|
||
"parsed_data": {
|
||
"nom": "SanDisk 3.2 Gen1 USB Flash Drive",
|
||
"type_principal": "USB",
|
||
"sous_type": "Clé USB",
|
||
"marque": "SanDisk",
|
||
"modele": "3.2Gen1",
|
||
"numero_serie": "040123d47e7a...",
|
||
"description": "SanDisk Corp. SanDisk 3.2Gen1",
|
||
"caracteristiques_specifiques": {
|
||
"vendor_id": "0x0781",
|
||
"product_id": "0x55ab",
|
||
"usb_version": "USB 3.2 Gen 1 (SuperSpeed)",
|
||
"usb_speed": "5 Gb/s",
|
||
"bcdUSB": "3.20",
|
||
"max_power": "896 mA",
|
||
"interface_class": "08",
|
||
"interface_class_name": "Mass Storage",
|
||
"category": "USB Mass Storage Device",
|
||
"subcategory": "USB 3.x Flash Drive"
|
||
}
|
||
},
|
||
"suggested_peripheral": {
|
||
"nom": "SanDisk 3.2 Gen1 USB Flash Drive",
|
||
"type_principal": "USB",
|
||
"sous_type": "Clé USB",
|
||
"marque": "SanDisk",
|
||
"modele": "3.2Gen1",
|
||
"numero_serie": "040123d47e7a...",
|
||
"description": "SanDisk Corp. SanDisk 3.2Gen1",
|
||
"caracteristiques_specifiques": { ... },
|
||
"etat": "Neuf",
|
||
"quantite_totale": 1,
|
||
"quantite_disponible": 1
|
||
}
|
||
}
|
||
```
|
||
|
||
## Sections reconnues
|
||
|
||
Le parser reconnaît les sections markdown suivantes :
|
||
|
||
- `## Description` - Description générale du périphérique
|
||
- `## Identification` - Vendor/Product ID, nom commercial, marque, modèle, S/N
|
||
- `## USB Characteristics` - Version USB, vitesse, alimentation
|
||
- `## Device Class` - Classe, sous-classe, protocole USB
|
||
- `## Functional Role` - Rôle fonctionnel (ajouté aux notes)
|
||
- `## Performance Notes` - Notes de performance
|
||
- `## Power & Stability Considerations` - Recommandations d'alimentation
|
||
- `## Recommended USB Port Placement` - Emplacement recommandé
|
||
- `## Typical Use Cases` - Cas d'usage typiques
|
||
- `## Operating System Support` - Support OS
|
||
- `## Classification Summary` - Catégorie et sous-catégorie
|
||
|
||
Les sections non listées ci-dessus sont ignorées.
|
||
|
||
## Caractéristiques spécifiques
|
||
|
||
Les informations USB techniques sont stockées dans le champ JSON `caracteristiques_specifiques` :
|
||
|
||
```json
|
||
{
|
||
"vendor_id": "0x0781",
|
||
"product_id": "0x55ab",
|
||
"usb_version": "USB 3.2 Gen 1",
|
||
"usb_speed": "5 Gb/s",
|
||
"bcdUSB": "3.20",
|
||
"max_power": "896 mA",
|
||
"interface_class": "08",
|
||
"interface_class_name": "Mass Storage",
|
||
"interface_subclass": "06",
|
||
"interface_subclass_name": "SCSI transparent command set",
|
||
"interface_protocol": "80",
|
||
"interface_protocol_name": "Bulk-Only Transport (BOT)",
|
||
"category": "USB Mass Storage Device",
|
||
"subcategory": "USB 3.x Flash Drive"
|
||
}
|
||
```
|
||
|
||
## Exemple de workflow complet
|
||
|
||
### 1. Créer un fichier de spécification
|
||
|
||
Créez `ID_046d_c52b.md` :
|
||
|
||
```markdown
|
||
# USB Device ID 046d_c52b
|
||
|
||
## Description
|
||
Logitech Unifying Receiver – Dongle clavier/souris
|
||
```
|
||
|
||
### 2. Importer via l'API
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8007/api/peripherals/import/markdown \
|
||
-F "file=@ID_046d_c52b.md"
|
||
```
|
||
|
||
### 3. Le backend analyse et retourne
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"filename": "ID_046d_c52b.md",
|
||
"suggested_peripheral": {
|
||
"nom": "Logitech Unifying Receiver – Dongle clavier/souris",
|
||
"type_principal": "USB",
|
||
"sous_type": "Dongle",
|
||
"marque": "Logitech",
|
||
"caracteristiques_specifiques": {
|
||
"vendor_id": "0x046d",
|
||
"product_id": "0xc52b"
|
||
},
|
||
"etat": "Neuf",
|
||
"quantite_totale": 1,
|
||
"quantite_disponible": 1
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. Frontend pré-remplit le formulaire
|
||
|
||
L'utilisateur vérifie et complète :
|
||
- Prix d'achat
|
||
- Emplacement
|
||
- Photos
|
||
- Rating
|
||
|
||
### 5. Sauvegarde dans la base de données
|
||
|
||
Le périphérique est créé avec toutes les informations extraites.
|
||
|
||
## Gestion des erreurs
|
||
|
||
### Fichier non .md
|
||
|
||
```json
|
||
{
|
||
"detail": "Only markdown (.md) files are supported"
|
||
}
|
||
```
|
||
|
||
### Encodage invalide
|
||
|
||
```json
|
||
{
|
||
"detail": "File encoding error. Please ensure the file is UTF-8 encoded."
|
||
}
|
||
```
|
||
|
||
### Format invalide
|
||
|
||
```json
|
||
{
|
||
"detail": "Failed to parse markdown file: ..."
|
||
}
|
||
```
|
||
|
||
## Fichiers d'exemple
|
||
|
||
Des fichiers d'exemple se trouvent dans le dossier `fichier_usb/` :
|
||
|
||
```bash
|
||
ls fichier_usb/
|
||
ID_0781_55ab.md # Format détaillé
|
||
ID_0b05_17cb.md # Format simple
|
||
ID_046d_c52b.md # Logitech dongle
|
||
ID_148f_7601.md # Adaptateur WiFi
|
||
...
|
||
```
|
||
|
||
## Code source
|
||
|
||
- **Parser backend** : [backend/app/utils/md_parser.py](../backend/app/utils/md_parser.py)
|
||
- **Endpoint API** : [backend/app/api/endpoints/peripherals.py](../backend/app/api/endpoints/peripherals.py)
|
||
- **Frontend modal** : [frontend/peripherals.html](../frontend/peripherals.html)
|
||
- **JavaScript handler** : [frontend/js/peripherals.js](../frontend/js/peripherals.js)
|
||
|
||
---
|
||
|
||
**Note :** Cette fonctionnalité complète l'import USB (`lsusb -v`) pour permettre l'import de spécifications pré-formatées en markdown.
|