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)
|
||||
{
|
||||
day += month < 3 ? year-- : year - 2;
|
||||
|
Loading…
Reference in New Issue
Block a user