package device import "math/bits" type SupportFlags uint32 func (f SupportFlags) HasAny(d SupportFlags) bool { return (f & d) != 0 } func (f SupportFlags) HasAll(d SupportFlags) bool { return bits.OnesCount32(uint32(f&d)) == bits.OnesCount32(uint32(d)) } const ( SFlagPower SupportFlags = 1 << iota SFlagIntensity SFlagColor SFlagTemperature SFlagSensorButtons SFlagSensorTemperature SFlagSensorLightLevel SFlagSensorPresence ) // ColorFlag is primarily to detect warm-white lights, as XY/RGB/HS/HSK can convert without trouble. type ColorFlag uint32 const ( CFlagXY ColorFlag = 1 << iota CFlagRGB CFlagHS CFlagHSK CFlagKelvin ) func (f ColorFlag) IsColor() bool { return f.HasAny(CFlagXY | CFlagRGB | CFlagHS | CFlagHSK) } func (f ColorFlag) IsWarmWhite() bool { return f&CFlagKelvin == CFlagKelvin } func (f ColorFlag) IsColorOnly() bool { return f != 0 && f&CFlagKelvin == 0 } func (f ColorFlag) IsWarmWhiteOnly() bool { return f == CFlagKelvin } func (f ColorFlag) HasAny(d ColorFlag) bool { return (f & d) != 0 } func (f ColorFlag) HasAll(d ColorFlag) bool { return bits.OnesCount32(uint32(f&d)) == bits.OnesCount32(uint32(d)) }