Crash shutdown (Index >= 0) :
- OnPreExit se déclenche encore trop tard (GC déjà en cours).
- Remplacé par OnEnginePreExit qui fire avant le shutdown des core
modules, donc avant toute destruction d'UObject. RemoveFromRoot()
est maintenant appelé au bon moment.
Cache caractéristiques GATT :
- Bug : Read/Write/Subscribe rappelaient GetCharacteristicsAsync(Cached)
à chaque opération, ce qui peut retourner un ordre différent du
discovery initial (Uncached) → mauvaise caractéristique ciblée.
- Fix : les GattCharacteristic sont maintenant stockées dans
FPS_GattServiceHandle::Characteristics (std::vector) lors du
ConnectDevice, et réutilisées directement via [CI] dans toutes
les opérations ultérieures.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>