|
13 | 13 | // - previous 5 store the hour |
14 | 14 | // - previous 3 store the day_of_the_week |
15 | 15 | 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; |
19 | 19 |
|
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; |
24 | 24 | } |
25 | 25 |
|
26 | 26 | static void rtc_date_cb(int status, |
@@ -57,9 +57,8 @@ returncode_t libtock_rtc_get_date(libtock_rtc_callback_date cb) { |
57 | 57 | } |
58 | 58 |
|
59 | 59 | 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; |
63 | 62 |
|
64 | 63 | returncode_t ret; |
65 | 64 |
|
|
0 commit comments