73 if(bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::ID)) != DeviceID){
76 if(retries > 10)
return false;
105 ColorSensor::s_integrationTime =
enumValue(integrationTime);
106 bsp::I2CA::write<u8>(DeviceAddress,
enumValue(RegisterID::ATIME),
enumValue(integrationTime));
116 bsp::I2CA::write<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::CTRL),
enumValue(gain));
124 EnableRegister enRegister = { 0 };
127 bsp::I2CA::write<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::EN), bit_cast<u8>(enRegister));
136 EnableRegister enRegister = { 0 };
137 bsp::I2CA::write<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::EN), bit_cast<u8>(enRegister));
146 EnableRegister enRegister = { 0 };
150 bsp::I2CA::write<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::EN), bit_cast<u8>(enRegister));
152 return static_cast<u16>((256 - ColorSensor::s_integrationTime) * 2.4F + 0.9);
162 return (bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::STATUS)) & ConversionDone);
180 color.
r = bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::RDATA));
181 color.
r |= bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::RDATAH)) << 8;
183 color.
g = bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::GDATA));
184 color.
g |= bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::GDATAH)) << 8;
186 color.
b = bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::BDATA));
187 color.
b |= bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::BDATAH)) << 8;
189 color.
a = bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::BDATA));
190 color.
a |= bsp::I2CA::read<u8>(DeviceAddress, CommandBit |
enumValue(RegisterID::BDATAH)) << 8;
208 color8.
r =
static_cast<u8>(color16.
r >> 8);
209 color8.
g =
static_cast<u8>(color16.
g >> 8);
210 color8.
b =
static_cast<u8>(color16.
b >> 8);
211 color8.
a =
static_cast<u8>(color16.
a >> 8);
219 static inline u8 s_integrationTime;
224 enum class RegisterID :
u8{
251 struct EnableRegister {
259 static_assert (
sizeof(EnableRegister) ==
sizeof(
u8),
"Enable register definition wrong");
264 struct StatusRegister {
270 static_assert (
sizeof(StatusRegister) ==
sizeof(
u8),
"Status register definition wrong");
272 constexpr
static inline u8 DeviceAddress = 0x52;
273 constexpr
static inline u8 DeviceID = 0x44;
274 constexpr
static inline u8 CommandBit = 0x80;
275 constexpr
static inline u8 ConversionDone = 0x01;