Skip to content

Commit

Permalink
Added chroma link passthrough support (only works with razer peripher…
Browse files Browse the repository at this point in the history
…als.)

This additionally fixes the CChromaEditorLibrary and should help support a few more games.
  • Loading branch information
MartB committed Jul 28, 2018
1 parent 3e66742 commit 07581c2
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 14 deletions.
5 changes: 3 additions & 2 deletions rpc-midl/rpc_retc.idl
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ midl_pragma warning(disable: 2111)
import "oaidl.idl";

[
uuid(f14b48fb-efd2-471e-917c-ae24f26a3ec7),
version(2.3)
uuid(4b0af0e2-325a-4305-af21-1a611e55a196),
version(2.4)
]

interface rpc_retc
Expand All @@ -24,6 +24,7 @@ interface rpc_retc
HEADSET,
MOUSEPAD,
KEYPAD,
SYSTEM,
ALL,
ESIZE, // If you get that as type its invalid, goes always last!
} RETCDeviceType;
Expand Down
3 changes: 3 additions & 0 deletions server-exe/CorsairSDK.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ RZRESULT CorsairSDK::playEffect(RETCDeviceType deviceType, int effectType, const
case KEYPAD:
res = RZRESULT_NOT_SUPPORTED;
break;
case SYSTEM: // Chroma link not supported...
res = RZRESULT_NOT_SUPPORTED;
break;
default:
res = RZRESULT_INVALID;
break;
Expand Down
2 changes: 1 addition & 1 deletion server-exe/LightingSDK.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class LightingSDK {
}

if (!sdkLoader->load(m_dllInstance, SDK_DLL, DLL_FUNCTION_LIST)) {
LOG_E(L"{0} failed to load.", SDK_NAME);
LOG_E(L"{0} failed to load, please check if an update is available.", SDK_NAME);
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion server-exe/RPCReceiver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ bool RPCReceiver::startListening() {
return false;
}

m_RpcStatus = RpcServerRegisterIf2(rpc_retc_v2_3_s_ifspec, nullptr, nullptr, RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH, RPC_C_LISTEN_MAX_CALLS_DEFAULT, static_cast<unsigned>(-1), nullptr);
m_RpcStatus = RpcServerRegisterIf2(rpc_retc_v2_4_s_ifspec, nullptr, nullptr, RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH, RPC_C_LISTEN_MAX_CALLS_DEFAULT, static_cast<unsigned>(-1), nullptr);

if (!STATUS_OK) {
return false;
Expand Down
6 changes: 6 additions & 0 deletions server-exe/RazerSDK.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ RazerSDK::RazerSDK() {
{"CreateHeadsetEffect", nullptr},
{"CreateMousepadEffect", nullptr},
{"CreateKeypadEffect", nullptr},
{"CreateChromaLinkEffect", nullptr},
{"SetEffect", nullptr},
{"DeleteEffect", nullptr},
{"QueryDevice", nullptr}
Expand All @@ -45,6 +46,7 @@ bool RazerSDK::initialize() {
SDKLoaderMapNameToFunction(CreateHeadsetEffect);
SDKLoaderMapNameToFunction(CreateMousepadEffect);
SDKLoaderMapNameToFunction(CreateKeypadEffect);
SDKLoaderMapNameToFunction(CreateChromaLinkEffect);
SDKLoaderMapNameToFunction(SetEffect);
SDKLoaderMapNameToFunction(DeleteEffect);
SDKLoaderMapNameToFunction(QueryDevice);
Expand Down Expand Up @@ -107,6 +109,9 @@ RZRESULT RazerSDK::playEffect(RETCDeviceType device, int type, const char data[]
case KEYPAD:
res = CreateKeypadEffect(static_cast<Keypad::EFFECT_TYPE>(type), PRZPARAM(data), nullptr);
break;
case SYSTEM:
res = CreateChromaLinkEffect(static_cast<ChromaLink::EFFECT_TYPE>(type), PRZPARAM(data), nullptr);
break;
default:
res = RZRESULT_INVALID;
break;
Expand Down Expand Up @@ -134,6 +139,7 @@ RZRESULT RazerSDK::playEffect(RETCDeviceType device, int type, const char data[]
case DEVICE_INFO_TYPE::DEVICE_KEYPAD:
return KEYPAD;
case DEVICE_INFO_TYPE::DEVICE_SYSTEM:
return SYSTEM;
case DEVICE_INFO_TYPE::DEVICE_INVALID:
return ESIZE;
default:
Expand Down
4 changes: 3 additions & 1 deletion server-exe/RazerSDK.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ class RazerSDK : public LightingSDK {
typedef RZRESULT (*CreateHeadsetEffect_t)(Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT (*CreateMousepadEffect_t)(Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT (*CreateKeypadEffect_t)(Keypad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
typedef RZRESULT (*CreateChromaLinkEffect_t)(ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);

typedef RZRESULT (*SetEffect_t)(RZEFFECTID EffectId);
typedef RZRESULT (*DeleteEffect_t)(RZEFFECTID EffectId);
typedef RZRESULT (*QueryDevice_t)(RZDEVICEID EffectId, DEVICE_INFO_TYPE& DeviceInfo);
Expand All @@ -31,8 +33,8 @@ class RazerSDK : public LightingSDK {
SDKLoaderAssignNameToVariable(CreateHeadsetEffect)
SDKLoaderAssignNameToVariable(CreateMousepadEffect)
SDKLoaderAssignNameToVariable(CreateKeypadEffect)
SDKLoaderAssignNameToVariable(CreateChromaLinkEffect)
SDKLoaderAssignNameToVariable(SetEffect)
SDKLoaderAssignNameToVariable(DeleteEffect)
SDKLoaderAssignNameToVariable(QueryDevice)

};
2 changes: 1 addition & 1 deletion server-exe/SDKLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ bool SDKLoader::load(HINSTANCE& inst, const std::string& dllName, functionList&
const char * funcPtrName = func.first.c_str();
void* fptr = GetProcAddress(inst, funcPtrName);
if (!fptr) {
LOG_E("FunctionPtr {0} {1}", dllName, funcPtrName);
LOG_E("Could not find required method {0}, please check {1}.", funcPtrName, dllName);
FreeLibrary(inst);
return false;
}
Expand Down
17 changes: 12 additions & 5 deletions server-exe/commonData.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ namespace LookupArrays {
{Mouse::CHROMA_NONE, Mouse::CHROMA_WAVE, Mouse::CHROMA_SPECTRUMCYCLING, Mouse::CHROMA_BREATHING, Mouse::CHROMA_BLINKING, Mouse::CHROMA_REACTIVE, Mouse::CHROMA_STATIC, Mouse::CHROMA_CUSTOM2},
{Headset::CHROMA_NONE, -1, Headset::CHROMA_SPECTRUMCYCLING, Headset::CHROMA_BREATHING, -1, -1, Headset::CHROMA_STATIC, Headset::CHROMA_CUSTOM}, // Headset
{Mousepad::CHROMA_NONE, Mousepad::CHROMA_WAVE, Mousepad::CHROMA_SPECTRUMCYCLING, Mousepad::CHROMA_BREATHING, -1, -1, Mousepad::CHROMA_STATIC, Mousepad::CHROMA_CUSTOM}, // Mousepad
{Keypad::CHROMA_NONE, Keypad::CHROMA_WAVE, Keypad::CHROMA_SPECTRUMCYCLING, Keypad::CHROMA_BREATHING, -1, Keypad::CHROMA_REACTIVE, Keypad::CHROMA_STATIC, Keypad::CHROMA_CUSTOM} // Keypad
{Keypad::CHROMA_NONE, Keypad::CHROMA_WAVE, Keypad::CHROMA_SPECTRUMCYCLING, Keypad::CHROMA_BREATHING, -1, Keypad::CHROMA_REACTIVE, Keypad::CHROMA_STATIC, Keypad::CHROMA_CUSTOM}, // Keypad
{ChromaLink::CHROMA_NONE, -1, -1, -1, -1, -1, ChromaLink::CHROMA_STATIC, ChromaLink::CHROMA_CUSTOM } // System leds aka chroma link
};

static const efsize_t effectSize[ESIZE][CHROMA_RESERVED] = {
Expand All @@ -23,6 +24,7 @@ namespace LookupArrays {
{sizeof(Headset::STATIC_EFFECT_TYPE), sizeof(Headset::BREATHING_EFFECT_TYPE), sizeof(SPECTRUMCYCLING_EFFECT_TYPE), sizeof(Headset::CUSTOM_EFFECT_TYPE), 0, 0, 0, 0},
{sizeof(Mousepad::BREATHING_EFFECT_TYPE), sizeof(Mousepad::CUSTOM_EFFECT_TYPE), sizeof(SPECTRUMCYCLING_EFFECT_TYPE), sizeof(Mousepad::STATIC_EFFECT_TYPE), sizeof(Mousepad::WAVE_EFFECT_TYPE), 0, 0, 0},
{sizeof(Keypad::BREATHING_EFFECT_TYPE), sizeof(Keypad::CUSTOM_EFFECT_TYPE), sizeof(Keypad::REACTIVE_EFFECT_TYPE), sizeof(SPECTRUMCYCLING_EFFECT_TYPE), sizeof(Keypad::STATIC_EFFECT_TYPE), sizeof(Keypad::WAVE_EFFECT_TYPE), 0, 0},
{sizeof(ChromaLink::CUSTOM_EFFECT_TYPE), sizeof(ChromaLink::STATIC_EFFECT_TYPE), 0, 0, 0, 0, 0, 0},
{sizeof(WAVE_EFFECT_TYPE), sizeof(SPECTRUMCYCLING_EFFECT_TYPE), sizeof(BREATHING_EFFECT_TYPE), sizeof(BLINKING_EFFECT_TYPE), sizeof(REACTIVE_EFFECT_TYPE), sizeof(STATIC_EFFECT_TYPE), sizeof(CUSTOM_EFFECT_TYPE), 0}
};

Expand All @@ -38,12 +40,14 @@ namespace LookupArrays {
// Mousepads
FIREFLY_CHROMA,
// Keypads
TARTARUS_CHROMA , ORBWEAVER_CHROMA
TARTARUS_CHROMA , ORBWEAVER_CHROMA,
// Systems
LENOVO_Y900, LENOVO_Y27, CORE_CHROMA
};

// Emulated device related values
static const wchar_t* EM_KEYS[] = { L"EM_KEYBOARD", L"EM_MOUSE", L"EM_HEADSET", L"EM_MOUSEPAD", L"EM_KEYPAD" };
static const wchar_t* EM_VALS[] = { L"BLACKWIDOW_CHROMA", L"MAMBA_CHROMA", L"KRAKEN71_CHROMA", L"FIREFLY_CHROMA", L"ORBWEAVER_CHROMA" };
static const wchar_t* EM_KEYS[] = { L"EM_KEYBOARD", L"EM_MOUSE", L"EM_HEADSET", L"EM_MOUSEPAD", L"EM_KEYPAD", L"EM_SYSTEM" };
static const wchar_t* EM_VALS[] = { L"BLACKWIDOW_CHROMA", L"MAMBA_CHROMA", L"KRAKEN71_CHROMA", L"FIREFLY_CHROMA", L"ORBWEAVER_CHROMA", L"LENOVO_Y900"};

}

Expand Down Expand Up @@ -76,6 +80,9 @@ namespace LookupMaps {
{ L"KRAKEN71_REFRESH_CHROMA", KRAKEN71_REFRESH_CHROMA },
{ L"FIREFLY_CHROMA", FIREFLY_CHROMA },
{ L"TARTARUS_CHROMA", TARTARUS_CHROMA },
{ L"ORBWEAVER_CHROMA", ORBWEAVER_CHROMA }
{ L"ORBWEAVER_CHROMA", ORBWEAVER_CHROMA },
{ L"LENOVO_Y900", LENOVO_Y900 },
{ L"LENOVO_Y27", LENOVO_Y27 },
{ L"CORE_CHROMA", CORE_CHROMA }
};
}
9 changes: 6 additions & 3 deletions shim-dll/shim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@ RzApi RZRESULT CreateMouseEffect(Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZE
RzApi RZRESULT CreateHeadsetEffect(Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
RzApi RZRESULT CreateMousepadEffect(Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
RzApi RZRESULT CreateKeypadEffect(Keypad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
RzApi RZRESULT CreateChromaLinkEffect(ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);

RzApi RZRESULT SetEffect(RZEFFECTID EffectId);
RzApi RZRESULT DeleteEffect(RZEFFECTID EffectId);

RzApi RZRESULT QueryDevice(RZDEVICEID DeviceId, DEVICE_INFO_TYPE& DeviceInfo);

//////////////////////////////////////////////////////////////////////////
// All functions below this line are not implemented.
// All functions in this block are not implemented.
RzApi RZRESULT RegisterEventNotification(HWND hWnd);
RzApi RZRESULT UnregisterEventNotification();
//////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -78,7 +79,7 @@ RZRESULT Init() {
return RZRESULT_SERVICE_NOT_ACTIVE;
}

status = RpcEpResolveBinding(hRetcBinding, rpc_retc_v2_3_c_ifspec);
status = RpcEpResolveBinding(hRetcBinding, rpc_retc_v2_4_c_ifspec);
if (status) {
return RZRESULT_SERVICE_NOT_ACTIVE;
}
Expand Down Expand Up @@ -176,6 +177,9 @@ RZRESULT CreateKeypadEffect(Keypad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFEC
return sendEffect(KEYPAD, Effect, pParam, pEffectId);
}

RZRESULT CreateChromaLinkEffect(ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID * pEffectId) {
return sendEffect(SYSTEM, Effect, pParam, pEffectId);
}

RZRESULT SetEffect(RZEFFECTID EffectId) { //-V813
RpcTryExcept
Expand Down Expand Up @@ -213,7 +217,6 @@ RZRESULT UnregisterEventNotification() {
return RZRESULT_SUCCESS;
}


void* __RPC_USER midl_user_allocate(size_t size) {
return malloc(size);
}
Expand Down

0 comments on commit 07581c2

Please sign in to comment.