SkyPortal-plugin/Source/SkyPortal/Public/SkyPortalSubsystem.h

82 lines
1.7 KiB
C
Raw Normal View History

2024-09-18 13:30:30 +00:00
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/EngineSubsystem.h"
2024-09-19 12:03:16 +00:00
#include "hidapi.h"
2024-09-18 13:30:30 +00:00
#include "SkyPortalSubsystem.generated.h"
2024-09-19 12:03:16 +00:00
/* Macro Definitions */
#define rw_buf_size 0x21
#define TIMEOUT 30000
#define DEBUG true
DECLARE_LOG_CATEGORY_EXTERN(LogHIDApi, Log, All);
DECLARE_LOG_CATEGORY_EXTERN(LogSkyportalIO, Log, All);
/* Subsystem */
2024-09-18 13:30:30 +00:00
UCLASS()
class SKYPORTAL_API USkyPortalSubsystem : public UEngineSubsystem
{
GENERATED_BODY()
public:
// Override initialization and deinitialization methods
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
virtual void Deinitialize() override;
2024-09-19 12:03:16 +00:00
// Connect to Portal, return false if portal is not found
UFUNCTION(BlueprintCallable, CallInEditor, meta = (Category = "SkyPortal"))
2024-09-19 12:03:16 +00:00
bool ConnectPortal();
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
bool bPortalConnected = false;
2024-09-19 12:03:16 +00:00
FString HidError;
UFUNCTION(BlueprintCallable, CallInEditor, meta = (AutoCreateRefTerm = "Color", Category = "SkyPortal"))
void ChangePortalColor(const FLinearColor& Color = FLinearColor::Green);
2024-09-19 12:03:16 +00:00
private:
//Portal ref used in the subsystem
hid_device* PortalDevice;
typedef struct {
unsigned char buf[rw_buf_size]; int BytesTransferred;
} RWBlock;
static void Sleep(int sleepMs);
// Block/byte related data write/read functions
bool ReadBlock(unsigned int block, unsigned char data[0x10], int skylander);
bool WriteBlock(unsigned int, unsigned char[0x10], int);
bool CheckResponse(RWBlock* res, char expect);
void Write(RWBlock* pb);
2024-09-19 12:03:16 +00:00
protected:
//Constants
const int VendorIds[4] = { 0x12ba, 0x54c, 0x1430, 0x1430 };
const int ProductIds[4] = { 0x150, 0x967, 0x1f17 };
/////Defaults values, should not be used
//const int VendorId = 5168;
//const int ProductId = 336;
2024-09-18 13:30:30 +00:00
};
2024-09-19 12:03:16 +00:00