Эх сурвалжийг харах

usb_hid: Fix timer size uint16_t to uint32_t;

tmk 12 жил өмнө
parent
commit
c77c5043a1

+ 9 - 0
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;
+

+ 30 - 4
common/timer.c

@@ -22,7 +22,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 
 
 // counter resolution 1ms
 // counter resolution 1ms
-volatile uint16_t timer_count = 0;
+volatile uint32_t timer_count = 0;
 
 
 void timer_init(void)
 void timer_init(void)
 {
 {
@@ -59,7 +59,20 @@ void timer_clear(void)
 inline
 inline
 uint16_t timer_read(void)
 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;
     uint8_t sreg = SREG;
     cli();
     cli();
@@ -72,14 +85,27 @@ uint16_t timer_read(void)
 inline
 inline
 uint16_t timer_elapsed(uint16_t last)
 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;
     uint8_t sreg = SREG;
     cli();
     cli();
     t = timer_count;
     t = timer_count;
     SREG = sreg;
     SREG = sreg;
 
 
-    return TIMER_DIFF_MS(t, last);
+    return TIMER_DIFF_32(t, last);
 }
 }
 
 
 // excecuted once per 1ms.(excess for just timer count?)
 // excecuted once per 1ms.(excess for just timer count?)

+ 6 - 3
common/timer.h

@@ -40,20 +40,23 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #endif
 #endif
 
 
 #define TIMER_DIFF(a, b, max)   ((a) >= (b) ?  (a) - (b) : (max) - (b) + (a))
 #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
 #ifdef __cplusplus
 extern "C" {
 extern "C" {
 #endif
 #endif
-extern volatile uint16_t timer_count;
+extern volatile uint32_t timer_count;
 
 
 
 
 void timer_init(void);
 void timer_init(void);
 void timer_clear(void);
 void timer_clear(void);
 uint16_t timer_read(void);
 uint16_t timer_read(void);
+uint32_t timer_read32(void);
 uint16_t timer_elapsed(uint16_t last);
 uint16_t timer_elapsed(uint16_t last);
+uint32_t timer_elapsed32(uint32_t last);
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }
 #endif
 #endif

+ 0 - 6
protocol/pjrc/main.c

@@ -42,12 +42,6 @@
 #define CPU_PRESCALE(n)    (CLKPR = 0x80, CLKPR = (n))
 #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)
 int main(void)
 {
 {
     DEBUG_LED_CONFIG;
     DEBUG_LED_CONFIG;

+ 8 - 0
protocol/usb_hid/README

@@ -26,3 +26,11 @@ You can see HID keyboard reports on debug output.
 Restriction and Bug
 Restriction and Bug
 -------------------
 -------------------
 Not statble yet.
 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.

+ 2 - 2
protocol/usb_hid/override_wiring.c

@@ -8,11 +8,11 @@
 
 
 unsigned long millis()
 unsigned long millis()
 {
 {
-    return timer_read();
+    return timer_read32();
 }
 }
 unsigned long micros()
 unsigned long micros()
 {
 {
-    return timer_read() * 1000UL;
+    return timer_read32() * 1000UL;
 }
 }
 void delay(unsigned long ms)
 void delay(unsigned long ms)
 {
 {

+ 1 - 2
protocol/usb_hid/parser.cpp

@@ -3,7 +3,6 @@
 #include "parser.h"
 #include "parser.h"
 #include "usb_hid.h"
 #include "usb_hid.h"
 
 
-#include "leonardo_led.h"
 #include "debug.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));
     ::memcpy(&usb_hid_keyboard_report, buf, sizeof(report_keyboard_t));
     usb_hid_time_stamp = millis();
     usb_hid_time_stamp = millis();
 
 
-    LED_TX_TOGGLE;
     debug("KBDReport: ");
     debug("KBDReport: ");
     debug_hex(usb_hid_keyboard_report.mods);
     debug_hex(usb_hid_keyboard_report.mods);
+    debug(" --");
     for (uint8_t i = 0; i < 6; i++) {
     for (uint8_t i = 0; i < 6; i++) {
         debug(" ");
         debug(" ");
         debug_hex(usb_hid_keyboard_report.keys[i]);
         debug_hex(usb_hid_keyboard_report.keys[i]);

+ 10 - 0
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