addon
This commit is contained in:
317
docs/IMPORT_MARKDOWN.md
Executable file
317
docs/IMPORT_MARKDOWN.md
Executable file
@@ -0,0 +1,317 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user