Signed-off-by: Michael Davidsaver <mdavidsa...@gmail.com> --- 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(); -- 2.11.0