Skip to content

feat: multi-device support — connect by name or address #19

Description

@lgnap

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

  1. Ajouter _FilterMode (NONE / NAME / ADDRESS) + membres privés dans .h
  2. Ajouter setTargetName() et setTargetAddress() (méthodes publiques inline)
  3. Refactorer _handleScanResult() :
    • MODE NONE → startsWith("RaceBox") (comportement actuel)
    • MODE NAME → comparaison exacte name == _targetName
    • MODE ADDRESS → comparaison address == _targetAddress
  4. Ajouter tests natifs dans test/test_scan_filter.cpp :
    • prefix match (comportement existant)
    • exact name match / no match
    • address match / no match
  5. Mettre à jour le README (section multi-device)

Critères d'acceptation

  • setTargetName("RaceBox Micro 12AB") → ne se connecte qu'à ce device
  • setTargetAddress("11:22:33:44:55:66") → idem par MAC
  • Sans appel à ces méthodes, comportement inchangé
  • Tests natifs pour les 3 modes (make test vert)
  • README à jour avec exemple multi-device

Complexité

S/M — ~2-3 h

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions