16 Commits

Author SHA1 Message Date
aa8df59af2 PS_Win_BLE: fix crash on disconnect - use TWeakObjectPtr in all async dispatches
All Dispatch* functions now capture UPS_BLE_Device via TWeakObjectPtr instead of
a raw pointer, preventing an access violation when the UObject is garbage collected
before the GameThread lambda executes (EXCEPTION_ACCESS_VIOLATION @ 0x60).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 09:25:16 +01:00
10ca1e19c7 Arduino: disable IMU BLE streaming when not in debug mode
IMU data (roll/pitch/yaw) is now only sent over BLE when debugMode != DEBUG_OFF,
as originally intended for production. Removes the TODO_TEST workaround.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 09:12:03 +01:00
7c2cb387f2 PS_Win_BLE : fix crash shutdown + cache caractéristiques GATT
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>
2026-02-18 19:28:05 +01:00
d53dd36194 Fix crash shutdown + IMU BLE toujours actif pour tests
PS_Win_BLE : crash à la fermeture d'Unreal (assertion Index >= 0 dans
UObjectArray) car RemoveFromRoot() était appelé dans ShutdownModule()
alors que l'UObject array est déjà partiellement détruit. Fix : cleanup
du BLEManager déplacé dans un delegate FCoreDelegates::OnPreExit qui
s'exécute plus tôt, avant la destruction des UObjects.

uproject : désactivation explicite de WinBluetoothLE (les nœuds
Blueprint restaient dans le groupe Bluetooth Low Energy car le plugin
était chargé automatiquement depuis le dossier Plugins/).

Firmware : envoi IMU BLE découplé du debug mode pour pouvoir tester
la caractéristique 6E400002 à distance (TODO_TEST — remettre la
condition debugMode != DEBUG_OFF quand Pico Motion Tracker intégré).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 19:23:13 +01:00
0573cd9a57 PS_Win_BLE : catégories Blueprint → ASTERION|Win_BLE
Toutes les entrées Blueprint (UFUNCTION, UPROPERTY, UCLASS, USTRUCT, UENUM)
sont désormais rangées dans ASTERION|Win_BLE au lieu de "PS BLE".
64 occurrences mises à jour dans les 4 headers publics.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 16:54:35 +01:00
113eddef46 PS_Win_BLE : fix erreurs de compilation WinRT
- Suppression des 'using namespace Windows::*' au scope global
  (conflit avec le namespace Windows d'Unreal via AllowWindowsPlatformTypes)
- Remplacement par un macro PS_BLE_WINRT_NS avec aliases locaux
  (WinBT, WinAdv, WinGAP, WinStr) utilisés dans chaque fonction
- Ajout de FPS_BLEDeviceHandle et FPS_GattServiceHandle : wrappers
  heap-alloués pour les types WinRT qui suppriment operator new
- Suppression warning C4265 (dtor non-virtual interne aux headers WinRT)
- Plugin charge sans erreur dans UE 5.5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 16:46:01 +01:00
d593bbd9fd Ajout plugin PS_Win_BLE : réécriture native WinRT sans DLL tierce
Remplace WinBluetoothLE (dépendant de BLEproto64.dll) par une
implémentation C++ native utilisant les APIs WinRT Windows.Devices.Bluetooth.

Structure :
- PS_Win_BLE.uplugin / PS_Win_BLE.Build.cs
- PS_BLETypes.h     : enums (EPS_GATTStatus, EPS_BLEError, EPS_CharacteristicDescriptor),
                      structs (FPS_MACAddress, FPS_ServiceItem, FPS_CharacteristicItem),
                      delegates (FPS_OnConnect, FPS_OnNotify, FPS_OnRead, etc.)
- PS_BLEModule      : startup WinRT, scan BLE (Live/Background), connect/disconnect,
                      Read/Write/Subscribe/Unsubscribe, dispatch GameThread
- PS_BLEDevice      : UObject par périphérique BLE, gestion handles WinRT natifs
- PS_BLEManager     : gestionnaire global, discovery, MAC utils
- PS_BLELibrary     : Blueprint function library (GetBLEManager, descriptors, etc.)
- Content/Sample    : assets Blueprint copiés depuis WinBluetoothLE

Préfixe PS_ sur tous les fichiers, classes, structs et enums.
Copyright (C) 2025 ASTERION VR

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 16:27:23 +01:00
1836e4e2b1 no message 2026-02-18 16:12:57 +01:00
6d15a3f14f Merge branch 'claude/fervent-ride' : lecture config XIAO au démarrage
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 13:49:43 +01:00
2fadb3e6e2 Calibration tool : lecture config XIAO au démarrage
Lit la caractéristique configChar au démarrage de la connexion BLE
pour synchroniser les seuils Python avec les valeurs sauvegardées
en flash sur le XIAO (accel, gyro, audio).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 13:49:34 +01:00
f526898b1f Firmware : IMU BLE désactivé en mode production (debug OFF)
L'envoi Roll/Pitch/Yaw sur imuChar est maintenant conditionné à
debugMode != OFF → charge BLE réduite pour Unreal en production.
Le calibration tool Python (debug FULL) continue de recevoir l'IMU.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 13:45:26 +01:00
35e22846dd Renommer xiao_airsoft_pro → PS_BLE_ShotDetection
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 12:23:20 +01:00
688ca8332e Merge branch 'claude/fervent-ride' : firmware v3.3 + calibration tool v3
- Firmware : persistance flash, debug BLE, minSensors=3 par défaut
- Calibration tool : timeline tirs, NUM6/4 minSensors, scan auto BLE

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 12:19:51 +01:00
6e1241f6bb Firmware v3.3 + calibration tool v3 : debug BLE, timeline tirs, minSensors
Firmware (xiao_airsoft_pro.ino) :
- Persistance config en flash (InternalFileSystem / LittleFS)
- Mode debug activable via BLE : octet fixe offset 28 du payload config
- minSensors par défaut : 2 → 3 (exige les 3 capteurs simultanément)
- Toutes les fenêtres trigger à 60ms (> DEBUG_RATE 50ms)

Calibration tool (xiao_calibration_tool.py) :
- Scan BLE par nom automatique (30s), connexion directe si adresse fournie
- Config + debug FULL envoyés automatiquement à la connexion
- NUM0 : cycle debug OFF/RAW/TRIGGERS/FULL
- NUM6/4 : ajustement minSensors 1-3 en temps réel
- 4ème graphique : timeline des tirs détectés (barres oranges)
- Layout 4 sous-graphiques avec height_ratios=[3,3,3,1]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 12:18:02 +01:00
d30569e6a1 Add arduino and python code 2026-02-18 09:20:51 +01:00
00f44bf81b Initial Import 2026-02-18 09:17:57 +01:00