From 044051c2d9785c5555de3888272bec2e83f5bf34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Poulhi=C3=A8s?= Date: Wed, 17 Jun 2020 14:27:56 +0200 Subject: [PATCH] Support setting alarms from a NaiveTime It allows for more concise user code when setting alarm from such object. --- src/ds323x/alarms.rs | 28 ++++++++++++++++++++++++++++ tests/alarms.rs | 18 +++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/ds323x/alarms.rs b/src/ds323x/alarms.rs index d5b91f2..939f0b6 100644 --- a/src/ds323x/alarms.rs +++ b/src/ds323x/alarms.rs @@ -2,6 +2,7 @@ use super::super::{BitFlags, Ds323x, Error, Hours, Register}; use super::{decimal_to_packed_bcd, hours_to_register}; +use crate::ds323x::{NaiveTime, Timelike}; use interface::{ReadData, WriteData}; /// Parameters for setting Alarm1 on a day of the month @@ -195,6 +196,20 @@ where self.iface.write_data(&mut data) } + /// Set Alarm1 for a time (fires when hours, minutes and seconds match). + /// + /// Will return an `Error::InvalidInputData` if any of the parameters is out of range. + /// day is not used by the matching strategy but is set to 1. + pub fn set_alarm1_hms(&mut self, when: NaiveTime) -> Result<(), Error> { + let alarm = DayAlarm1 { + day: 1, + hour: Hours::H24(when.hour() as u8), + minute: when.minute() as u8, + second: when.second() as u8, + }; + self.set_alarm1_day(alarm, Alarm1Matching::HoursMinutesAndSecondsMatch) + } + /// Set Alarm1 for weekday. /// /// Will return an `Error::InvalidInputData` if any of the used parameters @@ -274,6 +289,19 @@ where self.iface.write_data(&mut data) } + /// Set Alarm2 for a time (fires when hours, minutes and seconds match). + /// + /// Will return an `Error::InvalidInputData` if any of the parameters is out of range. + /// day is not used by the matching strategy but is set to 1. + pub fn set_alarm2_hm(&mut self, when: NaiveTime) -> Result<(), Error> { + let alarm = DayAlarm2 { + day: 1, + hour: Hours::H24(when.hour() as u8), + minute: when.minute() as u8, + }; + self.set_alarm2_day(alarm, Alarm2Matching::HoursAndMinutesMatch) + } + /// Set Alarm2 for weekday. /// /// Will return an `Error::InvalidInputData` if any of the used parameters diff --git a/tests/alarms.rs b/tests/alarms.rs index c9f3908..a2565ba 100644 --- a/tests/alarms.rs +++ b/tests/alarms.rs @@ -8,7 +8,7 @@ use common::{ }; extern crate ds323x; use ds323x::{ - Alarm1Matching as A1M, Alarm2Matching as A2M, DayAlarm1, DayAlarm2, Error, Hours, + Alarm1Matching as A1M, Alarm2Matching as A2M, DayAlarm1, DayAlarm2, Error, Hours, NaiveTime, WeekdayAlarm1, WeekdayAlarm2, }; @@ -635,7 +635,13 @@ mod alarm1_day { }, A1M::AllMatch ); - + set_alarm_test!( + match_hms_naivetime, + set_alarm1_hms, + ALARM1_SECONDS, + [4, 3, 2, AM | 1], + NaiveTime::from_hms(2, 3, 4) + ); set_alarm_test!( match_hms, set_alarm1_day, @@ -914,7 +920,13 @@ mod alarm2_day { }, A2M::AllMatch ); - + set_alarm_test!( + match_hm_naivetime, + set_alarm2_hm, + ALARM2_MINUTES, + [3, 2, AM | 1], + NaiveTime::from_hms(2, 3, 0) + ); set_alarm_test!( match_hm, set_alarm2_day,