diff --git a/Controllers/LogitechController/LogitechControllerDetect.cpp b/Controllers/LogitechController/LogitechControllerDetect.cpp index d9cdbf8c..7908cb3a 100644 --- a/Controllers/LogitechController/LogitechControllerDetect.cpp +++ b/Controllers/LogitechController/LogitechControllerDetect.cpp @@ -681,8 +681,8 @@ REGISTER_HID_DETECTOR_IPU("Logitech G933 Lightsync Headset", Dete /*-------------------------------------------------------------------------------------------------------------------------------------------------*\ | Joysticks | \*-------------------------------------------------------------------------------------------------------------------------------------------------*/ -REGISTER_HID_DETECTOR_IP("Logitech X56 Rhino Hotas Joystick", DetectLogitechX56, LOGITECH_X56_VID, LOGITECH_X56_JOYSTICK_PID, 2, 0xFF00); -REGISTER_HID_DETECTOR_IP("Logitech X56 Rhino Hotas Throttle", DetectLogitechX56, LOGITECH_X56_VID, LOGITECH_X56_THROTTLE_PID, 2, 0xFF00); +REGISTER_HID_DETECTOR_IPU("Logitech X56 Rhino Hotas Joystick", DetectLogitechX56, LOGITECH_X56_VID, LOGITECH_X56_JOYSTICK_PID, 2, 0xFF00, 3); +REGISTER_HID_DETECTOR_IPU("Logitech X56 Rhino Hotas Throttle", DetectLogitechX56, LOGITECH_X56_VID, LOGITECH_X56_THROTTLE_PID, 2, 0xFF00, 3); diff --git a/Controllers/LogitechController/LogitechX56Controller.cpp b/Controllers/LogitechController/LogitechX56Controller.cpp index 6f4453b5..40d4f802 100644 --- a/Controllers/LogitechController/LogitechX56Controller.cpp +++ b/Controllers/LogitechController/LogitechX56Controller.cpp @@ -35,7 +35,7 @@ std::string LogitechX56Controller::GetSerialString() { wchar_t serial_string[128]; int ret = hid_get_serial_number_string(dev, serial_string, 128); - + if(ret != 0) { return(""); @@ -47,23 +47,23 @@ std::string LogitechX56Controller::GetSerialString() return(return_string); } -void LogitechX56Controller::SetColor(RGBColor color) +void LogitechX56Controller::SetColor(RGBColor color, uint8_t brightness) { - unsigned char buf[64]; - unsigned char cbuf[64]; + unsigned char buf[X56_CONTROLLER_PACKET_SIZE]; + unsigned char cbuf[X56_CONTROLLER_PACKET_SIZE]; /*-----------------------------------------------------*\ | Zero out buffer | \*-----------------------------------------------------*/ - memset(buf, 0x00, sizeof(buf)); - memset(cbuf, 0x00, sizeof(cbuf)); + memset(buf, 0x00, X56_CONTROLLER_PACKET_SIZE); + memset(cbuf, 0x00, X56_CONTROLLER_PACKET_SIZE); /*-----------------------------------------------------*\ | Set up init packet | \*-----------------------------------------------------*/ buf[0x00] = 0x09; buf[0x02] = 0x02; - buf[0x03] = 0x64; + buf[0x03] = brightness; /*-----------------------------------------------------*\ | Set up color packet | @@ -73,11 +73,29 @@ void LogitechX56Controller::SetColor(RGBColor color) cbuf[0x03] = RGBGetRValue(color); cbuf[0x04] = RGBGetGValue(color); cbuf[0x05] = RGBGetBValue(color); - + /*-----------------------------------------------------*\ | Send packets | \*-----------------------------------------------------*/ - hid_send_feature_report(dev, buf, 64); - hid_send_feature_report(dev, cbuf, 64); + hid_send_feature_report(dev, buf, X56_CONTROLLER_PACKET_SIZE); + hid_send_feature_report(dev, cbuf, X56_CONTROLLER_PACKET_SIZE); } + +void LogitechX56Controller::Save() +{ + uint8_t buffer[X56_CONTROLLER_PACKET_SIZE]; + + /*-----------------------------------------------------*\ + | Zero out buffer | + \*-----------------------------------------------------*/ + memset(buffer, 0x00, X56_CONTROLLER_PACKET_SIZE); + + /*-----------------------------------------------------*\ + | Set up init packet | + \*-----------------------------------------------------*/ + buffer[0x00] = 0x01; + buffer[0x01] = 0x01; + + hid_send_feature_report(dev, buffer, X56_CONTROLLER_PACKET_SIZE); +} diff --git a/Controllers/LogitechController/LogitechX56Controller.h b/Controllers/LogitechController/LogitechX56Controller.h index 9a42e12a..2d99f4dc 100644 --- a/Controllers/LogitechController/LogitechX56Controller.h +++ b/Controllers/LogitechController/LogitechX56Controller.h @@ -13,6 +13,8 @@ #pragma once +#define X56_CONTROLLER_PACKET_SIZE 64 + class LogitechX56Controller { public: @@ -24,7 +26,8 @@ public: char* GetDeviceName(); std::string GetSerialString(); - void SetColor(RGBColor colors); + void SetColor(RGBColor colors, uint8_t brightness); + void Save(); private: char device_name[32]; diff --git a/Controllers/LogitechController/RGBController_LogitechX56.cpp b/Controllers/LogitechController/RGBController_LogitechX56.cpp index fae0ca4d..cc2035c1 100644 --- a/Controllers/LogitechController/RGBController_LogitechX56.cpp +++ b/Controllers/LogitechController/RGBController_LogitechX56.cpp @@ -13,28 +13,31 @@ @name Logitech X56 @category Gamepad @type USB - @save :x: + @save :white_check_mark: @direct :white_check_mark: @effects :x: - @detectors DetectLogitechKeyboardGPro + @detectors DetectLogitechX56 @comment \*-------------------------------------------------------------------*/ RGBController_LogitechX56::RGBController_LogitechX56(LogitechX56Controller* controller_ptr) { - controller = controller_ptr; + controller = controller_ptr; - name = controller->GetDeviceName(); - vendor = "Logitech"; - type = DEVICE_TYPE_GAMEPAD; - description = "Logitech X56 Device"; - location = controller->GetDeviceLocation(); - serial = controller->GetSerialString(); + name = controller->GetDeviceName(); + vendor = "Logitech"; + type = DEVICE_TYPE_GAMEPAD; + description = "Logitech X56 Device"; + location = controller->GetDeviceLocation(); + serial = controller->GetSerialString(); mode Direct; - Direct.name = "Direct"; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; + Direct.name = "Direct"; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Direct.color_mode = MODE_COLORS_PER_LED; + Direct.brightness_min = 0x00; + Direct.brightness_max = 0x64; + Direct.brightness = 0x64; modes.push_back(Direct); SetupZones(); @@ -75,7 +78,7 @@ void RGBController_LogitechX56::ResizeZone(int /*zone*/, int /*new_size*/) void RGBController_LogitechX56::DeviceUpdateLEDs() { - controller->SetColor(colors[0]); + controller->SetColor(colors[0], modes[active_mode].brightness); } void RGBController_LogitechX56::UpdateZoneLEDs(int /*zone*/) @@ -103,3 +106,8 @@ void RGBController_LogitechX56::DeviceUpdateMode() { DeviceUpdateLEDs(); } + +void RGBController_LogitechX56::DeviceSaveMode() +{ + controller->Save(); +} diff --git a/Controllers/LogitechController/RGBController_LogitechX56.h b/Controllers/LogitechController/RGBController_LogitechX56.h index 74eaab91..7cf29a5c 100644 --- a/Controllers/LogitechController/RGBController_LogitechX56.h +++ b/Controllers/LogitechController/RGBController_LogitechX56.h @@ -26,6 +26,7 @@ public: void UpdateZoneLEDs(int zone); void UpdateSingleLED(int led); + void DeviceSaveMode(); void SetCustomMode(); void DeviceUpdateMode();