From 1de0f05e7d3491531e029596972aab9da2a40c9d Mon Sep 17 00:00:00 2001 From: Mamadou Babaei Date: Fri, 18 Nov 2022 12:11:48 +0100 Subject: [PATCH] add missing nova glove info rotator conversions to layer 3/4 of the api and also more documentation --- .../Private/SGCore/SGNovaGloveInfo.cpp | 10 ++- .../Public/SGCore/SGNovaGloveInfo.h | 62 ++++++++++++++++++- .../SGNovaGloveInfoKismetLibrary.cpp | 7 ++- .../SGNovaGloveInfoKismetLibrary.h | 59 ++++++++++++++++-- 4 files changed, 129 insertions(+), 9 deletions(-) diff --git a/Source/SenseGloveCore/Private/SGCore/SGNovaGloveInfo.cpp b/Source/SenseGloveCore/Private/SGCore/SGNovaGloveInfo.cpp index 4176990d..68b6fa64 100644 --- a/Source/SenseGloveCore/Private/SGCore/SGNovaGloveInfo.cpp +++ b/Source/SenseGloveCore/Private/SGCore/SGNovaGloveInfo.cpp @@ -240,7 +240,7 @@ bool USGNovaGloveInfo::IsRight() const return SGCoreImpl_FSGNovaGloveInfoImpl_IsRight(&InstanceContainer); } -FQuat USGNovaGloveInfo::GetImuCorrection() const +FQuat USGNovaGloveInfo::GetImuCorrectionQ() const { FSGIC_FSGNovaGloveInfoImpl InstanceContainer{ToNovaGloveInfoImpl()}; FSGIC_FQuat OutCorrectionContainer; @@ -248,6 +248,14 @@ FQuat USGNovaGloveInfo::GetImuCorrection() const return MoveTemp(OutCorrectionContainer.Quat); } +FRotator USGNovaGloveInfo::GetImuCorrection() const +{ + FSGIC_FSGNovaGloveInfoImpl InstanceContainer{ToNovaGloveInfoImpl()}; + FSGIC_FQuat OutCorrectionContainer; + SGCoreImpl_FSGNovaGloveInfoImpl_GetImuCorrection(&InstanceContainer, &OutCorrectionContainer); + return OutCorrectionContainer.Quat.Rotator(); +} + int32 USGNovaGloveInfo::GetNumberOfSensors() const { FSGIC_FSGNovaGloveInfoImpl InstanceContainer{ToNovaGloveInfoImpl()}; diff --git a/Source/SenseGloveCore/Public/SGCore/SGNovaGloveInfo.h b/Source/SenseGloveCore/Public/SGCore/SGNovaGloveInfo.h index 77a0b457..7a9f6617 100644 --- a/Source/SenseGloveCore/Public/SGCore/SGNovaGloveInfo.h +++ b/Source/SenseGloveCore/Public/SGCore/SGNovaGloveInfo.h @@ -29,7 +29,7 @@ * * @section DESCRIPTION * - * + * Contains information on Nova's hardware, extracted from the device. */ @@ -49,6 +49,9 @@ class FSGNovaGloveInfoImpl; +/** + * Device information extracted from a Nova Glove. + */ UCLASS(BlueprintType) class SENSEGLOVECORE_API USGNovaGloveInfo final : public UObject { @@ -59,16 +62,28 @@ public: UObject* Outer, const FSGNovaGloveInfoImpl& NovaGloveInfoImpl); public: + /** + * The default constructor. + */ static USGNovaGloveInfo* NewNovaGloveInfo(UObject* Outer); + /** + * Create a new instance of a NovaGloveInfo. + */ static USGNovaGloveInfo* NewNovaGloveInfo( UObject* Outer, const FString& DeviceId, const FString& HardwareVersion, int32 FirmwareVersion, int32 SubFirmwareVersion, bool bRightHanded, const FQuat& ImuCorrection, int32 NumberOfSensors); public: + /** + * Parse an constants string into a NovaGloveInfo class. + */ static bool Parse(UObject* Outer, const FString& ConstantsString, USGNovaGloveInfo*& OutGloveInfo); + /** + * Convert a string representation back into a NovaGloveInfo class. + */ static USGNovaGloveInfo* Deserialize(UObject* Outer, const FString& SerializedString); private: @@ -83,8 +98,14 @@ private: FImplDeleter PimplDeleter; public: + /** + * The default constructor. + */ USGNovaGloveInfo(); + /** + * Create a new instance of a NovaGloveInfo. + */ USGNovaGloveInfo(const FString& DeviceId, const FString& HardwareVersion, int32 FirmwareVersion, int32 SubFirmwareVersion, bool bRightHanded, const FQuat& ImuCorrection, int32 NumberOfSensors); @@ -120,25 +141,60 @@ protected: FSGNovaGloveInfoImpl& ToNovaGloveInfoImpl(); public: + /** + * Unique identifier of this device. + */ FString GetDeviceId() const; + /** + * Hardware (sub) version of this Sense Glove Device. + */ FString GetHardwareVersion() const; + /** + * Firmware version running on the device's MicroController. (as v4.12, this is the 4). + */ int32 GetFirmwareVersion() const; + /** + * Sub firmware version running on the device's microcontroller (as v4.12, this is the .12). + */ int32 GetSubFirmwareVersion() const; + /** + * Determines if this is a right-handed Nova. + */ bool IsRight() const; - FQuat GetImuCorrection() const; + /** + * The IMU correction of this Nova. + */ + FQuat GetImuCorrectionQ() const; + /** + * The IMU correction of this Nova. + */ + FRotator GetImuCorrection() const; + + /** + * The number of sensors in this device. + */ int32 GetNumberOfSensors() const; public: + /** + * Returns true if this GloveInfo contains the same information as another. + */ bool Equals(const USGNovaGloveInfo* NovaGloveInfo) const; public: + /** + * Create a string representation of this Glove Info. + */ FString ToString() const; + /** + * Convert this class into a string representation so it can be unpacked later. + */ FString SGSerialize() const; -}; \ No newline at end of file +}; diff --git a/Source/SenseGloveCoreKismet/Private/SGCoreKismet/SGNovaGloveInfoKismetLibrary.cpp b/Source/SenseGloveCoreKismet/Private/SGCoreKismet/SGNovaGloveInfoKismetLibrary.cpp index cf87744c..abcf5b01 100644 --- a/Source/SenseGloveCoreKismet/Private/SGCoreKismet/SGNovaGloveInfoKismetLibrary.cpp +++ b/Source/SenseGloveCoreKismet/Private/SGCoreKismet/SGNovaGloveInfoKismetLibrary.cpp @@ -90,7 +90,12 @@ bool USGNovaGloveInfoKismetLibrary::IsRight(const USGNovaGloveInfo* NovaGloveInf return NovaGloveInfo->IsRight(); } -FQuat USGNovaGloveInfoKismetLibrary::GetImuCorrection(const USGNovaGloveInfo* NovaGloveInfo) +FQuat USGNovaGloveInfoKismetLibrary::GetImuCorrection_FQuat(const USGNovaGloveInfo* NovaGloveInfo) +{ + return NovaGloveInfo->GetImuCorrectionQ(); +} + +FRotator USGNovaGloveInfoKismetLibrary::GetImuCorrection_FRotator(const USGNovaGloveInfo* NovaGloveInfo) { return NovaGloveInfo->GetImuCorrection(); } diff --git a/Source/SenseGloveCoreKismet/Public/SGCoreKismet/SGNovaGloveInfoKismetLibrary.h b/Source/SenseGloveCoreKismet/Public/SGCoreKismet/SGNovaGloveInfoKismetLibrary.h index bd857de0..cebe902f 100644 --- a/Source/SenseGloveCoreKismet/Public/SGCoreKismet/SGNovaGloveInfoKismetLibrary.h +++ b/Source/SenseGloveCoreKismet/Public/SGCoreKismet/SGNovaGloveInfoKismetLibrary.h @@ -29,7 +29,7 @@ * * @section DESCRIPTION * - * + * Contains information on Nova's hardware, extracted from the device. */ @@ -41,16 +41,25 @@ class USGNovaGloveInfo; +/** + * Device information extracted from a Nova Glove. + */ UCLASS(meta=(ScriptName = "SesneGloveNovaGloveInfoKismetLibrary")) class SENSEGLOVECOREKISMET_API USGNovaGloveInfoKismetLibrary final : public USGBlueprintFunctionLibrary { GENERATED_BODY() public: + /** + * The default constructor. + */ UFUNCTION(BlueprintCallable, Category="SenseGlove | Core | Nova | Nova Glove Info", meta=(WorldContext="WorldContextObject")) static USGNovaGloveInfo* MakeNovaGloveInfo(UObject* WorldContextObject); + /** + * Create a new instance of a NovaGloveInfo. + */ UFUNCTION(BlueprintCallable, DisplayName="Make Nova Glove Info", Category="SenseGlove | Core | Nova | Nova Glove Info", meta=(WorldContext="WorldContextObject")) static USGNovaGloveInfo* MakeNovaGloveInfo_DI_HV_FV_SFV_bRH_IC_NOS( @@ -58,41 +67,83 @@ public: const FString& DeviceId, const FString& HardwareVersion, int32 FirmwareVersion, int32 SubFirmwareVersion, bool bRightHanded, const FQuat& ImuCorrection, int32 NumberOfSensors); + /** + * Parse an constants string into a NovaGloveInfo class. + */ UFUNCTION(BlueprintCallable, Category="SenseGlove | Core | Nova | Nova Glove Info", meta=(WorldContext="WorldContextObject")) static bool Parse(UObject* WorldContextObject, const FString& ConstantsString, USGNovaGloveInfo* OutGloveInfo); + /** + * Convert a string representation back into a NovaGloveInfo class. + */ UFUNCTION(BlueprintCallable, Category="SenseGlove | Core | Nova | Nova Glove Info", meta=(WorldContext="WorldContextObject")) static USGNovaGloveInfo* Deserialize(UObject* WorldContextObject, const FString& SerializedString); + /** + * Unique identifier of this device. + */ UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") static FString GetDeviceId(const USGNovaGloveInfo* NovaGloveInfo); + /** + * Hardware (sub) version of this Sense Glove Device. + */ UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") static FString GetHardwareVersion(const USGNovaGloveInfo* NovaGloveInfo); + /** + * Firmware version running on the device's MicroController. (as v4.12, this is the 4). + */ UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") static int32 GetFirmwareVersion(const USGNovaGloveInfo* NovaGloveInfo); + /** + * Sub firmware version running on the device's microcontroller (as v4.12, this is the .12). + */ UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") static int32 GetSubFirmwareVersion(const USGNovaGloveInfo* NovaGloveInfo); + /** + * Determines if this is a right-handed Nova. + */ UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") static bool IsRight(const USGNovaGloveInfo* NovaGloveInfo); - UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") - static FQuat GetImuCorrection(const USGNovaGloveInfo* NovaGloveInfo); + /** + * The IMU correction of this Nova. + */ + UFUNCTION(BlueprintPure, DisplayName="Get Imu Correction", Category="SenseGlove | Core | Nova | Nova Glove Info") + static FQuat GetImuCorrection_FQuat(const USGNovaGloveInfo* NovaGloveInfo); + /** + * The IMU correction of this Nova. + */ + UFUNCTION(BlueprintPure, DisplayName="Get Imu Correction", Category="SenseGlove | Core | Nova | Nova Glove Info") + static FRotator GetImuCorrection_FRotator(const USGNovaGloveInfo* NovaGloveInfo); + + /** + * The number of sensors in this device. + */ UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") static int32 GetNumberOfSensors(const USGNovaGloveInfo* NovaGloveInfo); + /** + * Returns true if this GloveInfo contains the same information as another. + */ UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") static bool Equals(const USGNovaGloveInfo* A, const USGNovaGloveInfo* B); + /** + * Create a string representation of this Glove Info. + */ UFUNCTION(BlueprintPure, Category="SenseGlove | Core | Nova | Nova Glove Info") static FString ToString(const USGNovaGloveInfo* NovaGloveInfo); + /** + * Convert this class into a string representation so it can be unpacked later. + */ UFUNCTION(BlueprintPure, DisplayName="Serialize", Category="SenseGlove | Core | Nova | Nova Glove Info") static FString SGSerialize(const USGNovaGloveInfo* NovaGloveInfo); -}; \ No newline at end of file +};