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>
This commit is contained in:
j.foucher 2026-02-18 16:54:35 +01:00
parent 113eddef46
commit 0573cd9a57
4 changed files with 64 additions and 64 deletions

View File

@ -10,7 +10,7 @@
class UPS_BLE_Manager; class UPS_BLE_Manager;
class UPS_BLE_Module; class UPS_BLE_Module;
UCLASS(ClassGroup = (Custom), Category = "PS BLE", meta = (BlueprintSpawnableComponent)) UCLASS(ClassGroup = (Custom), Category = "ASTERION|Win_BLE", meta = (BlueprintSpawnableComponent))
class PS_WIN_BLE_API UPS_BLE_Device : public UObject class PS_WIN_BLE_API UPS_BLE_Device : public UObject
{ {
GENERATED_BODY() GENERATED_BODY()
@ -23,68 +23,68 @@ public:
virtual ~UPS_BLE_Device() override; virtual ~UPS_BLE_Device() override;
// ─── Getters Blueprint ──────────────────────────────────────────────────── // ─── Getters Blueprint ────────────────────────────────────────────────────
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "PS BLE", meta = (DisplayName = "Address as String", ReturnDisplayName = "Address")) UFUNCTION(BlueprintCallable, BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Address as String", ReturnDisplayName = "Address"))
FString DeviceAddressAsString(); FString DeviceAddressAsString();
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "PS BLE", meta = (DisplayName = "Address as Int64", ReturnDisplayName = "Int64")) UFUNCTION(BlueprintCallable, BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Address as Int64", ReturnDisplayName = "Int64"))
int64 DeviceAddressAsInt64(); int64 DeviceAddressAsInt64();
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "PS BLE", meta = (DisplayName = "Address as MAC", ReturnDisplayName = "MAC")) UFUNCTION(BlueprintCallable, BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Address as MAC", ReturnDisplayName = "MAC"))
FPS_MACAddress DeviceAddressAsMAC(); FPS_MACAddress DeviceAddressAsMAC();
// ─── Actions ────────────────────────────────────────────────────────────── // ─── Actions ──────────────────────────────────────────────────────────────
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void Connect(); void Connect();
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void Disconnect(); void Disconnect();
UFUNCTION(BlueprintCallable, Category = "PS BLE", meta = (DisplayName = "Is Connected", ReturnDisplayName = "Connected")) UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Is Connected", ReturnDisplayName = "Connected"))
bool IsConnected(); bool IsConnected();
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void DiscoverServices(); void DiscoverServices();
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void Read(const FString& ServiceUUID, const FString& CharacteristicUUID); void Read(const FString& ServiceUUID, const FString& CharacteristicUUID);
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void Write(const FString& ServiceUUID, const FString& CharacteristicUUID, TArray<uint8> Data); void Write(const FString& ServiceUUID, const FString& CharacteristicUUID, TArray<uint8> Data);
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void Subscribe(const FString& ServiceUUID, const FString& CharacteristicUUID); void Subscribe(const FString& ServiceUUID, const FString& CharacteristicUUID);
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void Unsubscribe(const FString& ServiceUUID, const FString& CharacteristicUUID); void Unsubscribe(const FString& ServiceUUID, const FString& CharacteristicUUID);
// ─── Properties ─────────────────────────────────────────────────────────── // ─── Properties ───────────────────────────────────────────────────────────
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE")
FString DeviceName = "<noname>"; FString DeviceName = "<noname>";
UPROPERTY(BlueprintReadOnly, BlueprintGetter = "DeviceAddressAsString", Category = "PS BLE") UPROPERTY(BlueprintReadOnly, BlueprintGetter = "DeviceAddressAsString", Category = "ASTERION|Win_BLE")
FString AddressAsString; FString AddressAsString;
UPROPERTY(BlueprintReadOnly, BlueprintGetter = "DeviceAddressAsInt64", Category = "PS BLE") UPROPERTY(BlueprintReadOnly, BlueprintGetter = "DeviceAddressAsInt64", Category = "ASTERION|Win_BLE")
int64 AddressAsInt64 = 0; int64 AddressAsInt64 = 0;
UPROPERTY(BlueprintReadOnly, BlueprintGetter = "DeviceAddressAsMAC", Category = "PS BLE") UPROPERTY(BlueprintReadOnly, BlueprintGetter = "DeviceAddressAsMAC", Category = "ASTERION|Win_BLE")
FPS_MACAddress AddressAsMAC; FPS_MACAddress AddressAsMAC;
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE")
int32 RSSI = 0; int32 RSSI = 0;
UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Category = "PS BLE") UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Category = "ASTERION|Win_BLE")
TArray<FPS_ServiceItem> ActiveServices; TArray<FPS_ServiceItem> ActiveServices;
// ─── Delegates ──────────────────────────────────────────────────────────── // ─── Delegates ────────────────────────────────────────────────────────────
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnConnect OnConnect; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnConnect OnConnect;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnDisconnect OnDisconnect; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnDisconnect OnDisconnect;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnServicesDiscovered OnServicesDiscovered; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnServicesDiscovered OnServicesDiscovered;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnRead OnRead; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnRead OnRead;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnNotify OnNotify; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnNotify OnNotify;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnWrite OnWrite; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnWrite OnWrite;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnSubscribe OnSubscribe; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnSubscribe OnSubscribe;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnUnsubscribe OnUnsubscribe; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnUnsubscribe OnUnsubscribe;
// ─── Internal state ─────────────────────────────────────────────────────── // ─── Internal state ───────────────────────────────────────────────────────
uint64 DeviceID = 0; uint64 DeviceID = 0;

View File

@ -16,18 +16,18 @@ class PS_WIN_BLE_API UPS_BLE_Library : public UBlueprintFunctionLibrary
public: public:
/** Return the BLE Manager singleton */ /** Return the BLE Manager singleton */
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "PS BLE", meta = ( UFUNCTION(BlueprintCallable, BlueprintPure, Category = "ASTERION|Win_BLE", meta = (
DisplayName = "Get BLE Manager", DisplayName = "Get BLE Manager",
ReturnDisplayName = "BLE Manager", ReturnDisplayName = "BLE Manager",
Keywords = "Bluetooth LE BLE manager PS")) Keywords = "Bluetooth LE BLE manager PS"))
static UPS_BLE_Manager* GetBLEManager(bool& IsPluginLoaded, bool& BLEAdapterFound); static UPS_BLE_Manager* GetBLEManager(bool& IsPluginLoaded, bool& BLEAdapterFound);
/** Convert a hex nibble character to byte (0-15). Valid=false if invalid character. */ /** Convert a hex nibble character to byte (0-15). Valid=false if invalid character. */
UFUNCTION(BlueprintPure, Category = "PS BLE", meta = (DisplayName = "Nibble To Byte", ReturnDisplayName = "Byte")) UFUNCTION(BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Nibble To Byte", ReturnDisplayName = "Byte"))
static uint8 NibbleToByte(const FString& Nibble, bool& Valid); static uint8 NibbleToByte(const FString& Nibble, bool& Valid);
/** Decompose a characteristic descriptor byte into individual capability booleans */ /** Decompose a characteristic descriptor byte into individual capability booleans */
UFUNCTION(BlueprintPure, Category = "PS BLE", meta = (DisplayName = "Get Descriptor Bits")) UFUNCTION(BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Get Descriptor Bits"))
static void GetDescriptorBits( static void GetDescriptorBits(
const EPS_CharacteristicDescriptor& Descriptor, const EPS_CharacteristicDescriptor& Descriptor,
bool& Broadcastable, bool& ExtendedProperties, bool& Broadcastable, bool& ExtendedProperties,
@ -36,7 +36,7 @@ public:
bool& WriteNoResponse, bool& SignedWrite); bool& WriteNoResponse, bool& SignedWrite);
/** Build a characteristic descriptor byte from individual capability booleans */ /** Build a characteristic descriptor byte from individual capability booleans */
UFUNCTION(BlueprintPure, Category = "PS BLE", meta = (DisplayName = "Make BLE Descriptor")) UFUNCTION(BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Make BLE Descriptor"))
static EPS_CharacteristicDescriptor MakeDescriptor( static EPS_CharacteristicDescriptor MakeDescriptor(
const bool Broadcastable, const bool ExtendedProperties, const bool Broadcastable, const bool ExtendedProperties,
const bool Notifiable, const bool Indicable, const bool Notifiable, const bool Indicable,
@ -44,10 +44,10 @@ public:
const bool WriteNoResponse, const bool SignedWrite); const bool WriteNoResponse, const bool SignedWrite);
/** Convert a descriptor byte to a human-readable string */ /** Convert a descriptor byte to a human-readable string */
UFUNCTION(BlueprintPure, Category = "PS BLE", meta = (DisplayName = "Descriptor To String", ReturnDisplayName = "Descriptor")) UFUNCTION(BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Descriptor To String", ReturnDisplayName = "Descriptor"))
static FString DescriptorToString(const uint8& Descriptor); static FString DescriptorToString(const uint8& Descriptor);
/** True if running inside the Unreal Editor */ /** True if running inside the Unreal Editor */
UFUNCTION(BlueprintPure, Category = "PS BLE", meta = (DisplayName = "Is Editor Running", ReturnDisplayName = "EditorRunning")) UFUNCTION(BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Is Editor Running", ReturnDisplayName = "EditorRunning"))
static bool IsEditorRunning(); static bool IsEditorRunning();
}; };

View File

@ -10,7 +10,7 @@
class UPS_BLE_Module; class UPS_BLE_Module;
class UPS_BLE_Device; class UPS_BLE_Device;
UCLASS(ClassGroup = (Custom), Category = "PS BLE", meta = (BlueprintSpawnableComponent)) UCLASS(ClassGroup = (Custom), Category = "ASTERION|Win_BLE", meta = (BlueprintSpawnableComponent))
class PS_WIN_BLE_API UPS_BLE_Manager : public UObject class PS_WIN_BLE_API UPS_BLE_Manager : public UObject
{ {
GENERATED_BODY() GENERATED_BODY()
@ -24,7 +24,7 @@ public:
void AttachModule(UPS_BLE_Module* Module); void AttachModule(UPS_BLE_Module* Module);
// ─── Discovery ──────────────────────────────────────────────────────────── // ─── Discovery ────────────────────────────────────────────────────────────
UFUNCTION(BlueprintCallable, Category = "PS BLE", meta = ( UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE", meta = (
AutoCreateRefTerm = "OnNewDeviceDiscovered", AutoCreateRefTerm = "OnNewDeviceDiscovered",
ToolTip = "Live scan: fires OnNewDeviceDiscovered each time a device is found. Filter is comma-separated name substrings.")) ToolTip = "Live scan: fires OnNewDeviceDiscovered each time a device is found. Filter is comma-separated name substrings."))
void StartDiscoveryLive( void StartDiscoveryLive(
@ -33,7 +33,7 @@ public:
const int64 DurationMs = 5000, const int64 DurationMs = 5000,
const FString& NameFilter = ""); const FString& NameFilter = "");
UFUNCTION(BlueprintCallable, Category = "PS BLE", meta = ( UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE", meta = (
AutoCreateRefTerm = "OnDiscoveryEnd", AutoCreateRefTerm = "OnDiscoveryEnd",
ToolTip = "Background scan: fires OnDiscoveryEnd once finished. Filter is comma-separated name substrings.")) ToolTip = "Background scan: fires OnDiscoveryEnd once finished. Filter is comma-separated name substrings."))
void StartDiscoveryInBackground( void StartDiscoveryInBackground(
@ -41,34 +41,34 @@ public:
const int64 DurationMs = 5000, const int64 DurationMs = 5000,
const FString& NameFilter = ""); const FString& NameFilter = "");
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void StopDiscovery(); void StopDiscovery();
UFUNCTION(BlueprintCallable, Category = "PS BLE") UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE")
void DisconnectAll(); void DisconnectAll();
UFUNCTION(BlueprintCallable, Category = "PS BLE", meta = (DisplayName = "Reset BLE Adapter", ReturnDisplayName = "Success")) UFUNCTION(BlueprintCallable, Category = "ASTERION|Win_BLE", meta = (DisplayName = "Reset BLE Adapter", ReturnDisplayName = "Success"))
bool ResetBLEAdapter(); bool ResetBLEAdapter();
// ─── MAC utils ──────────────────────────────────────────────────────────── // ─── MAC utils ────────────────────────────────────────────────────────────
UFUNCTION(BlueprintPure, Category = "PS BLE", meta = (DisplayName = "MAC to String", ReturnDisplayName = "Address")) UFUNCTION(BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "MAC to String", ReturnDisplayName = "Address"))
static FString MACToString(const FPS_MACAddress& Address); static FString MACToString(const FPS_MACAddress& Address);
UFUNCTION(BlueprintPure, Category = "PS BLE", meta = (DisplayName = "String to MAC", ReturnDisplayName = "MAC")) UFUNCTION(BlueprintPure, Category = "ASTERION|Win_BLE", meta = (DisplayName = "String to MAC", ReturnDisplayName = "MAC"))
static FPS_MACAddress StringToMAC(const FString& Address, bool& Valid); static FPS_MACAddress StringToMAC(const FString& Address, bool& Valid);
// ─── Properties ─────────────────────────────────────────────────────────── // ─── Properties ───────────────────────────────────────────────────────────
UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Category = "PS BLE") UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Category = "ASTERION|Win_BLE")
TArray<UPS_BLE_Device*> FoundDevices; TArray<UPS_BLE_Device*> FoundDevices;
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE")
bool bIsScanInProgress = false; bool bIsScanInProgress = false;
// ─── Delegates ──────────────────────────────────────────────────────────── // ─── Delegates ────────────────────────────────────────────────────────────
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnAnyBLEDeviceConnected OnAnyDeviceConnected; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnAnyBLEDeviceConnected OnAnyDeviceConnected;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnAnyBLEDeviceDisconnected OnAnyDeviceDisconnected; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnAnyBLEDeviceDisconnected OnAnyDeviceDisconnected;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnAnyServiceDiscovered OnAnyServiceDiscovered; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnAnyServiceDiscovered OnAnyServiceDiscovered;
UPROPERTY(BlueprintAssignable, Category = "PS BLE") FPS_OnBLEError OnBLEError; UPROPERTY(BlueprintAssignable, Category = "ASTERION|Win_BLE") FPS_OnBLEError OnBLEError;
// ─── Internal callbacks (called from UPS_BLE_Module dispatch) ───────────── // ─── Internal callbacks (called from UPS_BLE_Module dispatch) ─────────────
void JustDiscoveredDevice(const FPS_DeviceRecord& Rec); void JustDiscoveredDevice(const FPS_DeviceRecord& Rec);

View File

@ -7,7 +7,7 @@
// ─── ENUMS ─────────────────────────────────────────────────────────────────── // ─── ENUMS ───────────────────────────────────────────────────────────────────
UENUM(BlueprintType, Category = "PS BLE") UENUM(BlueprintType, Category = "ASTERION|Win_BLE")
enum class EPS_GATTStatus : uint8 enum class EPS_GATTStatus : uint8
{ {
Success = 0x00 UMETA(DisplayName = "Success"), Success = 0x00 UMETA(DisplayName = "Success"),
@ -21,7 +21,7 @@ enum class EPS_GATTStatus : uint8
Failure = 0xFF UMETA(DisplayName = "Failure") Failure = 0xFF UMETA(DisplayName = "Failure")
}; };
UENUM(BlueprintType, Category = "PS BLE") UENUM(BlueprintType, Category = "ASTERION|Win_BLE")
enum class EPS_CharacteristicDescriptor : uint8 enum class EPS_CharacteristicDescriptor : uint8
{ {
Unknown = 0x00 UMETA(DisplayName = "Unknown"), Unknown = 0x00 UMETA(DisplayName = "Unknown"),
@ -35,7 +35,7 @@ enum class EPS_CharacteristicDescriptor : uint8
SignedWrite = 0x80 UMETA(DisplayName = "Signed Write") SignedWrite = 0x80 UMETA(DisplayName = "Signed Write")
}; };
UENUM(BlueprintType, Category = "PS BLE") UENUM(BlueprintType, Category = "ASTERION|Win_BLE")
enum class EPS_BLEError : uint8 enum class EPS_BLEError : uint8
{ {
NoError = 0x00 UMETA(DisplayName = "Success"), NoError = 0x00 UMETA(DisplayName = "Success"),
@ -61,40 +61,40 @@ enum class EPS_BLEError : uint8
// ─── STRUCTS ───────────────────────────────────────────────────────────────── // ─── STRUCTS ─────────────────────────────────────────────────────────────────
USTRUCT(BlueprintType, Atomic, Category = "PS BLE") USTRUCT(BlueprintType, Atomic, Category = "ASTERION|Win_BLE")
struct FPS_MACAddress struct FPS_MACAddress
{ {
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(BlueprintReadWrite, Category = "PS BLE") uint8 b0 = 0; UPROPERTY(BlueprintReadWrite, Category = "ASTERION|Win_BLE") uint8 b0 = 0;
UPROPERTY(BlueprintReadWrite, Category = "PS BLE") uint8 b1 = 0; UPROPERTY(BlueprintReadWrite, Category = "ASTERION|Win_BLE") uint8 b1 = 0;
UPROPERTY(BlueprintReadWrite, Category = "PS BLE") uint8 b2 = 0; UPROPERTY(BlueprintReadWrite, Category = "ASTERION|Win_BLE") uint8 b2 = 0;
UPROPERTY(BlueprintReadWrite, Category = "PS BLE") uint8 b3 = 0; UPROPERTY(BlueprintReadWrite, Category = "ASTERION|Win_BLE") uint8 b3 = 0;
UPROPERTY(BlueprintReadWrite, Category = "PS BLE") uint8 b4 = 0; UPROPERTY(BlueprintReadWrite, Category = "ASTERION|Win_BLE") uint8 b4 = 0;
UPROPERTY(BlueprintReadWrite, Category = "PS BLE") uint8 b5 = 0; UPROPERTY(BlueprintReadWrite, Category = "ASTERION|Win_BLE") uint8 b5 = 0;
}; };
USTRUCT(BlueprintType, Atomic, Category = "PS BLE") USTRUCT(BlueprintType, Atomic, Category = "ASTERION|Win_BLE")
struct FPS_CharacteristicItem struct FPS_CharacteristicItem
{ {
GENERATED_BODY() GENERATED_BODY()
public: public:
FGuid cUUID; FGuid cUUID;
bool subscribed = false; bool subscribed = false;
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") uint8 Descriptor = 0; UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE") uint8 Descriptor = 0;
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") FString CharacteristicName; UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE") FString CharacteristicName;
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") FString CharacteristicUUID; UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE") FString CharacteristicUUID;
}; };
USTRUCT(BlueprintType, Atomic, Category = "PS BLE") USTRUCT(BlueprintType, Atomic, Category = "ASTERION|Win_BLE")
struct FPS_ServiceItem struct FPS_ServiceItem
{ {
GENERATED_BODY() GENERATED_BODY()
public: public:
FGuid sUUID; FGuid sUUID;
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") FString ServiceName; UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE") FString ServiceName;
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") FString ServiceUUID; UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE") FString ServiceUUID;
UPROPERTY(BlueprintReadOnly, Category = "PS BLE") TArray<FPS_CharacteristicItem> Characteristics; UPROPERTY(BlueprintReadOnly, Category = "ASTERION|Win_BLE") TArray<FPS_CharacteristicItem> Characteristics;
}; };
// ─── INTERNAL DEVICE RECORD (forward-declared here so Manager can use it) ──── // ─── INTERNAL DEVICE RECORD (forward-declared here so Manager can use it) ────