pub const PROFILE_HA: u16 = 0x0104;
pub const DEVICE_ON_OFF_LIGHT: u16 = 0x0100;
pub const DEVICE_DIMMABLE_LIGHT: u16 = 0x0101;
pub const DEVICE_COLOR_TEMPERATURE_LIGHT: u16 = 0x010C;
pub const DEVICE_EXTENDED_COLOR_LIGHT: u16 = 0x010D;
pub const COLOR_CAP_HUE_SAT: u16 = 0x0001;
pub const COLOR_CAP_ENHANCED_HUE: u16 = 0x0002;
pub const COLOR_CAP_COLOR_LOOP: u16 = 0x0004;
pub const COLOR_CAP_XY: u16 = 0x0008;
pub const COLOR_CAP_COLOR_TEMP: u16 = 0x0010;
pub const COLOR_CAP_ALL: u16 = 0x001F;
pub const COLOR_CAP_FULL_NO_LOOP: u16 =
COLOR_CAP_HUE_SAT | COLOR_CAP_ENHANCED_HUE | COLOR_CAP_XY | COLOR_CAP_COLOR_TEMP;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum HueDeviceType {
ExtendedColorLight,
ColorTemperatureLight,
DimmableLight,
OnOffLight,
}
impl HueDeviceType {
pub fn device_id(self) -> u16 {
match self {
Self::ExtendedColorLight => DEVICE_EXTENDED_COLOR_LIGHT,
Self::ColorTemperatureLight => DEVICE_COLOR_TEMPERATURE_LIGHT,
Self::DimmableLight => DEVICE_DIMMABLE_LIGHT,
Self::OnOffLight => DEVICE_ON_OFF_LIGHT,
}
}
pub fn has_level_control(self) -> bool {
!matches!(self, Self::OnOffLight)
}
pub fn has_color_control(self) -> bool {
matches!(self, Self::ExtendedColorLight | Self::ColorTemperatureLight)
}
pub fn has_rgb(self) -> bool {
matches!(self, Self::ExtendedColorLight)
}
pub fn color_params(self) -> (u16, u16, u16) {
match self {
Self::ExtendedColorLight => (COLOR_CAP_FULL_NO_LOOP, 153, 500),
Self::ColorTemperatureLight => (COLOR_CAP_COLOR_TEMP, 153, 454),
Self::DimmableLight | Self::OnOffLight => (0, 0, 0),
}
}
}