Contexte
Actuellement RaceBoxBle se connecte au premier appareil dont le nom commence par "RaceBox". Si plusieurs RaceBox sont à portée (ex. deux pilotes dans un garage), la bibliothèque choisit arbitrairement le premier trouvé.
Description
Ajouter deux mécanismes de filtrage optionnels, 100 % rétrocompatibles (aucun changement requis pour le code existant) :
A — Filtrage par nom exact
ble.setTargetName("RaceBox Micro 12AB"); // se connecte uniquement à ce device
B — Filtrage par adresse MAC
ble.setTargetAddress("11:22:33:44:55:66");
Si aucun filtre n'est défini → comportement actuel (premier "RaceBox*" trouvé).
Fichiers concernés
src/RaceBoxBle.h — ajout de setTargetName(), setTargetAddress(), membres _targetName, _targetAddress, enum interne _FilterMode
src/RaceBoxBle.cpp — refactor de _handleScanResult() pour dispatcher selon le mode de filtrage
test/mocks/RaceBoxBle_stub.cpp — stub des nouvelles méthodes publiques
test/test_scan_filter.cpp — nouveau fichier (5 tests natifs)
README.md — section multi-device
Plan d'implémentation
- Ajouter
_FilterMode (NONE / NAME / ADDRESS) + membres privés dans .h
- Ajouter
setTargetName() et setTargetAddress() (méthodes publiques inline)
- Refactorer
_handleScanResult() :
- MODE NONE →
startsWith("RaceBox") (comportement actuel)
- MODE NAME → comparaison exacte
name == _targetName
- MODE ADDRESS → comparaison
address == _targetAddress
- Ajouter tests natifs dans
test/test_scan_filter.cpp :
- prefix match (comportement existant)
- exact name match / no match
- address match / no match
- Mettre à jour le README (section multi-device)
Critères d'acceptation
Complexité
S/M — ~2-3 h
Contexte
Actuellement
RaceBoxBlese connecte au premier appareil dont le nom commence par "RaceBox". Si plusieurs RaceBox sont à portée (ex. deux pilotes dans un garage), la bibliothèque choisit arbitrairement le premier trouvé.Description
Ajouter deux mécanismes de filtrage optionnels, 100 % rétrocompatibles (aucun changement requis pour le code existant) :
A — Filtrage par nom exact
B — Filtrage par adresse MAC
ble.setTargetAddress("11:22:33:44:55:66");Si aucun filtre n'est défini → comportement actuel (premier "RaceBox*" trouvé).
Fichiers concernés
src/RaceBoxBle.h— ajout desetTargetName(),setTargetAddress(), membres_targetName,_targetAddress, enum interne_FilterModesrc/RaceBoxBle.cpp— refactor de_handleScanResult()pour dispatcher selon le mode de filtragetest/mocks/RaceBoxBle_stub.cpp— stub des nouvelles méthodes publiquestest/test_scan_filter.cpp— nouveau fichier (5 tests natifs)README.md— section multi-devicePlan d'implémentation
_FilterMode(NONE / NAME / ADDRESS) + membres privés dans.hsetTargetName()etsetTargetAddress()(méthodes publiques inline)_handleScanResult():startsWith("RaceBox")(comportement actuel)name == _targetNameaddress == _targetAddresstest/test_scan_filter.cpp:Critères d'acceptation
setTargetName("RaceBox Micro 12AB")→ ne se connecte qu'à ce devicesetTargetAddress("11:22:33:44:55:66")→ idem par MACmake testvert)Complexité
S/M — ~2-3 h