Skip to content

Commit dfb2e44

Browse files
committed
libtock: rtc: use bitshifts
1 parent 1ab8c16 commit dfb2e44

1 file changed

Lines changed: 9 additions & 10 deletions

File tree

libtock/peripherals/rtc.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
// - previous 5 store the hour
1414
// - previous 3 store the day_of_the_week
1515
static void rtc_convert_args_to_date(uint32_t date, uint32_t time, libtock_rtc_date_t* out) {
16-
out->year = date % (1 << 21) / (1 << 9);
17-
out->month = date % (1 << 9) / (1 << 5);
18-
out->day = date % (1 << 5);
16+
out->year = (date >> 9) & 0xFFF;
17+
out->month = (date >> 5) & 0xF;
18+
out->day = date & 0x1F;
1919

20-
out->day_of_week = time % (1 << 20) / (1 << 17);
21-
out->hour = time % (1 << 17) / (1 << 12);
22-
out->minute = time % (1 << 12) / (1 << 6);
23-
out->seconds = time % (1 << 6);
20+
out->day_of_week = (time >> 17) & 0x7;
21+
out->hour = (time >> 12) & 0x1F;
22+
out->minute = (time >> 6) & 0x3F;
23+
out->seconds = time & 0x3F;
2424
}
2525

2626
static void rtc_date_cb(int status,
@@ -57,9 +57,8 @@ returncode_t libtock_rtc_get_date(libtock_rtc_callback_date cb) {
5757
}
5858

5959
returncode_t libtock_rtc_set_date(libtock_rtc_date_t* set_date, libtock_rtc_callback_done cb) {
60-
uint32_t date = set_date->year * (1 << 9) + set_date->month * (1 << 5) + set_date->day;
61-
uint32_t time = set_date->day_of_week *
62-
(1 << 17) + set_date->hour * (1 << 12) + set_date->minute * (1 << 6) + set_date->seconds;
60+
uint32_t date = (set_date->year << 9) | (set_date->month << 5) | set_date->day;
61+
uint32_t time = (set_date->day_of_week << 17) | (set_date->hour << 12) | (set_date->minute << 6) | set_date->seconds;
6362

6463
returncode_t ret;
6564

0 commit comments

Comments
 (0)