diff options
author | tmk <nobody@nowhere> | 2012-09-02 23:47:18 +0900 |
---|---|---|
committer | tmk <nobody@nowhere> | 2012-09-02 23:47:18 +0900 |
commit | c77c5043a121f195b3a552feb8283424a0652ce2 (patch) | |
tree | 5b20b8c5cb7702408ffc10af0c259d71e6ce4ce9 | |
parent | b17f52ebe188b612d0cb063bd2386434a952aaf4 (diff) | |
download | qmk_firmware-c77c5043a121f195b3a552feb8283424a0652ce2.tar.gz qmk_firmware-c77c5043a121f195b3a552feb8283424a0652ce2.zip |
usb_hid: Fix timer size uint16_t to uint32_t;
-rw-r--r-- | common/debug.c | 9 | ||||
-rw-r--r-- | common/timer.c | 34 | ||||
-rw-r--r-- | common/timer.h | 9 | ||||
-rw-r--r-- | protocol/pjrc/main.c | 6 | ||||
-rw-r--r-- | protocol/usb_hid/README | 8 | ||||
-rw-r--r-- | protocol/usb_hid/override_wiring.c | 4 | ||||
-rw-r--r-- | protocol/usb_hid/parser.cpp | 3 | ||||
-rw-r--r-- | protocol/usb_hid/usb_hid.h | 10 |
8 files changed, 66 insertions, 17 deletions
diff --git a/common/debug.c b/common/debug.c new file mode 100644 index 000000000..41d566ee3 --- /dev/null +++ b/common/debug.c | |||
@@ -0,0 +1,9 @@ | |||
1 | #include <stdbool.h> | ||
2 | #include "debug.h" | ||
3 | |||
4 | |||
5 | bool debug_enable = false; | ||
6 | bool debug_matrix = false; | ||
7 | bool debug_keyboard = false; | ||
8 | bool debug_mouse = false; | ||
9 | |||
diff --git a/common/timer.c b/common/timer.c index 48a38c9b6..8b8d37e8b 100644 --- a/common/timer.c +++ b/common/timer.c | |||
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
22 | 22 | ||
23 | 23 | ||
24 | // counter resolution 1ms | 24 | // counter resolution 1ms |
25 | volatile uint16_t timer_count = 0; | 25 | volatile uint32_t timer_count = 0; |
26 | 26 | ||
27 | void timer_init(void) | 27 | void timer_init(void) |
28 | { | 28 | { |
@@ -59,7 +59,20 @@ void timer_clear(void) | |||
59 | inline | 59 | inline |
60 | uint16_t timer_read(void) | 60 | uint16_t timer_read(void) |
61 | { | 61 | { |
62 | uint16_t t; | 62 | uint32_t t; |
63 | |||
64 | uint8_t sreg = SREG; | ||
65 | cli(); | ||
66 | t = timer_count; | ||
67 | SREG = sreg; | ||
68 | |||
69 | return (t & 0xFFFF); | ||
70 | } | ||
71 | |||
72 | inline | ||
73 | uint32_t timer_read32(void) | ||
74 | { | ||
75 | uint32_t t; | ||
63 | 76 | ||
64 | uint8_t sreg = SREG; | 77 | uint8_t sreg = SREG; |
65 | cli(); | 78 | cli(); |
@@ -72,14 +85,27 @@ uint16_t timer_read(void) | |||
72 | inline | 85 | inline |
73 | uint16_t timer_elapsed(uint16_t last) | 86 | uint16_t timer_elapsed(uint16_t last) |
74 | { | 87 | { |
75 | uint16_t t; | 88 | uint32_t t; |
89 | |||
90 | uint8_t sreg = SREG; | ||
91 | cli(); | ||
92 | t = timer_count; | ||
93 | SREG = sreg; | ||
94 | |||
95 | return TIMER_DIFF_16((t & 0xFFFF), last); | ||
96 | } | ||
97 | |||
98 | inline | ||
99 | uint32_t timer_elapsed32(uint32_t last) | ||
100 | { | ||
101 | uint32_t t; | ||
76 | 102 | ||
77 | uint8_t sreg = SREG; | 103 | uint8_t sreg = SREG; |
78 | cli(); | 104 | cli(); |
79 | t = timer_count; | 105 | t = timer_count; |
80 | SREG = sreg; | 106 | SREG = sreg; |
81 | 107 | ||
82 | return TIMER_DIFF_MS(t, last); | 108 | return TIMER_DIFF_32(t, last); |
83 | } | 109 | } |
84 | 110 | ||
85 | // excecuted once per 1ms.(excess for just timer count?) | 111 | // excecuted once per 1ms.(excess for just timer count?) |
diff --git a/common/timer.h b/common/timer.h index d24d3eab6..70b008e6c 100644 --- a/common/timer.h +++ b/common/timer.h | |||
@@ -40,20 +40,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
40 | #endif | 40 | #endif |
41 | 41 | ||
42 | #define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a)) | 42 | #define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a)) |
43 | #define TIMER_DIFF_RAW(a, b) TIMER_DIFF(a, b, UINT8_MAX) | 43 | #define TIMER_DIFF_8(a, b) TIMER_DIFF(a, b, UINT8_MAX) |
44 | #define TIMER_DIFF_MS(a, b) TIMER_DIFF(a, b, UINT16_MAX) | 44 | #define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) |
45 | #define TIMER_DIFF_32(a, b) TIMER_DIFF(a, b, UINT32_MAX) | ||
45 | 46 | ||
46 | 47 | ||
47 | #ifdef __cplusplus | 48 | #ifdef __cplusplus |
48 | extern "C" { | 49 | extern "C" { |
49 | #endif | 50 | #endif |
50 | extern volatile uint16_t timer_count; | 51 | extern volatile uint32_t timer_count; |
51 | 52 | ||
52 | 53 | ||
53 | void timer_init(void); | 54 | void timer_init(void); |
54 | void timer_clear(void); | 55 | void timer_clear(void); |
55 | uint16_t timer_read(void); | 56 | uint16_t timer_read(void); |
57 | uint32_t timer_read32(void); | ||
56 | uint16_t timer_elapsed(uint16_t last); | 58 | uint16_t timer_elapsed(uint16_t last); |
59 | uint32_t timer_elapsed32(uint32_t last); | ||
57 | #ifdef __cplusplus | 60 | #ifdef __cplusplus |
58 | } | 61 | } |
59 | #endif | 62 | #endif |
diff --git a/protocol/pjrc/main.c b/protocol/pjrc/main.c index 15f14920b..0b0a44028 100644 --- a/protocol/pjrc/main.c +++ b/protocol/pjrc/main.c | |||
@@ -42,12 +42,6 @@ | |||
42 | #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) | 42 | #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) |
43 | 43 | ||
44 | 44 | ||
45 | bool debug_enable = false; | ||
46 | bool debug_matrix = false; | ||
47 | bool debug_keyboard = false; | ||
48 | bool debug_mouse = false; | ||
49 | |||
50 | |||
51 | int main(void) | 45 | int main(void) |
52 | { | 46 | { |
53 | DEBUG_LED_CONFIG; | 47 | DEBUG_LED_CONFIG; |
diff --git a/protocol/usb_hid/README b/protocol/usb_hid/README index 9750a1cc8..5d49cc8d2 100644 --- a/protocol/usb_hid/README +++ b/protocol/usb_hid/README | |||
@@ -26,3 +26,11 @@ You can see HID keyboard reports on debug output. | |||
26 | Restriction and Bug | 26 | Restriction and Bug |
27 | ------------------- | 27 | ------------------- |
28 | Not statble yet. | 28 | Not statble yet. |
29 | |||
30 | Can't bus-reset a keyboard which already attached on bus properly. | ||
31 | Slow start up of Leonardo's bootloader causes this? | ||
32 | Need to unplug/plug a keyboard after firmware starts up. | ||
33 | MAX3421E doesn't work SAMPLEBUS well to know whether device connected or not. | ||
34 | |||
35 | Keyboard with other endpoints than boot keyboard may go wrong. | ||
36 | On my keyboard with mouse key the converter locks up when using mouse key function. | ||
diff --git a/protocol/usb_hid/override_wiring.c b/protocol/usb_hid/override_wiring.c index a8c28dd89..3b3f5e302 100644 --- a/protocol/usb_hid/override_wiring.c +++ b/protocol/usb_hid/override_wiring.c | |||
@@ -8,11 +8,11 @@ | |||
8 | 8 | ||
9 | unsigned long millis() | 9 | unsigned long millis() |
10 | { | 10 | { |
11 | return timer_read(); | 11 | return timer_read32(); |
12 | } | 12 | } |
13 | unsigned long micros() | 13 | unsigned long micros() |
14 | { | 14 | { |
15 | return timer_read() * 1000UL; | 15 | return timer_read32() * 1000UL; |
16 | } | 16 | } |
17 | void delay(unsigned long ms) | 17 | void delay(unsigned long ms) |
18 | { | 18 | { |
diff --git a/protocol/usb_hid/parser.cpp b/protocol/usb_hid/parser.cpp index 4077444b7..66e949518 100644 --- a/protocol/usb_hid/parser.cpp +++ b/protocol/usb_hid/parser.cpp | |||
@@ -3,7 +3,6 @@ | |||
3 | #include "parser.h" | 3 | #include "parser.h" |
4 | #include "usb_hid.h" | 4 | #include "usb_hid.h" |
5 | 5 | ||
6 | #include "leonardo_led.h" | ||
7 | #include "debug.h" | 6 | #include "debug.h" |
8 | 7 | ||
9 | 8 | ||
@@ -16,9 +15,9 @@ void KBDReportParser::Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf) | |||
16 | ::memcpy(&usb_hid_keyboard_report, buf, sizeof(report_keyboard_t)); | 15 | ::memcpy(&usb_hid_keyboard_report, buf, sizeof(report_keyboard_t)); |
17 | usb_hid_time_stamp = millis(); | 16 | usb_hid_time_stamp = millis(); |
18 | 17 | ||
19 | LED_TX_TOGGLE; | ||
20 | debug("KBDReport: "); | 18 | debug("KBDReport: "); |
21 | debug_hex(usb_hid_keyboard_report.mods); | 19 | debug_hex(usb_hid_keyboard_report.mods); |
20 | debug(" --"); | ||
22 | for (uint8_t i = 0; i < 6; i++) { | 21 | for (uint8_t i = 0; i < 6; i++) { |
23 | debug(" "); | 22 | debug(" "); |
24 | debug_hex(usb_hid_keyboard_report.keys[i]); | 23 | debug_hex(usb_hid_keyboard_report.keys[i]); |
diff --git a/protocol/usb_hid/usb_hid.h b/protocol/usb_hid/usb_hid.h new file mode 100644 index 000000000..083b68d1f --- /dev/null +++ b/protocol/usb_hid/usb_hid.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef USB_HID_H | ||
2 | #define USB_HID_H | ||
3 | |||
4 | #include "report.h" | ||
5 | |||
6 | |||
7 | extern report_keyboard_t usb_hid_keyboard_report; | ||
8 | extern uint16_t usb_hid_time_stamp; | ||
9 | |||
10 | #endif | ||