#pragma once #include "COM/Com_Def.h" #include "DRI/Dri_Cdc.h" #include "DRI/Dri_Nus.h" #include "LOGIC/Lgc_Func_Button.h" #include #include #include #include #include struct Lgc_Core_Struct_State { Dri_Nus_Struct_Port DriNusPort; Dri_Cdc_Struct_Port DriCdcPort; Com_Struct_DeviceConfig DeviceConfig; QString TextFunctionStatus; bool IsVisibleKeyStateValid = false; QVector VisibleUsageList; bool IsPhysicalKeyStateValid = false; QVector PhysicalUsageList; QVector LastPhysicalUsageList; bool IsSystemNumLockOn = false; QByteArray FunctionMaskBitmap; QByteArray KeyboardMaskBitmap; bool IsUsbProtocolReady = false; bool IsNusProtocolReady = false; bool IsUsbHelloSent = false; bool IsNusHelloSent = false; qint64 LastUsbHelloAttemptMs = 0; qint64 LastNusHelloAttemptMs = 0; qint64 NusReadySinceMs = 0; int NusHelloRetryCount = 0; bool WasNusConnectedLastPoll = false; bool HasLoggedNusWriteAck = false; bool HasLoggedNusHelloTimeout = false; qint64 LastCdcRefreshAttemptMs = 0; qint64 LastNusRefreshAttemptMs = 0; Com_Struct_ProtocolHelloRsp HelloResponse; quint32 DeviceLedMask = 0; quint32 LastAckedType = 0; quint32 LastErrorType = 0; quint32 LastErrorCode = 0; quint64 PendingUsbCommandBits = 0; qint64 PendingUsbCommandSinceMs = 0; quint64 PendingNusCommandBits = 0; qint64 PendingNusCommandSinceMs = 0; bool DeviceReady = false; bool BitmapSent = false; bool BitmapDirty = false; int BitmapRetryCount = 0; qint64 BitmapNextSendMs = 0; Lgc_FunctionButton_Config FunctionButtonConfig; bool IsAltThemeEnabled = false; void* WindowHandle = nullptr; bool IsConnected = false; bool IsStarted = false; bool IsFunctionSequenceRecording = false; QSet UiPressedUsageSet; int TestTxHelloReqCount = 0; int TestTxBitmapCount = 0; int TestTxTimeSyncCount = 0; int TestTxThemeRgbCount = 0; int TestRxHelloRspCount = 0; int TestRxFunctionKeyEventCount = 0; int TestRxLedStateCount = 0; int TestRxAckCount = 0; int TestRxErrorCount = 0; QString TestLastTxSummary; QString TestLastRxSummary; QByteArray TestLastTxBytes; QByteArray TestLastRxBytes; QByteArray TestLastFunctionEventBitmap; QStringList TestLogLines; QString LastLoggedNusEndpointSummary; }; struct Lgc_Core_Struct_View { QString TextFunctionStatus; bool IsConnected = false; bool HasOpenTransport = false; bool IsSystemNumLockOn = false; bool IsVisibleKeyStateValid = false; QVector VisibleUsageList; bool IsPhysicalKeyStateValid = false; QVector PhysicalUsageList; bool IsFunctionSequenceRecording = false; }; struct Lgc_Core_Struct_TestView { QString StatusText; QString UsbPortName; QString NusEndpointSummary; bool IsUsbOpened = false; bool IsNusOpened = false; bool IsNusConnected = false; bool IsUsbProtocolReady = false; bool IsNusProtocolReady = false; bool DeviceReady = false; quint32 HelloProtocolVersion = 0; quint32 HelloVendorId = 0; quint32 HelloProductId = 0; quint32 HelloFirmwareMajor = 0; quint32 HelloFirmwareMinor = 0; quint32 HelloCapabilityFlags = 0; quint32 DeviceLedMask = 0; quint32 LastAckedType = 0; quint32 LastErrorType = 0; quint32 LastErrorCode = 0; quint64 PendingUsbCommandBits = 0; quint64 PendingNusCommandBits = 0; QString LastTxSummary; QString LastRxSummary; QString LastTxHex; QString LastRxHex; QString FunctionMaskHex; QString LastFunctionEventHex; int TxHelloReqCount = 0; int TxBitmapCount = 0; int TxTimeSyncCount = 0; int TxThemeRgbCount = 0; int RxHelloRspCount = 0; int RxFunctionKeyEventCount = 0; int RxLedStateCount = 0; int RxAckCount = 0; int RxErrorCount = 0; QString LogText; }; void Lgc_Core_Init(Lgc_Core_Struct_State* p_State); void Lgc_Core_SetWindowHandle(Lgc_Core_Struct_State* p_State, void* WindowHandle); void Lgc_Core_HandleNativeMessage(Lgc_Core_Struct_State* p_State, void* p_Message); void Lgc_Core_Start(Lgc_Core_Struct_State* p_State); void Lgc_Core_Close(Lgc_Core_Struct_State* p_State); void Lgc_Core_RefreshDevice(Lgc_Core_Struct_State* p_State); bool Lgc_Core_Poll(Lgc_Core_Struct_State* p_State); Lgc_Core_Struct_View Lgc_Core_GetView(const Lgc_Core_Struct_State* p_State); void Lgc_Core_SetStatusText(Lgc_Core_Struct_State* p_State, const QString& TextStatus); QVector Lgc_Core_GetFeatureIdList(const Lgc_Core_Struct_State* p_State); Lgc_FunctionFeature_Definition Lgc_Core_GetFeature( const Lgc_Core_Struct_State* p_State, int FeatureId); bool Lgc_Core_HasFeature(const Lgc_Core_Struct_State* p_State, int FeatureId); QString Lgc_Core_GetUsageShortText(quint16 Usage); QString Lgc_Core_GetFeatureTypeText(Lgc_FunctionFeature_Type Type); QString Lgc_Core_GetFeatureNameById(const Lgc_Core_Struct_State* p_State, int FeatureId); QString Lgc_Core_GetFeatureDescriptionById( const Lgc_Core_Struct_State* p_State, int FeatureId); QString Lgc_Core_GetFeatureBindingSummary( const Lgc_Core_Struct_State* p_State, int FeatureId); int Lgc_Core_GetUsageFeatureId(const Lgc_Core_Struct_State* p_State, quint16 Usage); bool Lgc_Core_HasUsageFeature(const Lgc_Core_Struct_State* p_State, quint16 Usage); bool Lgc_Core_LoadFunctionConfig(Lgc_Core_Struct_State* p_State); bool Lgc_Core_SaveFunctionConfig(Lgc_Core_Struct_State* p_State); int Lgc_Core_AddFeature(Lgc_Core_Struct_State* p_State); bool Lgc_Core_UpdateFeature( Lgc_Core_Struct_State* p_State, const Lgc_FunctionFeature_Definition& Feature); bool Lgc_Core_DeleteFeature(Lgc_Core_Struct_State* p_State, int FeatureId); bool Lgc_Core_BindUsageToFeature( Lgc_Core_Struct_State* p_State, quint16 Usage, int FeatureId); bool Lgc_Core_BeginSequenceRecording(Lgc_Core_Struct_State* p_State, int FeatureId); void Lgc_Core_EndSequenceRecording(Lgc_Core_Struct_State* p_State); void Lgc_Core_UpdateSequenceRecordingStatus( Lgc_Core_Struct_State* p_State, const QString& SequenceText); void Lgc_Core_HandleUiKeyPress(Lgc_Core_Struct_State* p_State, quint16 Usage); void Lgc_Core_HandleUiKeyRelease(Lgc_Core_Struct_State* p_State, quint16 Usage); bool Lgc_Core_ApplyFunctionConfig(Lgc_Core_Struct_State* p_State); bool Lgc_Core_TestSendHello( Lgc_Core_Struct_State* p_State, Com_Enum_RawPacketSource TargetSource = Com_Enum_RawPacketSource_None); bool Lgc_Core_TestSendBitmapCurrentConfig( Lgc_Core_Struct_State* p_State, Com_Enum_RawPacketSource TargetSource = Com_Enum_RawPacketSource_None); bool Lgc_Core_TestSendBitmapAllEnabled( Lgc_Core_Struct_State* p_State, Com_Enum_RawPacketSource TargetSource = Com_Enum_RawPacketSource_None); bool Lgc_Core_TestSendBitmapAllDisabled( Lgc_Core_Struct_State* p_State, Com_Enum_RawPacketSource TargetSource = Com_Enum_RawPacketSource_None); bool Lgc_Core_TestSendTimeSync( Lgc_Core_Struct_State* p_State, Com_Enum_RawPacketSource TargetSource = Com_Enum_RawPacketSource_None); bool Lgc_Core_SendTimeSync(Lgc_Core_Struct_State* p_State); bool Lgc_Core_SendThemeRgb( Lgc_Core_Struct_State* p_State, quint8 Red, quint8 Green, quint8 Blue); bool Lgc_Core_TestSendThemeRgb( Lgc_Core_Struct_State* p_State, quint8 Red, quint8 Green, quint8 Blue, Com_Enum_RawPacketSource TargetSource = Com_Enum_RawPacketSource_None); bool Lgc_Core_SendThemeSwitch(Lgc_Core_Struct_State* p_State); void Lgc_Core_ClearTestLog(Lgc_Core_Struct_State* p_State); Lgc_Core_Struct_TestView Lgc_Core_GetTestView(const Lgc_Core_Struct_State* p_State);