diff --git a/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.cpp b/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.cpp index 9a8dc70a..ea1ca8e0 100644 --- a/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.cpp +++ b/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.cpp @@ -77,6 +77,14 @@ std::string CorsairLightingNodeController::GetSerialString() return(return_string); } +void CorsairLightingNodeController::SetBrightness(unsigned char brightness) +{ + for(unsigned int channel = 0; channel < CORSAIR_LIGHTING_NODE_NUM_CHANNELS; channel++) + { + SendBrightness(channel, brightness); + } +} + void CorsairLightingNodeController::SetChannelEffect(unsigned char channel, unsigned char num_leds, unsigned char mode, @@ -451,9 +459,40 @@ void CorsairLightingNodeController::SendPortState hid_read(dev, usb_buf, 17); } -void CorsairLightingNodeController::SendBrightness() +void CorsairLightingNodeController::SendBrightness + ( + unsigned char channel, + unsigned char brightness + ) { + unsigned char usb_buf[65]; + /*-----------------------------------------------------*\ + | Brightness goes from 0-100 | + \*-----------------------------------------------------*/ + if(brightness > 100) + { + brightness = 100; + } + + /*-----------------------------------------------------*\ + | Zero out buffer | + \*-----------------------------------------------------*/ + memset(usb_buf, 0x00, sizeof(usb_buf)); + + /*-----------------------------------------------------*\ + | Set up Port State packet | + \*-----------------------------------------------------*/ + usb_buf[0x00] = 0x00; + usb_buf[0x01] = CORSAIR_LIGHTING_NODE_PACKET_ID_BRIGHTNESS; + usb_buf[0x02] = channel; + usb_buf[0x03] = brightness; + + /*-----------------------------------------------------*\ + | Send packet | + \*-----------------------------------------------------*/ + hid_write(dev, usb_buf, 65); + hid_read(dev, usb_buf, 17); } void CorsairLightingNodeController::SendLEDCount() diff --git a/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.h b/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.h index a49882b9..35d63f6a 100644 --- a/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.h +++ b/Controllers/CorsairLightingNodeController/CorsairLightingNodeController.h @@ -88,6 +88,8 @@ public: unsigned int GetStripsOnChannel(unsigned int channel); + void SetBrightness(unsigned char brightness); + void SetChannelEffect(unsigned char channel, unsigned char num_leds, unsigned char mode, @@ -171,7 +173,11 @@ private: unsigned char state ); - void SendBrightness(); + void SendBrightness + ( + unsigned char channel, + unsigned char brightness + ); void SendLEDCount(); diff --git a/Controllers/CorsairLightingNodeController/RGBController_CorsairLightingNode.cpp b/Controllers/CorsairLightingNodeController/RGBController_CorsairLightingNode.cpp index 183f9bd5..754d3df3 100644 --- a/Controllers/CorsairLightingNodeController/RGBController_CorsairLightingNode.cpp +++ b/Controllers/CorsairLightingNodeController/RGBController_CorsairLightingNode.cpp @@ -23,145 +23,178 @@ RGBController_CorsairLightingNode::RGBController_CorsairLightingNode(CorsairLigh serial = corsair->GetSerialString(); mode Direct; - Direct.name = "Direct"; - Direct.value = 0xFFFF; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; + Direct.name = "Direct"; + Direct.value = 0xFFFF; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Direct.color_mode = MODE_COLORS_PER_LED; modes.push_back(Direct); mode RainbowWave; - RainbowWave.name = "Rainbow Wave"; - RainbowWave.value = CORSAIR_LIGHTING_NODE_MODE_RAINBOW_WAVE; - RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; - RainbowWave.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - RainbowWave.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - RainbowWave.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - RainbowWave.direction = MODE_DIRECTION_RIGHT; - RainbowWave.color_mode = MODE_COLORS_NONE; + RainbowWave.name = "Rainbow Wave"; + RainbowWave.value = CORSAIR_LIGHTING_NODE_MODE_RAINBOW_WAVE; + RainbowWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_BRIGHTNESS; + RainbowWave.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + RainbowWave.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + RainbowWave.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + RainbowWave.direction = MODE_DIRECTION_RIGHT; + RainbowWave.color_mode = MODE_COLORS_NONE; + RainbowWave.brightness_min = 0; + RainbowWave.brightness_max = 100; + RainbowWave.brightness = 100; modes.push_back(RainbowWave); mode ColorShift; - ColorShift.name = "Color Shift"; - ColorShift.value = CORSAIR_LIGHTING_NODE_MODE_COLOR_SHIFT; - ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; - ColorShift.colors_min = 2; - ColorShift.colors_max = 2; - ColorShift.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - ColorShift.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - ColorShift.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - ColorShift.color_mode = MODE_COLORS_MODE_SPECIFIC; + ColorShift.name = "Color Shift"; + ColorShift.value = CORSAIR_LIGHTING_NODE_MODE_COLOR_SHIFT; + ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + ColorShift.colors_min = 2; + ColorShift.colors_max = 2; + ColorShift.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + ColorShift.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + ColorShift.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + ColorShift.color_mode = MODE_COLORS_MODE_SPECIFIC; ColorShift.colors.resize(2); + ColorShift.brightness_min = 0; + ColorShift.brightness_max = 100; + ColorShift.brightness = 100; modes.push_back(ColorShift); mode ColorPulse; - ColorPulse.name = "Color Pulse"; - ColorPulse.value = CORSAIR_LIGHTING_NODE_MODE_COLOR_PULSE; - ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; - ColorPulse.colors_min = 2; - ColorPulse.colors_max = 2; - ColorPulse.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - ColorPulse.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - ColorPulse.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - ColorPulse.color_mode = MODE_COLORS_MODE_SPECIFIC; + ColorPulse.name = "Color Pulse"; + ColorPulse.value = CORSAIR_LIGHTING_NODE_MODE_COLOR_PULSE; + ColorPulse.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + ColorPulse.colors_min = 2; + ColorPulse.colors_max = 2; + ColorPulse.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + ColorPulse.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + ColorPulse.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + ColorPulse.color_mode = MODE_COLORS_MODE_SPECIFIC; ColorPulse.colors.resize(2); + ColorPulse.brightness_min = 0; + ColorPulse.brightness_max = 100; + ColorPulse.brightness = 100; modes.push_back(ColorPulse); mode ColorWave; - ColorWave.name = "Color Wave"; - ColorWave.value = CORSAIR_LIGHTING_NODE_MODE_COLOR_WAVE; - ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; - ColorWave.colors_min = 2; - ColorWave.colors_max = 2; - ColorWave.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - ColorWave.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - ColorWave.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - ColorWave.direction = MODE_DIRECTION_RIGHT; - ColorWave.color_mode = MODE_COLORS_MODE_SPECIFIC; + ColorWave.name = "Color Wave"; + ColorWave.value = CORSAIR_LIGHTING_NODE_MODE_COLOR_WAVE; + ColorWave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + ColorWave.colors_min = 2; + ColorWave.colors_max = 2; + ColorWave.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + ColorWave.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + ColorWave.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + ColorWave.direction = MODE_DIRECTION_RIGHT; + ColorWave.color_mode = MODE_COLORS_MODE_SPECIFIC; ColorWave.colors.resize(2); + ColorWave.brightness_min = 0; + ColorWave.brightness_max = 100; + ColorWave.brightness = 100; modes.push_back(ColorWave); mode Static; - Static.name = "Static"; - Static.value = CORSAIR_LIGHTING_NODE_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR; - Static.colors_min = 1; - Static.colors_max = 1; - Static.color_mode = MODE_COLORS_MODE_SPECIFIC; + Static.name = "Static"; + Static.value = CORSAIR_LIGHTING_NODE_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Static.colors_min = 1; + Static.colors_max = 1; + Static.color_mode = MODE_COLORS_MODE_SPECIFIC; Static.colors.resize(1); + Static.brightness_min = 0; + Static.brightness_max = 100; + Static.brightness = 100; modes.push_back(Static); mode Temperature; - Temperature.name = "Temperature"; - Temperature.value = CORSAIR_LIGHTING_NODE_MODE_TEMPERATURE; - Temperature.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR; - Temperature.colors_min = 3; - Temperature.colors_max = 3; - Temperature.color_mode = MODE_COLORS_MODE_SPECIFIC; + Temperature.name = "Temperature"; + Temperature.value = CORSAIR_LIGHTING_NODE_MODE_TEMPERATURE; + Temperature.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Temperature.colors_min = 3; + Temperature.colors_max = 3; + Temperature.color_mode = MODE_COLORS_MODE_SPECIFIC; Temperature.colors.resize(3); + Temperature.brightness_min = 0; + Temperature.brightness_max = 100; + Temperature.brightness = 100; modes.push_back(Temperature); mode Visor; - Visor.name = "Visor"; - Visor.value = CORSAIR_LIGHTING_NODE_MODE_VISOR; - Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; - Visor.colors_min = 2; - Visor.colors_max = 2; - Visor.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - Visor.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - Visor.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - Visor.color_mode = MODE_COLORS_MODE_SPECIFIC; + Visor.name = "Visor"; + Visor.value = CORSAIR_LIGHTING_NODE_MODE_VISOR; + Visor.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Visor.colors_min = 2; + Visor.colors_max = 2; + Visor.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + Visor.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + Visor.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + Visor.color_mode = MODE_COLORS_MODE_SPECIFIC; Visor.colors.resize(2); + Visor.brightness_min = 0; + Visor.brightness_max = 100; + Visor.brightness = 100; modes.push_back(Visor); mode Marquee; - Marquee.name = "Marquee"; - Marquee.value = CORSAIR_LIGHTING_NODE_MODE_MARQUEE; - Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; - Marquee.colors_min = 1; - Marquee.colors_max = 1; - Marquee.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - Marquee.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - Marquee.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - Marquee.direction = MODE_DIRECTION_RIGHT; - Marquee.color_mode = MODE_COLORS_MODE_SPECIFIC; + Marquee.name = "Marquee"; + Marquee.value = CORSAIR_LIGHTING_NODE_MODE_MARQUEE; + Marquee.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Marquee.colors_min = 1; + Marquee.colors_max = 1; + Marquee.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + Marquee.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + Marquee.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + Marquee.direction = MODE_DIRECTION_RIGHT; + Marquee.color_mode = MODE_COLORS_MODE_SPECIFIC; Marquee.colors.resize(1); + Marquee.brightness_min = 0; + Marquee.brightness_max = 100; + Marquee.brightness = 100; modes.push_back(Marquee); mode Blink; - Blink.name = "Blink"; - Blink.value = CORSAIR_LIGHTING_NODE_MODE_BLINK; - Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; - Blink.colors_min = 2; - Blink.colors_max = 2; - Blink.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - Blink.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - Blink.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - Blink.color_mode = MODE_COLORS_MODE_SPECIFIC; + Blink.name = "Blink"; + Blink.value = CORSAIR_LIGHTING_NODE_MODE_BLINK; + Blink.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Blink.colors_min = 2; + Blink.colors_max = 2; + Blink.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + Blink.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + Blink.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + Blink.color_mode = MODE_COLORS_MODE_SPECIFIC; Blink.colors.resize(2); + Blink.brightness_min = 0; + Blink.brightness_max = 100; + Blink.brightness = 100; modes.push_back(Blink); mode Sequential; - Sequential.name = "Sequential"; - Sequential.value = CORSAIR_LIGHTING_NODE_MODE_SEQUENTIAL; - Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; - Sequential.colors_min = 1; - Sequential.colors_max = 1; - Sequential.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - Sequential.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - Sequential.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - Sequential.direction = MODE_DIRECTION_RIGHT; - Sequential.color_mode = MODE_COLORS_MODE_SPECIFIC; + Sequential.name = "Sequential"; + Sequential.value = CORSAIR_LIGHTING_NODE_MODE_SEQUENTIAL; + Sequential.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Sequential.colors_min = 1; + Sequential.colors_max = 1; + Sequential.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + Sequential.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + Sequential.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + Sequential.direction = MODE_DIRECTION_RIGHT; + Sequential.color_mode = MODE_COLORS_MODE_SPECIFIC; Sequential.colors.resize(1); + Sequential.brightness_min = 0; + Sequential.brightness_max = 100; + Sequential.brightness = 100; modes.push_back(Sequential); mode Rainbow; - Rainbow.name = "Rainbow"; - Rainbow.value = CORSAIR_LIGHTING_NODE_MODE_RAINBOW; - Rainbow.flags = MODE_FLAG_HAS_SPEED; - Rainbow.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; - Rainbow.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; - Rainbow.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; - Rainbow.color_mode = MODE_COLORS_NONE; + Rainbow.name = "Rainbow"; + Rainbow.value = CORSAIR_LIGHTING_NODE_MODE_RAINBOW; + Rainbow.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS; + Rainbow.speed_min = CORSAIR_LIGHTING_NODE_SPEED_SLOW; + Rainbow.speed_max = CORSAIR_LIGHTING_NODE_SPEED_FAST; + Rainbow.speed = CORSAIR_LIGHTING_NODE_SPEED_MEDIUM; + Rainbow.color_mode = MODE_COLORS_NONE; + Rainbow.brightness_min = 0; + Rainbow.brightness_max = 100; + Rainbow.brightness = 100; modes.push_back(Rainbow); SetupZones(); @@ -324,4 +357,13 @@ void RGBController_CorsairLightingNode::DeviceUpdateMode() mode_colors[8]); } } + + if(modes[active_mode].flags & MODE_FLAG_HAS_BRIGHTNESS) + { + corsair->SetBrightness(modes[active_mode].brightness); + } + else + { + corsair->SetBrightness(100); + } }