On Sat, Jul 07, 2018 at 10:49:09AM -0700, Michael Davidsaver wrote: > Signed-off-by: Michael Davidsaver Reviewed-by: David Gibson > --- > tests/ds-rtc-common.h | 9 ++++--- > tests/ds-rtc-current-test.c | 2 +- > tests/ds-rtc-set-test.c | 58 +++++++++++++++++++++++++++++++++++++++++++-- > 3 files changed, 63 insertions(+), 6 deletions(-) > > diff --git a/tests/ds-rtc-common.h b/tests/ds-rtc-common.h > index c8e6c2bc5b..5bc7ab32a6 100644 > --- a/tests/ds-rtc-common.h > +++ b/tests/ds-rtc-common.h > @@ -20,12 +20,15 @@ static uint8_t addr; > static bool use_century; > > /* input buffer must have at least 7 elements */ > -static inline time_t rtc_parse(const uint8_t *buf) > +static inline time_t rtc_parse(const uint8_t *buf, int *mmode) > { > struct tm parts; > > parts.tm_sec = from_bcd(buf[0]); > parts.tm_min = from_bcd(buf[1]); > + if (mmode) { > + *mmode = !!(buf[2] & 0x40); > + } > if (buf[2] & 0x40) { > /* 12 hour */ > /* HOUR register is 1-12. */ > @@ -51,7 +54,7 @@ static inline time_t rtc_parse(const uint8_t *buf) > return mktimegm(&parts); > } > > -static time_t rtc_gettime(void) > +static time_t rtc_gettime(int *mmode) > { > uint8_t buf[7]; > > @@ -61,7 +64,7 @@ static time_t rtc_gettime(void) > /* read back current time registers */ > i2c_recv(i2c, addr, buf, 7); > > - return rtc_parse(buf); > + return rtc_parse(buf, mmode); > } > > #endif /* DSRTCCOMMON_H */ > diff --git a/tests/ds-rtc-current-test.c b/tests/ds-rtc-current-test.c > index 6acbbed9a6..3c15482a9d 100644 > --- a/tests/ds-rtc-current-test.c > +++ b/tests/ds-rtc-current-test.c > @@ -28,7 +28,7 @@ void test_rtc_current(void) > > actual = time(NULL); > /* new second may start here */ > - expected = rtc_gettime(); > + expected = rtc_gettime(NULL); > g_assert_cmpuint(expected, <=, actual + max_delta); > g_assert_cmpuint(expected, >=, actual); > } > diff --git a/tests/ds-rtc-set-test.c b/tests/ds-rtc-set-test.c > index 35e1a36281..3a742e897f 100644 > --- a/tests/ds-rtc-set-test.c > +++ b/tests/ds-rtc-set-test.c > @@ -29,6 +29,18 @@ static uint8_t test_time_24_12am[8] = { > 0x17, > }; > > +static uint8_t test_time_12_12am[8] = { > + 0, /* address */ > + /* Wed, 22 Nov 2017 00:30:53 +0000 */ > + 0x53, > + 0x30, > + 0x52, /* 12 AM in 12 hour mode */ > + 0x03, /* monday is our day 1 */ > + 0x22, > + 0x11 | 0x80, > + 0x17, > +}; > + > static uint8_t test_time_24_6am[8] = { > 0, /* address */ > /* Wed, 22 Nov 2017 06:30:53 +0000 */ > @@ -41,6 +53,18 @@ static uint8_t test_time_24_6am[8] = { > 0x17, > }; > > +static uint8_t test_time_12_6am[8] = { > + 0, /* address */ > + /* Wed, 22 Nov 2017 06:30:53 +0000 */ > + 0x53, > + 0x30, > + 0x46, /* 6 AM in 12 hour mode */ > + 0x03, /* monday is our day 1 */ > + 0x22, > + 0x11 | 0x80, > + 0x17, > +}; > + > static uint8_t test_time_24_12pm[8] = { > 0, /* address */ > /* Wed, 22 Nov 2017 12:30:53 +0000 */ > @@ -53,6 +77,18 @@ static uint8_t test_time_24_12pm[8] = { > 0x17, > }; > > +static uint8_t test_time_12_12pm[8] = { > + 0, /* address */ > + /* Wed, 22 Nov 2017 12:30:53 +0000 */ > + 0x53, > + 0x30, > + 0x72, /* 12 PM in 24 hour mode */ > + 0x03, /* monday is our day 1 */ > + 0x22, > + 0x11 | 0x80, > + 0x17, > +}; > + > static uint8_t test_time_24_6pm[8] = { > 0, /* address */ > /* Wed, 22 Nov 2017 18:30:53 +0000 */ > @@ -65,6 +101,18 @@ static uint8_t test_time_24_6pm[8] = { > 0x17, > }; > > +static uint8_t test_time_12_6pm[8] = { > + 0, /* address */ > + /* Wed, 22 Nov 2017 18:30:53 +0000 */ > + 0x53, > + 0x30, > + 0x66, /* 6 PM in 12 hour mode */ > + 0x03, /* monday is our day 1 */ > + 0x22, > + 0x11 | 0x80, > + 0x17, > +}; > + > /* write in and read back known time */ > static > void test_rtc_set(const void *raw) > @@ -76,16 +124,18 @@ void test_rtc_set(const void *raw) > > const uint8_t *testtime = raw; > time_t expected, actual; > + int mode_expect, mode_actual; > > /* skip address pointer and parse remainder */ > - expected = rtc_parse(&testtime[1]); > + expected = rtc_parse(&testtime[1], &mode_expect); > > i2c_send(i2c, addr, testtime, 8); > /* host may start new second here */ > - actual = rtc_gettime(); > + actual = rtc_gettime(&mode_actual); > > g_assert_cmpuint(expected, <=, actual); > g_assert_cmpuint(expected + max_delta, >=, actual); > + g_assert_cmpint(mode_expect, ==, mode_actual); > } > > int main(int argc, char *argv[]) > @@ -108,6 +158,10 @@ int main(int argc, char *argv[]) > qtest_add_data_func("/ds-rtc-i2c/set24_6am", test_time_24_6am, test_rtc_set); > qtest_add_data_func("/ds-rtc-i2c/set24_12pm", test_time_24_12pm, test_rtc_set); > qtest_add_data_func("/ds-rtc-i2c/set24_6pm", test_time_24_6pm, test_rtc_set); > + qtest_add_data_func("/ds-rtc-i2c/set12_12am", test_time_12_12am, test_rtc_set); > + qtest_add_data_func("/ds-rtc-i2c/set12_6am", test_time_12_6am, test_rtc_set); > + qtest_add_data_func("/ds-rtc-i2c/set12_12pm", test_time_12_12pm, test_rtc_set); > + qtest_add_data_func("/ds-rtc-i2c/set12_6pm", test_time_12_6pm, test_rtc_set); > > ret = g_test_run(); > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson