diff --git a/60-openrgb.rules b/60-openrgb.rules index 977d3f47..c37b17de 100644 --- a/60-openrgb.rules +++ b/60-openrgb.rules @@ -98,6 +98,7 @@ ACTION=="add", SUBSYSTEM=="platform", KERNEL=="faustus", RUN+="/bin/chmod a+w /s # # # Mice: # # Cooler Master MM711 # +# Cooler Master MM720 # # Mousemats: # # Cooler Master MP750 # # Controllers: # @@ -114,6 +115,7 @@ ACTION=="add", SUBSYSTEM=="platform", KERNEL=="faustus", RUN+="/bin/chmod a+w /s # Masterkeys SK650 # #---------------------------------------------------------------# SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0101", TAG+="uaccess" #MM711 +SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0141", TAG+="uaccess" #MM720 SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0109", TAG+="uaccess" #MP750 XL SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0105", TAG+="uaccess" #MP750 M SUBSYSTEMS=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="1011", TAG+="uaccess" #ARGB diff --git a/Controllers/CoolerMasterController/CMMM711Controller.cpp b/Controllers/CoolerMasterController/CMMM711Controller.cpp index 7b722273..4b2e0146 100644 --- a/Controllers/CoolerMasterController/CMMM711Controller.cpp +++ b/Controllers/CoolerMasterController/CMMM711Controller.cpp @@ -58,13 +58,20 @@ void CMMM711Controller::GetColourStatus() void CMMM711Controller::GetCustomStatus() { uint8_t buffer[CM_MM711_PACKET_SIZE] = { 0x00, 0x52, 0xA8 }; - int buffer_size = (sizeof(buffer) / sizeof(buffer[0])); + int read_size = CM_MM711_PACKET_SIZE - 1; + int result = 0; - hid_write(dev, buffer, buffer_size); - hid_read_timeout(dev, buffer, buffer_size, CM_MM711_INTERRUPT_TIMEOUT); + hid_write(dev, buffer, CM_MM711_PACKET_SIZE); + do + { + result = hid_read_timeout(dev, buffer, read_size, CM_MM711_INTERRUPT_TIMEOUT); + }while(buffer[1] != 0xA8 && result == read_size); - wheel_colour = ToRGBColor(buffer[4], buffer[5], buffer[6]); - logo_colour = ToRGBColor(buffer[7], buffer[8], buffer[9]); + if(result == read_size) + { + wheel_colour = ToRGBColor(buffer[4], buffer[5], buffer[6]); + logo_colour = ToRGBColor(buffer[7], buffer[8], buffer[9]); + } } void CMMM711Controller::GetModeStatus() @@ -140,8 +147,9 @@ void CMMM711Controller::SetLedsDirect(RGBColor wheel_colour, RGBColor logo_colou buffer[CM_MM711_BRIGHTNESS_BYTE] = RGBGetBValue(logo_colour); hid_write(dev, buffer, CM_MM711_PACKET_SIZE); + hid_read_timeout(dev, buffer, CM_MM711_PACKET_SIZE, CM_MM711_INTERRUPT_TIMEOUT); - SendApplyPacket(0xB0); //Apply custom mode + //SendApplyPacket(0xB0); //Apply custom mode } void CMMM711Controller::SendUpdate(uint8_t mode, uint8_t speed, RGBColor colour, uint8_t brightness) @@ -159,6 +167,7 @@ void CMMM711Controller::SendUpdate(uint8_t mode, uint8_t speed, RGBColor colour, buffer[CM_MM711_BLUE_BYTE] = RGBGetBValue(colour); hid_write(dev, buffer, CM_MM711_PACKET_SIZE); + hid_read_timeout(dev, buffer, CM_MM711_PACKET_SIZE, CM_MM711_INTERRUPT_TIMEOUT); SendApplyPacket(mode); } @@ -168,6 +177,7 @@ void CMMM711Controller::SendInitPacket() unsigned char buffer[CM_MM711_PACKET_SIZE] = { 0x00, 0x41, 0x80 }; hid_write(dev, buffer, CM_MM711_PACKET_SIZE); + hid_read_timeout(dev, buffer, CM_MM711_PACKET_SIZE, CM_MM711_INTERRUPT_TIMEOUT); } void CMMM711Controller::SendApplyPacket(uint8_t mode) @@ -177,4 +187,13 @@ void CMMM711Controller::SendApplyPacket(uint8_t mode) buffer[CM_MM711_MODE_BYTE] = mode; hid_write(dev, buffer, CM_MM711_PACKET_SIZE); + hid_read_timeout(dev, buffer, CM_MM711_PACKET_SIZE, CM_MM711_INTERRUPT_TIMEOUT); +} + +void CMMM711Controller::SendSavePacket() +{ + unsigned char buffer[CM_MM711_PACKET_SIZE] = { 0x00, 0x50, 0x55 }; + + hid_write(dev, buffer, CM_MM711_PACKET_SIZE); + hid_read_timeout(dev, buffer, CM_MM711_PACKET_SIZE, CM_MM711_INTERRUPT_TIMEOUT); } diff --git a/Controllers/CoolerMasterController/CMMM711Controller.h b/Controllers/CoolerMasterController/CMMM711Controller.h index 43e9da5e..141721b1 100644 --- a/Controllers/CoolerMasterController/CMMM711Controller.h +++ b/Controllers/CoolerMasterController/CMMM711Controller.h @@ -76,6 +76,7 @@ public: void SendUpdate(uint8_t mode, uint8_t speed, RGBColor colour, uint8_t brightness); void SetLedsDirect(RGBColor wheel_colour, RGBColor logo_colour); + void SendSavePacket(); private: std::string device_name; std::string serial; diff --git a/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp b/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp index 5945c869..31047193 100644 --- a/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp +++ b/Controllers/CoolerMasterController/CoolerMasterControllerDetect.cpp @@ -19,6 +19,7 @@ #define COOLERMASTER_VID 0x2516 #define COOLERMASTER_MM711_PID 0x0101 +#define COOLERMASTER_MM720_PID 0x0141 #define COOLERMASTER_MP750_XL_PID 0x0109 #define COOLERMASTER_MP750_MEDIUM_PID 0x0105 #define COOLERMASTER_ARGB_PID 0x1011 @@ -129,6 +130,7 @@ void DetectCoolerMasterSmallARGB(hid_device_info* info, const std::string&) } REGISTER_HID_DETECTOR_IPU("Cooler Master MM711", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM711_PID, 1, 0xFF00, 1); +REGISTER_HID_DETECTOR_IPU("Cooler Master MM720", DetectCoolerMasterMouse, COOLERMASTER_VID, COOLERMASTER_MM720_PID, 1, 0xFF00, 1); REGISTER_HID_DETECTOR_PU ("Cooler Master MP750 XL", DetectCoolerMasterMousemats, COOLERMASTER_VID, COOLERMASTER_MP750_XL_PID, 0xFF00, 1); REGISTER_HID_DETECTOR_PU ("Cooler Master MP750 Medium", DetectCoolerMasterMousemats, COOLERMASTER_VID, COOLERMASTER_MP750_MEDIUM_PID, 0xFF00, 1); REGISTER_HID_DETECTOR_IPU("Cooler Master MasterKeys Pro L", DetectCoolerMasterKeyboards, COOLERMASTER_VID, COOLERMASTER_MASTERKEYS_PRO_L_PID, 1, 0xFF00, 1); diff --git a/Controllers/CoolerMasterController/RGBController_CMMM711Controller.cpp b/Controllers/CoolerMasterController/RGBController_CMMM711Controller.cpp index 9e77eff1..179af4b2 100644 --- a/Controllers/CoolerMasterController/RGBController_CMMM711Controller.cpp +++ b/Controllers/CoolerMasterController/RGBController_CMMM711Controller.cpp @@ -7,6 +7,8 @@ | | \*-------------------------------------------------------------------*/ +#define applyBrightness(c, bright) ((RGBColor) ((RGBGetBValue(c) * bright / CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT) << 16 | (RGBGetGValue(c) * bright / CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT) << 8 | (RGBGetRValue(c) * bright / CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT))) + #include "RGBController_CMMM711Controller.h" RGBController_CMMM711Controller::RGBController_CMMM711Controller(CMMM711Controller *cmmm711_ptr) @@ -25,7 +27,7 @@ RGBController_CMMM711Controller::RGBController_CMMM711Controller(CMMM711Controll mode Custom; Custom.name = "Direct"; Custom.value = CM_MM711_MODE_CUSTOM; - Custom.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Custom.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; Custom.brightness_min = CM_MM_ARGB_BRIGHTNESS_MIN; Custom.brightness_max = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT; Custom.brightness = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT; @@ -35,7 +37,7 @@ RGBController_CMMM711Controller::RGBController_CMMM711Controller(CMMM711Controll mode Static; Static.name = "Static"; Static.value = CM_MM711_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; Static.brightness_min = CM_MM_ARGB_BRIGHTNESS_MIN; Static.brightness_max = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT; Static.brightness = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT; @@ -51,7 +53,7 @@ RGBController_CMMM711Controller::RGBController_CMMM711Controller(CMMM711Controll mode Breathing; Breathing.name = "Breathing"; Breathing.value = CM_MM711_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; Breathing.brightness_min = CM_MM_ARGB_BRIGHTNESS_MIN; Breathing.brightness_max = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT; Breathing.brightness = CM_MM_ARGB_BRIGHTNESS_MAX_DEFAULT; @@ -67,7 +69,7 @@ RGBController_CMMM711Controller::RGBController_CMMM711Controller(CMMM711Controll mode Spectrum_Cycle; Spectrum_Cycle.name = "Spectrum Cycle"; Spectrum_Cycle.value = CM_MM711_MODE_SPECTRUM_CYCLE; - Spectrum_Cycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS; + Spectrum_Cycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; Spectrum_Cycle.brightness_min = CM_MM_ARGB_BRIGHTNESS_MIN; Spectrum_Cycle.brightness_max = CM_MM_ARGB_BRIGHTNESS_MAX_SPECTRUM; Spectrum_Cycle.brightness = CM_MM_ARGB_BRIGHTNESS_MAX_SPECTRUM; @@ -80,12 +82,14 @@ RGBController_CMMM711Controller::RGBController_CMMM711Controller(CMMM711Controll mode Indicator; Indicator.name = "Indicator"; Indicator.value = CM_MM711_MODE_INDICATOR; + Indicator.flags = MODE_FLAG_MANUAL_SAVE; Indicator.color_mode = MODE_COLORS_NONE; modes.push_back(Indicator); mode Off; Off.name = "Turn Off"; Off.value = CM_MM711_MODE_OFF; + Off.flags = MODE_FLAG_MANUAL_SAVE; Off.color_mode = MODE_COLORS_NONE; modes.push_back(Off); @@ -117,7 +121,7 @@ RGBController_CMMM711Controller::~RGBController_CMMM711Controller() void RGBController_CMMM711Controller::Init_Controller() { zone mouse_zone; - mouse_zone.name = "Master Mouse 711"; + mouse_zone.name = name; mouse_zone.type = ZONE_TYPE_LINEAR; mouse_zone.leds_min = 2; mouse_zone.leds_max = 2; @@ -150,7 +154,10 @@ void RGBController_CMMM711Controller::ResizeZone(int /*zone*/, int /*new_size*/) void RGBController_CMMM711Controller::DeviceUpdateLEDs() { - cmmm711->SetLedsDirect( colors[0], colors[1] ); + RGBColor wheel = applyBrightness(colors[0], modes[active_mode].brightness); + RGBColor logo = applyBrightness(colors[1], modes[active_mode].brightness); + + cmmm711->SetLedsDirect( wheel, logo); } void RGBController_CMMM711Controller::UpdateZoneLEDs(int /*zone*/) @@ -189,3 +196,9 @@ void RGBController_CMMM711Controller::DeviceUpdateMode() cmmm711->SendUpdate(modes[active_mode].value, modes[active_mode].speed, colour, modes[active_mode].brightness); } } + +void RGBController_CMMM711Controller::DeviceSaveMode() +{ + DeviceUpdateMode(); + cmmm711->SendSavePacket(); +} diff --git a/Controllers/CoolerMasterController/RGBController_CMMM711Controller.h b/Controllers/CoolerMasterController/RGBController_CMMM711Controller.h index 1adb81ad..55b84e2f 100644 --- a/Controllers/CoolerMasterController/RGBController_CMMM711Controller.h +++ b/Controllers/CoolerMasterController/RGBController_CMMM711Controller.h @@ -31,6 +31,7 @@ public: void SetCustomMode(); void DeviceUpdateMode(); + void DeviceSaveMode(); private: void Init_Controller(); int GetDeviceMode();