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) |
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 0000000000..41d566ee3a --- /dev/null +++ b/common/debug.c @@ -0,0 +1,9 @@ +#include <stdbool.h> +#include "debug.h" + + +bool debug_enable = false; +bool debug_matrix = false; +bool debug_keyboard = false; +bool debug_mouse = false; + diff --git a/common/timer.c b/common/timer.c index 48a38c9b68..8b8d37e8b3 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/>. // counter resolution 1ms -volatile uint16_t timer_count = 0; +volatile uint32_t timer_count = 0; void timer_init(void) { @@ -59,7 +59,20 @@ void timer_clear(void) inline uint16_t timer_read(void) { - uint16_t t; + uint32_t t; + + uint8_t sreg = SREG; + cli(); + t = timer_count; + SREG = sreg; + + return (t & 0xFFFF); +} + +inline +uint32_t timer_read32(void) +{ + uint32_t t; uint8_t sreg = SREG; cli(); @@ -72,14 +85,27 @@ uint16_t timer_read(void) inline uint16_t timer_elapsed(uint16_t last) { - uint16_t t; + uint32_t t; + + uint8_t sreg = SREG; + cli(); + t = timer_count; + SREG = sreg; + + return TIMER_DIFF_16((t & 0xFFFF), last); +} + +inline +uint32_t timer_elapsed32(uint32_t last) +{ + uint32_t t; uint8_t sreg = SREG; cli(); t = timer_count; SREG = sreg; - return TIMER_DIFF_MS(t, last); + return TIMER_DIFF_32(t, last); } // excecuted once per 1ms.(excess for just timer count?) diff --git a/common/timer.h b/common/timer.h index d24d3eab62..70b008e6c9 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/>. #endif #define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a)) -#define TIMER_DIFF_RAW(a, b) TIMER_DIFF(a, b, UINT8_MAX) -#define TIMER_DIFF_MS(a, b) TIMER_DIFF(a, b, UINT16_MAX) +#define TIMER_DIFF_8(a, b) TIMER_DIFF(a, b, UINT8_MAX) +#define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) +#define TIMER_DIFF_32(a, b) TIMER_DIFF(a, b, UINT32_MAX) #ifdef __cplusplus extern "C" { #endif -extern volatile uint16_t timer_count; +extern volatile uint32_t timer_count; void timer_init(void); void timer_clear(void); uint16_t timer_read(void); +uint32_t timer_read32(void); uint16_t timer_elapsed(uint16_t last); +uint32_t timer_elapsed32(uint32_t last); #ifdef __cplusplus } #endif diff --git a/protocol/pjrc/main.c b/protocol/pjrc/main.c index 15f14920b4..0b0a44028e 100644 --- a/protocol/pjrc/main.c +++ b/protocol/pjrc/main.c @@ -42,12 +42,6 @@ #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) -bool debug_enable = false; -bool debug_matrix = false; -bool debug_keyboard = false; -bool debug_mouse = false; - - int main(void) { DEBUG_LED_CONFIG; diff --git a/protocol/usb_hid/README b/protocol/usb_hid/README index 9750a1cc8d..5d49cc8d20 100644 --- a/protocol/usb_hid/README +++ b/protocol/usb_hid/README @@ -26,3 +26,11 @@ You can see HID keyboard reports on debug output. Restriction and Bug ------------------- Not statble yet. + +Can't bus-reset a keyboard which already attached on bus properly. + Slow start up of Leonardo's bootloader causes this? + Need to unplug/plug a keyboard after firmware starts up. + MAX3421E doesn't work SAMPLEBUS well to know whether device connected or not. + +Keyboard with other endpoints than boot keyboard may go wrong. + 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 a8c28dd898..3b3f5e3028 100644 --- a/protocol/usb_hid/override_wiring.c +++ b/protocol/usb_hid/override_wiring.c @@ -8,11 +8,11 @@ unsigned long millis() { - return timer_read(); + return timer_read32(); } unsigned long micros() { - return timer_read() * 1000UL; + return timer_read32() * 1000UL; } void delay(unsigned long ms) { diff --git a/protocol/usb_hid/parser.cpp b/protocol/usb_hid/parser.cpp index 4077444b75..66e949518e 100644 --- a/protocol/usb_hid/parser.cpp +++ b/protocol/usb_hid/parser.cpp @@ -3,7 +3,6 @@ #include "parser.h" #include "usb_hid.h" -#include "leonardo_led.h" #include "debug.h" @@ -16,9 +15,9 @@ void KBDReportParser::Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf) ::memcpy(&usb_hid_keyboard_report, buf, sizeof(report_keyboard_t)); usb_hid_time_stamp = millis(); - LED_TX_TOGGLE; debug("KBDReport: "); debug_hex(usb_hid_keyboard_report.mods); + debug(" --"); for (uint8_t i = 0; i < 6; i++) { debug(" "); 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 0000000000..083b68d1f5 --- /dev/null +++ b/protocol/usb_hid/usb_hid.h @@ -0,0 +1,10 @@ +#ifndef USB_HID_H +#define USB_HID_H + +#include "report.h" + + +extern report_keyboard_t usb_hid_keyboard_report; +extern uint16_t usb_hid_time_stamp; + +#endif |