diff --git a/src/libhidpp/hidpp20/IIllumination.cpp b/src/libhidpp/hidpp20/IIllumination.cpp index 59eb84b..a0e9fd4 100644 --- a/src/libhidpp/hidpp20/IIllumination.cpp +++ b/src/libhidpp/hidpp20/IIllumination.cpp @@ -111,3 +111,38 @@ void IIllumination::setColorTemperature(uint16_t value) writeBE (params, 0, value); call (SetColorTemperature, params); } + +bool IIllumination::illuminationChangeEvent (const HIDPP::Report &event) +{ + assert (event.function () == IIllumination::IlluminationChangeEvent); + auto params = event.parameterBegin (); + return readLE (params) != 0; +} + +uint16_t brightnessChangeEvent (const HIDPP::Report &event) +{ + assert (event.function () == IIllumination::BrightnessChangeEvent); + auto params = event.parameterBegin (); + return readBE (params); +} + +uint16_t colorTemperatureChangeEvent (const HIDPP::Report &event) +{ + assert (event.function () == IIllumination::ColorTemperatureChangeEvent); + auto params = event.parameterBegin (); + return readBE (params); +} + +uint16_t brightnessEffectiveMaxChangeEvent (const HIDPP::Report &event) +{ + assert (event.function () == IIllumination::BrightnessEffectiveMaxChangeEvent); + auto params = event.parameterBegin (); + return readBE (params); +} + +uint16_t brightnessClampedEvent (const HIDPP::Report &event) +{ + assert (event.function () == IIllumination::BrightnessClampedEvent); + auto params = event.parameterBegin (); + return readBE (params); +} diff --git a/src/libhidpp/hidpp20/IIllumination.h b/src/libhidpp/hidpp20/IIllumination.h index 9a4171e..510c032 100644 --- a/src/libhidpp/hidpp20/IIllumination.h +++ b/src/libhidpp/hidpp20/IIllumination.h @@ -48,6 +48,14 @@ class IIllumination: public FeatureInterface GetBrightnessEffectiveMax = 12, }; + enum Event { + IlluminationChangeEvent = 0, + BrightnessChangeEvent = 1, + ColorTemperatureChangeEvent = 2, + BrightnessEffectiveMaxChangeEvent = 3, + BrightnessClampedEvent = 4, + }; + enum Flags { hasEvents = 1 << 0, hasLinearLevels = 1 << 1, @@ -110,6 +118,33 @@ class IIllumination: public FeatureInterface * Set the Illumination color temperature. */ void setColorTemperature(uint16_t value); + + /** + * Parse an illumination change event. + */ + bool illuminationChangeEvent (const HIDPP::Report &event); + + /** + * Parse a brightness change event. + */ + uint16_t brightnessChangeEvent (const HIDPP::Report &event); + + /** + * Parse a color temperature change event. + */ + uint16_t colorTemperatureChangeEvent (const HIDPP::Report &event); + + /** + * Parse a change in the effective maximum brightness. + */ + uint16_t brightnessEffectiveMaxChangeEvent (const HIDPP::Report &event); + + /** + * Parse a notification of a recent request to set the + * brightness to a value larger than the current effective + * maximum brightness. + */ + uint16_t brightnessClampedEvent (const HIDPP::Report &event); }; }