aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2012-09-02 23:47:18 +0900
committertmk <nobody@nowhere>2012-09-02 23:47:18 +0900
commitc77c5043a121f195b3a552feb8283424a0652ce2 (patch)
tree5b20b8c5cb7702408ffc10af0c259d71e6ce4ce9
parentb17f52ebe188b612d0cb063bd2386434a952aaf4 (diff)
downloadqmk_firmware-c77c5043a121f195b3a552feb8283424a0652ce2.tar.gz
qmk_firmware-c77c5043a121f195b3a552feb8283424a0652ce2.zip
usb_hid: Fix timer size uint16_t to uint32_t;
-rw-r--r--common/debug.c9
-rw-r--r--common/timer.c34
-rw-r--r--common/timer.h9
-rw-r--r--protocol/pjrc/main.c6
-rw-r--r--protocol/usb_hid/README8
-rw-r--r--protocol/usb_hid/override_wiring.c4
-rw-r--r--protocol/usb_hid/parser.cpp3
-rw-r--r--protocol/usb_hid/usb_hid.h10
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
5bool debug_enable = false;
6bool debug_matrix = false;
7bool debug_keyboard = false;
8bool 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
25volatile uint16_t timer_count = 0; 25volatile uint32_t timer_count = 0;
26 26
27void timer_init(void) 27void timer_init(void)
28{ 28{
@@ -59,7 +59,20 @@ void timer_clear(void)
59inline 59inline
60uint16_t timer_read(void) 60uint16_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
72inline
73uint32_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)
72inline 85inline
73uint16_t timer_elapsed(uint16_t last) 86uint16_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
98inline
99uint32_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
48extern "C" { 49extern "C" {
49#endif 50#endif
50extern volatile uint16_t timer_count; 51extern volatile uint32_t timer_count;
51 52
52 53
53void timer_init(void); 54void timer_init(void);
54void timer_clear(void); 55void timer_clear(void);
55uint16_t timer_read(void); 56uint16_t timer_read(void);
57uint32_t timer_read32(void);
56uint16_t timer_elapsed(uint16_t last); 58uint16_t timer_elapsed(uint16_t last);
59uint32_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
45bool debug_enable = false;
46bool debug_matrix = false;
47bool debug_keyboard = false;
48bool debug_mouse = false;
49
50
51int main(void) 45int 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.
26Restriction and Bug 26Restriction and Bug
27------------------- 27-------------------
28Not statble yet. 28Not statble yet.
29
30Can'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
35Keyboard 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
9unsigned long millis() 9unsigned long millis()
10{ 10{
11 return timer_read(); 11 return timer_read32();
12} 12}
13unsigned long micros() 13unsigned long micros()
14{ 14{
15 return timer_read() * 1000UL; 15 return timer_read32() * 1000UL;
16} 16}
17void delay(unsigned long ms) 17void 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
7extern report_keyboard_t usb_hid_keyboard_report;
8extern uint16_t usb_hid_time_stamp;
9
10#endif