diff options
Diffstat (limited to 'quantum/sync_timer.c')
-rw-r--r-- | quantum/sync_timer.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/quantum/sync_timer.c b/quantum/sync_timer.c new file mode 100644 index 000000000..de24b463b --- /dev/null +++ b/quantum/sync_timer.c | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | Copyright (C) 2020 Ryan Caltabiano <https://github.com/XScorpion2> | ||
3 | |||
4 | Permission is hereby granted, free of charge, to any person obtaining a copy of | ||
5 | this software and associated documentation files (the "Software"), to deal in | ||
6 | the Software without restriction, including without limitation the rights to | ||
7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies | ||
8 | of the Software, and to permit persons to whom the Software is furnished to do | ||
9 | so, subject to the following conditions: | ||
10 | |||
11 | The above copyright notice and this permission notice shall be included in all | ||
12 | copies or substantial portions of the Software. | ||
13 | |||
14 | If you happen to meet one of the copyright holders in a bar you are obligated | ||
15 | to buy them one pint of beer. | ||
16 | |||
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
23 | SOFTWARE. | ||
24 | */ | ||
25 | |||
26 | #include "sync_timer.h" | ||
27 | #include "keyboard.h" | ||
28 | |||
29 | #if defined(SPLIT_KEYBOARD) && !defined(DISABLE_SYNC_TIMER) | ||
30 | volatile int32_t sync_timer_ms; | ||
31 | |||
32 | void sync_timer_init(void) { sync_timer_ms = 0; } | ||
33 | |||
34 | void sync_timer_update(uint32_t time) { | ||
35 | if (is_keyboard_master()) return; | ||
36 | sync_timer_ms = time - timer_read32(); | ||
37 | } | ||
38 | |||
39 | uint16_t sync_timer_read(void) { | ||
40 | if (is_keyboard_master()) return timer_read(); | ||
41 | return sync_timer_read32(); | ||
42 | } | ||
43 | |||
44 | uint32_t sync_timer_read32(void) { | ||
45 | if (is_keyboard_master()) return timer_read32(); | ||
46 | return sync_timer_ms + timer_read32(); | ||
47 | } | ||
48 | |||
49 | uint16_t sync_timer_elapsed(uint16_t last) { | ||
50 | if (is_keyboard_master()) return timer_elapsed(last); | ||
51 | return TIMER_DIFF_16(sync_timer_read(), last); | ||
52 | } | ||
53 | |||
54 | uint32_t sync_timer_elapsed32(uint32_t last) { | ||
55 | if (is_keyboard_master()) return timer_elapsed32(last); | ||
56 | return TIMER_DIFF_32(sync_timer_read32(), last); | ||
57 | } | ||
58 | #endif | ||