From da6e790ee63e47073862573f0f73da1d0df1d7ae Mon Sep 17 00:00:00 2001 From: Chris M Date: Fri, 8 Jul 2022 20:29:58 +0000 Subject: [PATCH] Initial commit for the Bloody MP 50RS to resolve #2579 --- .../A4TechController/A4Tech_Detector.cpp | 8 +--- .../BloodyMouseController.cpp | 8 +++- .../A4TechController/BloodyMouseController.h | 14 ++++++- .../RGBController_BloodyMouse.cpp | 37 +++++++++++++++++-- 4 files changed, 55 insertions(+), 12 deletions(-) diff --git a/Controllers/A4TechController/A4Tech_Detector.cpp b/Controllers/A4TechController/A4Tech_Detector.cpp index d3c4726a..4e2dcea9 100644 --- a/Controllers/A4TechController/A4Tech_Detector.cpp +++ b/Controllers/A4TechController/A4Tech_Detector.cpp @@ -16,18 +16,13 @@ \*-----------------------------------------------------*/ #define A4_TECH_VID 0x09DA -/*-----------------------------------------------------*\ -| Keyboard product IDs | -\*-----------------------------------------------------*/ -#define BLOODY_W60_PRO_PID 0x37EA - void DetectA4TechMouseControllers(hid_device_info* info, const std::string& name) { hid_device* dev = hid_open_path(info->path); if(dev) { - BloodyMouseController* controller = new BloodyMouseController(dev, info->path); + BloodyMouseController* controller = new BloodyMouseController(dev, info->path, info->product_id); RGBController_BloodyMouse* rgb_controller = new RGBController_BloodyMouse(controller); rgb_controller->name = name; @@ -36,3 +31,4 @@ void DetectA4TechMouseControllers(hid_device_info* info, const std::string& name } REGISTER_HID_DETECTOR_IPU("Bloody W60 Pro", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_W60_PRO_PID, 2, 0xFF33, 0x0529); +REGISTER_HID_DETECTOR_IPU("Bloody MP 50RS", DetectA4TechMouseControllers, A4_TECH_VID, BLOODY_MP_50RS_PID, 2, 0xFFF2, 0x6009); diff --git a/Controllers/A4TechController/BloodyMouseController.cpp b/Controllers/A4TechController/BloodyMouseController.cpp index 6f2a179b..1f33c9ab 100644 --- a/Controllers/A4TechController/BloodyMouseController.cpp +++ b/Controllers/A4TechController/BloodyMouseController.cpp @@ -9,10 +9,11 @@ #include "BloodyMouseController.h" -BloodyMouseController::BloodyMouseController(hid_device* dev_handle, const char* path) +BloodyMouseController::BloodyMouseController(hid_device* dev_handle, const char* path, uint16_t product_id) { dev = dev_handle; location = path; + pid = product_id; InitDevice(); } @@ -22,6 +23,11 @@ BloodyMouseController::~BloodyMouseController() hid_close(dev); } +uint16_t BloodyMouseController::GetPid() +{ + return pid; +} + std::string BloodyMouseController::GetSerial() { const uint8_t sz = HID_MAX_STR; diff --git a/Controllers/A4TechController/BloodyMouseController.h b/Controllers/A4TechController/BloodyMouseController.h index 98335d10..e8841351 100644 --- a/Controllers/A4TechController/BloodyMouseController.h +++ b/Controllers/A4TechController/BloodyMouseController.h @@ -14,6 +14,16 @@ #pragma once +/*-----------------------------------------------------*\ +| Mouse product IDs | +\*-----------------------------------------------------*/ +#define BLOODY_W60_PRO_PID 0x37EA + +/*-----------------------------------------------------*\ +| Mousemat product IDs | +\*-----------------------------------------------------*/ +#define BLOODY_MP_50RS_PID 0xFA60 + #define HID_MAX_STR 255 #define BLOODYMOUSE_WRITE_PACKET_SIZE 64 @@ -36,14 +46,16 @@ enum class BloodyMouseController { public: - BloodyMouseController(hid_device* dev_handle, const char* path); + BloodyMouseController(hid_device* dev_handle, const char* path, uint16_t product_id); ~BloodyMouseController(); + uint16_t GetPid(); std::string GetSerial(); std::string GetLocation(); void SetLedsDirect(std::vector colors); private: + uint16_t pid; std::string location; hid_device* dev; diff --git a/Controllers/A4TechController/RGBController_BloodyMouse.cpp b/Controllers/A4TechController/RGBController_BloodyMouse.cpp index 3302c18b..c926c8a5 100644 --- a/Controllers/A4TechController/RGBController_BloodyMouse.cpp +++ b/Controllers/A4TechController/RGBController_BloodyMouse.cpp @@ -25,6 +25,13 @@ static const mouse_layout w60_pro } }; +static const mouse_layout mp_50rs +{ + { + "Mouse Pad", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } + } +}; + /**------------------------------------------------------------------*\ @name BloodyMouse @category Mouse @@ -40,10 +47,18 @@ RGBController_BloodyMouse::RGBController_BloodyMouse(BloodyMouseController *cont { controller = controller_ptr; + switch(controller->GetPid()) + { + case BLOODY_MP_50RS_PID: + type = DEVICE_TYPE_MOUSEMAT; + break; + default: + type = DEVICE_TYPE_MOUSE; + } + name = "BloodyMouse"; vendor = "Bloody"; - type = DEVICE_TYPE_MOUSE; - description = "Controller compatible with the Bloody W60 Pro"; + description = "Controller compatible with the Bloody W60 Pro and MP 50RS"; serial = controller->GetSerial(); location = controller->GetLocation(); @@ -70,12 +85,26 @@ void RGBController_BloodyMouse::SetupZones() leds.clear(); colors.clear(); + /*-------------------------------------------------*\ + | Select layout from PID | + \*-------------------------------------------------*/ + mouse_layout layout; + switch(controller->GetPid()) + { + case BLOODY_W60_PRO_PID: + layout = w60_pro; + break; + case BLOODY_MP_50RS_PID: + layout = mp_50rs; + break; + } + /*---------------------------------------------------------*\ | Set up zones | \*---------------------------------------------------------*/ - for(uint8_t zone_idx = 0; zone_idx < w60_pro.size(); zone_idx++) + for(uint8_t zone_idx = 0; zone_idx < layout.size(); zone_idx++) { - mouse_zone mz = w60_pro[zone_idx]; + mouse_zone mz = layout[zone_idx]; bool bool_single = mz.zone_leds.size() == 1; zone new_zone;