Add helper to allow writing partial register data
This commit is contained in:
parent
80cce4671f
commit
92096b6101
29
ds3231.hpp
29
ds3231.hpp
@ -126,6 +126,35 @@ class DS3231 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <uint8_t Address, uint8_t Offset, typename Register>
|
||||||
|
static void writePartialRegister(const Register ®)
|
||||||
|
{
|
||||||
|
static_assert(Offset < sizeof(Register), "Offset out of bounds");
|
||||||
|
|
||||||
|
if constexpr (Address == TIME_REG_ADDR) {
|
||||||
|
static_assert(type::is_same_v<Register, detail::TimeReg>, "Invalid register type");
|
||||||
|
} else if constexpr (Address == ALARM1_REG_ADDR) {
|
||||||
|
static_assert(type::is_same_v<Register, detail::Alarm1Reg>, "Invalid register type");
|
||||||
|
} else if constexpr (Address == ALARM2_REG_ADDR) {
|
||||||
|
static_assert(type::is_same_v<Register, detail::Alarm2Reg>, "Invalid register type");
|
||||||
|
} else if constexpr (Address == CONTROL_REG_ADDR) {
|
||||||
|
static_assert(type::is_same_v<Register, detail::ControlReg>, "Invalid register type");
|
||||||
|
} else if constexpr (Address == CONTROL_STATUS_REG_ADDR) {
|
||||||
|
static_assert(type::is_same_v<Register, detail::ControlStatusReg>, "Invalid register type");
|
||||||
|
} else if constexpr (Address == AGING_OFFSET_REG_ADDR) {
|
||||||
|
static_assert(type::is_same_v<Register, detail::AgingOffsetReg>, "Invalid register type");
|
||||||
|
} else if constexpr (Address == TEMP_REG_ADDR) {
|
||||||
|
static_assert(type::is_same_v<Register, detail::TempReg>, "Invalid register type");
|
||||||
|
} else {
|
||||||
|
static_assert(type::always_false_v<Register>, "Invalid register address");
|
||||||
|
}
|
||||||
|
|
||||||
|
I2cDriver::template start<I2C_ADDRESS>(false);
|
||||||
|
I2cDriver::write(Address + Offset);
|
||||||
|
I2cDriver::template writeBytes<sizeof(Register) - Offset>(reinterpret_cast<const uint8_t *>(®) + Offset);
|
||||||
|
I2cDriver::stop();
|
||||||
|
}
|
||||||
|
|
||||||
static uint8_t calcDayOfWeek(uint16_t year, uint8_t month, uint16_t day)
|
static uint8_t calcDayOfWeek(uint16_t year, uint8_t month, uint16_t day)
|
||||||
{
|
{
|
||||||
day += month < 3 ? year-- : year - 2;
|
day += month < 3 ? year-- : year - 2;
|
||||||
|
Loading…
Reference in New Issue
Block a user