A common/debug.c => common/debug.c +9 -0
@@ 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;
+
M common/timer.c => common/timer.c +30 -4
@@ 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?)
M common/timer.h => common/timer.h +6 -3
@@ 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
M protocol/pjrc/main.c => protocol/pjrc/main.c +0 -6
@@ 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;
M protocol/usb_hid/README => protocol/usb_hid/README +8 -0
@@ 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.
M protocol/usb_hid/override_wiring.c => protocol/usb_hid/override_wiring.c +2 -2
@@ 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)
{
M protocol/usb_hid/parser.cpp => protocol/usb_hid/parser.cpp +1 -2
@@ 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]);
A protocol/usb_hid/usb_hid.h => protocol/usb_hid/usb_hid.h +10 -0
@@ 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