Files
Plugin/Source/SenseGloveCore/Private/SGCore/SGDevice.cpp
T

544 lines
19 KiB
C++

/**
* @file
*
* @author Mamadou Babaei <mamadou@senseglove.com>
*
* @section LICENSE
*
* (The MIT License)
*
* Copyright (c) 2020 - 2024 SenseGlove
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @section DESCRIPTION
*
*
*/
#include "SGCore/SGDevice.h"
#include "Engine/Engine.h"
#include "SGCore/SGBetaDevice.h"
#include "SGCore/SGHapticGlove.h"
#include "SGCore/SGNovaGlove.h"
#include "SGCore/SGNova2Glove.h"
#include "SGCore/SGSenseGlove.h"
#include "SGCoreImpl/SGBetaDeviceImpl.h"
#include "SGCoreImpl/SGDeviceImpl.h"
#include "SGCoreImpl/SGExportedFunctions.h"
#include "SGInterop/SGIC_ESGConnectionType.h"
#include "SGInterop/SGIC_ESGDeviceType.h"
#include "SGInterop/SGIC_ESGHapticChannelType.h"
#include "SGInterop/SGIC_FSGBetaDeviceImpl.h"
#include "SGInterop/SGIC_FSGDeviceImpl.h"
#include "SGInterop/SGIC_FSGHapticChannelInfoImpl.h"
#include "SGInterop/SGIC_FSGHapticGloveImpl.h"
#include "SGInterop/SGIC_FSGNova2GloveImpl.h"
#include "SGInterop/SGIC_FSGNovaGloveImpl.h"
#include "SGInterop/SGIC_FSGSenseGloveImpl.h"
#include "SGInterop/SGIC_FString.h"
#include "SGInterop/SGIC_TSharedPtr_FSGBetaDeviceImpl.h"
#include "SGInterop/SGIC_TSharedPtr_FSGDeviceImpl.h"
#include "SGInterop/SGIC_TSharedPtr_FSGHapticGloveImpl.h"
#include "SGInterop/SGIC_TSharedPtr_FSGNova2GloveImpl.h"
#include "SGInterop/SGIC_TSharedPtr_FSGNovaGloveImpl.h"
#include "SGInterop/SGIC_TSharedPtr_FSGSenseGloveImpl.h"
struct USGDevice::FImpl
{
/************************
* Member variables
************************/
TSharedPtr<FSGDeviceImpl> SGDeviceImpl;
/************************
* Owner object
************************/
USGDevice* Owner;
/************************
* Constructor / Destructor
************************/
explicit FImpl(USGDevice* InOwner);
~FImpl();
/************************
* Default copy constructor & copy assignment operator
************************/
FImpl(const FImpl& Rhs) = default;
FImpl& operator=(const FImpl& Rhs) = default;
};
void USGDevice::ParseFirmware(const FString& RawFirmware, int32& OutMainVersion, int32& OutSubVersion)
{
FSGIC_FString RawFirmwareContainer{RawFirmware};
SGCoreImpl_FSGDeviceImpl_ParseFirmware(&RawFirmwareContainer, &OutMainVersion, &OutSubVersion);
}
bool USGDevice::FirmwareNewerThan(
const int32 MyFirmwareMain, const int32 MyFirmwareSub, const int32 ReferenceMain, const int32 ReferenceSub,
const bool bInclusive)
{
return
SGCoreImpl_FSGDeviceImpl_FirmwareNewerThan_MyFirmwareMain_MyFirmwareSub_ReferenceMain_ReferenceSub_bInclusive(
MyFirmwareMain, MyFirmwareSub, ReferenceMain, ReferenceSub, bInclusive);
}
bool USGDevice::FirmwareOlderThan(
const int32 MyFirmwareMain, const int32 MyFirmwareSub, const int32 ReferenceMain, const int32 ReferenceSub,
const bool bInclusive)
{
return
SGCoreImpl_FSGDeviceImpl_FirmwareOlderThan_MyFirmwareMain_MyFirmwareSub_ReferenceMain_ReferenceSub_bInclusive(
MyFirmwareMain, MyFirmwareSub, ReferenceMain, ReferenceSub, bInclusive);
}
FString USGDevice::ToString(const ESGDeviceType DeviceType)
{
FSGIC_ESGDeviceType DeviceTypeContainer{DeviceType};
FSGIC_FString OutString;
SGCoreImpl_FSGDeviceImpl_ToString(&DeviceTypeContainer, &OutString);
return MoveTemp(OutString.String);
}
USGDevice::USGDevice()
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
FSGIC_TSharedPtr_FSGDeviceImpl OutSharedPtrContainer;
SGCoreImpl_FSGDeviceImpl_ctor_MakeShared(&OutSharedPtrContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
USGDevice::USGDevice(const FSGDeviceImpl& SGDeviceImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
FSGIC_TSharedPtr_FSGDeviceImpl OutSharedPtrContainer;
FSGIC_FSGDeviceImpl RhsContainer{SGDeviceImpl};
SGCoreImpl_FSGDeviceImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
USGDevice::USGDevice(const FSGBetaDeviceImpl& BetaDeviceImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
FSGIC_TSharedPtr_FSGBetaDeviceImpl OutSharedPtrContainer;
FSGIC_FSGBetaDeviceImpl RhsContainer{BetaDeviceImpl};
SGCoreImpl_FSGBetaDeviceImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
USGDevice::USGDevice(const FSGHapticGloveImpl& HapticGloveImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
FSGIC_TSharedPtr_FSGHapticGloveImpl OutSharedPtrContainer;
FSGIC_FSGHapticGloveImpl RhsContainer{HapticGloveImpl};
SGCoreImpl_FSGHapticGloveImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
USGDevice::USGDevice(const FSGNova2GloveImpl& Nova2GloveImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
FSGIC_TSharedPtr_FSGNova2GloveImpl OutSharedPtrContainer;
FSGIC_FSGNova2GloveImpl RhsContainer{Nova2GloveImpl};
SGCoreImpl_FSGNova2GloveImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
USGDevice::USGDevice(const FSGNovaGloveImpl& NovaGloveImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtrContainer;
FSGIC_FSGNovaGloveImpl RhsContainer{NovaGloveImpl};
SGCoreImpl_FSGNovaGloveImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
USGDevice::USGDevice(const FSGSenseGloveImpl& SenseGloveImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
FSGIC_TSharedPtr_FSGSenseGloveImpl OutSharedPtrContainer;
FSGIC_FSGSenseGloveImpl RhsContainer{SenseGloveImpl};
SGCoreImpl_FSGSenseGloveImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
USGDevice::USGDevice(TSharedRef<FSGDeviceImpl> SGDeviceImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
Pimpl->SGDeviceImpl = MoveTemp(SGDeviceImpl);
}
USGDevice::USGDevice(TSharedRef<FSGBetaDeviceImpl> BetaDeviceImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
Pimpl->SGDeviceImpl = MoveTemp(BetaDeviceImpl);
}
USGDevice::USGDevice(TSharedRef<FSGHapticGloveImpl> HapticGloveImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
Pimpl->SGDeviceImpl = MoveTemp(HapticGloveImpl);
}
USGDevice::USGDevice(TSharedRef<FSGNova2GloveImpl> Nova2GloveImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
Pimpl->SGDeviceImpl = MoveTemp(Nova2GloveImpl);
}
USGDevice::USGDevice(TSharedRef<FSGNovaGloveImpl> NovaGloveImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
Pimpl->SGDeviceImpl = MoveTemp(NovaGloveImpl);
}
USGDevice::USGDevice(TSharedRef<FSGSenseGloveImpl> SenseGloveImpl)
: Pimpl(TUniquePtr<FImpl, FImplDeleter>(new FImpl{this}, PimplDeleter))
{
Pimpl->SGDeviceImpl = MoveTemp(SenseGloveImpl);
}
USGDevice::~USGDevice() = default;
void USGDevice::SetSGDeviceImpl(const FSGDeviceImpl& SGDeviceImpl)
{
FSGIC_TSharedPtr_FSGDeviceImpl OutSharedPtrContainer;
FSGIC_FSGDeviceImpl RhsContainer{SGDeviceImpl};
SGCoreImpl_FSGDeviceImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
void USGDevice::SetSGDeviceImpl(const FSGBetaDeviceImpl& BetaDeviceImpl)
{
FSGIC_TSharedPtr_FSGBetaDeviceImpl OutSharedPtrContainer;
FSGIC_FSGBetaDeviceImpl RhsContainer{BetaDeviceImpl};
SGCoreImpl_FSGBetaDeviceImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
void USGDevice::SetSGDeviceImpl(const FSGHapticGloveImpl& HapticGloveImpl)
{
FSGIC_TSharedPtr_FSGHapticGloveImpl OutSharedPtrContainer;
FSGIC_FSGHapticGloveImpl RhsContainer{HapticGloveImpl};
SGCoreImpl_FSGHapticGloveImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
void USGDevice::SetSGDeviceImpl(const FSGNova2GloveImpl& Nova2GloveImpl)
{
FSGIC_TSharedPtr_FSGNova2GloveImpl OutSharedPtrContainer;
FSGIC_FSGNova2GloveImpl RhsContainer{Nova2GloveImpl};
SGCoreImpl_FSGNovaGloveImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
void USGDevice::SetSGDeviceImpl(const FSGNovaGloveImpl& NovaGloveImpl)
{
FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtrContainer;
FSGIC_FSGNovaGloveImpl RhsContainer{NovaGloveImpl};
SGCoreImpl_FSGNovaGloveImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
void USGDevice::SetSGDeviceImpl(const FSGSenseGloveImpl& SenseGloveImpl)
{
FSGIC_TSharedPtr_FSGSenseGloveImpl OutSharedPtrContainer;
FSGIC_FSGSenseGloveImpl RhsContainer{SenseGloveImpl};
SGCoreImpl_FSGSenseGloveImpl_ctor_copy_MakeShared(&OutSharedPtrContainer, &RhsContainer);
Pimpl->SGDeviceImpl = MoveTemp(OutSharedPtrContainer.Ptr);
}
void USGDevice::SetSGDeviceImpl(TSharedRef<FSGDeviceImpl> SGDeviceImpl)
{
Pimpl->SGDeviceImpl = MoveTemp(SGDeviceImpl);
}
void USGDevice::SetSGDeviceImpl(TSharedRef<FSGBetaDeviceImpl> BetaDeviceImpl)
{
Pimpl->SGDeviceImpl = MoveTemp(BetaDeviceImpl);
}
void USGDevice::SetSGDeviceImpl(TSharedRef<FSGHapticGloveImpl> HapticGloveImpl)
{
Pimpl->SGDeviceImpl = MoveTemp(HapticGloveImpl);
}
void USGDevice::SetSGDeviceImpl(TSharedRef<FSGNova2GloveImpl> Nova2GloveImpl)
{
Pimpl->SGDeviceImpl = MoveTemp(Nova2GloveImpl);
}
void USGDevice::SetSGDeviceImpl(TSharedRef<FSGNovaGloveImpl> NovaGloveImpl)
{
Pimpl->SGDeviceImpl = MoveTemp(NovaGloveImpl);
}
void USGDevice::SetSGDeviceImpl(TSharedRef<FSGSenseGloveImpl> SenseGloveImpl)
{
Pimpl->SGDeviceImpl = MoveTemp(SenseGloveImpl);
}
TSharedRef<FSGDeviceImpl> USGDevice::ToSGDeviceImpl() const
{
return Pimpl->SGDeviceImpl.ToSharedRef();
}
bool USGDevice::IsABetaDevice() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsABetaDevice(&InstanceContainer);
}
bool USGDevice::IsAHapticGlove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsAHapticGlove(&InstanceContainer);
}
bool USGDevice::IsANova2Glove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsANova2Glove(&InstanceContainer);
}
bool USGDevice::IsANovaGlove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsANovaGlove(&InstanceContainer);
}
bool USGDevice::IsASenseGlove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsASenseGlove(&InstanceContainer);
}
USGBetaDevice* USGDevice::AsBetaDevice(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGBetaDeviceImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToBetaDeviceImplRef(&InstanceContainer, &OutSharedPtr);
USGBetaDevice* BetaDevice = NewObject<USGBetaDevice>(Outer);
BetaDevice->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return BetaDevice;
}
USGHapticGlove* USGDevice::AsHapticGlove(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGHapticGloveImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToHapticGloveImplRef(&InstanceContainer, &OutSharedPtr);
USGHapticGlove* HapticGlove = NewObject<USGHapticGlove>(Outer);
HapticGlove->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return HapticGlove;
}
USGNova2Glove* USGDevice::AsNova2Glove(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGNova2GloveImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToNova2GloveImplRef(&InstanceContainer, &OutSharedPtr);
USGNova2Glove* Nova2Glove = NewObject<USGNova2Glove>(Outer);
Nova2Glove->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return Nova2Glove;
}
USGNovaGlove* USGDevice::AsNovaGlove(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToNovaGloveImplRef(&InstanceContainer, &OutSharedPtr);
USGNovaGlove* NovaGlove = NewObject<USGNovaGlove>(Outer);
NovaGlove->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return NovaGlove;
}
USGSenseGlove* USGDevice::AsSenseGlove(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGSenseGloveImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToSenseGloveImplRef(&InstanceContainer, &OutSharedPtr);
USGSenseGlove* SenseGlove = NewObject<USGSenseGlove>(Outer);
SenseGlove->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return SenseGlove;
}
ESGDeviceType USGDevice::GetDeviceType() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_ESGDeviceType OutTypeContainer;
SGCoreImpl_FSGDeviceImpl_GetDeviceType(&InstanceContainer, &OutTypeContainer);
return OutTypeContainer.Type;
}
int32 USGDevice::GetSubFirmwareVersion() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_GetSubFirmwareVersion(&InstanceContainer);
}
FString USGDevice::GetFirmwareString() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_FString OutStringContainer;
SGCoreImpl_FSGDeviceImpl_GetFirmwareString(&InstanceContainer, &OutStringContainer);
return MoveTemp(OutStringContainer.String);
}
bool USGDevice::FirmwareNewerThan(int32 FirmwareMain, int32 FirmwareSub, bool bInclusive) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_FirmwareNewerThan_MyFirmwareMain_MyFirmwareSub_bInclusive(
&InstanceContainer, FirmwareMain, FirmwareSub, bInclusive);
}
bool USGDevice::FirmwareOlderThan(int32 FirmwareMain, int32 FirmwareSub, bool bInclusive) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_FirmwareOlderThan_MyFirmwareMain_MyFirmwareSub_bInclusive(
&InstanceContainer, FirmwareMain, FirmwareSub, bInclusive);
}
FString USGDevice::GetAddress() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_FString AddressContainer;
SGCoreImpl_FSGDeviceImpl_GetAddress(&InstanceContainer, &AddressContainer);
return AddressContainer.String;
}
bool USGDevice::IsConnected() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsConnected(&InstanceContainer);
}
ESGConnectionType USGDevice::GetConnectionType() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_ESGConnectionType OutTypeContainer;
SGCoreImpl_FSGDeviceImpl_GetConnectionType(&InstanceContainer, &OutTypeContainer);
return OutTypeContainer.Type;
}
int32 USGDevice::PacketsPerSecondReceived() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_PacketsPerSecondReceived(&InstanceContainer);
}
int32 USGDevice::PacketsPerSecondSent() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_PacketsPerSecondSent(&InstanceContainer);
}
int32 USGDevice::GetDeviceIndex() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_GetDeviceIndex(&InstanceContainer);
}
void USGDevice::SetDeviceIndex(const int32 NewIndex)
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
SGCoreImpl_FSGDeviceImpl_SetDeviceIndex(&InstanceContainer, NewIndex);
}
bool USGDevice::IsWireless() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsWireless(&InstanceContainer);
}
bool USGDevice::HasBattery() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_HasBattery(&InstanceContainer);
}
bool USGDevice::IsCharging()
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
const bool bResult = SGCoreImpl_FSGDeviceImpl_IsCharging(&InstanceContainer);
return bResult;
}
bool USGDevice::GetBatteryLevel(float& OutLevel)
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
const bool bResult = SGCoreImpl_FSGDeviceImpl_GetBatteryLevel(&InstanceContainer, &OutLevel);
return bResult;
}
void USGDevice::SetHapticChannels(const USGHapticChannelInfo* Channels)
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_FSGHapticChannelInfoImpl ChannelsContainer{Channels->ToHapticChannelInfoImpl()};
SGCoreImpl_FSGDeviceImpl_SetHapticChannels(&InstanceContainer, &ChannelsContainer);
}
int32 USGDevice::GetHapticChannelCount() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_GetHapticChannelCount(&InstanceContainer);
}
int32 USGDevice::GetHapticChannelCount(ESGHapticChannelType ChannelType) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_ESGHapticChannelType ChannelTypeContainer{ChannelType};
return SGCoreImpl_FSGDeviceImpl_GetHapticChannelCount_ChannelType(&InstanceContainer, &ChannelTypeContainer);
}
FString USGDevice::ToString() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_FString OutStringContainer;
SGCoreImpl_FSGDeviceImpl_ToString(&InstanceContainer, &OutStringContainer);
return MoveTemp(OutStringContainer.String);
}
USGDevice::FImpl::FImpl(USGDevice* InOwner)
: Owner(InOwner)
{
}
USGDevice::FImpl::~FImpl() = default;
void USGDevice::FImplDeleter::operator()(const FImpl* P) const
{
delete P;
}