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 | ||
