usb_hid: Fix timer size uint16_t to uint32_t;
parent
b17f52ebe1
commit
c77c5043a1
|
@ -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;
|
||||||
|
|
|
@ -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;
|
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_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_32(t, last);
|
||||||
}
|
}
|
||||||
|
|
||||||
// excecuted once per 1ms.(excess for just timer count?)
|
// excecuted once per 1ms.(excess for just timer count?)
|
||||||
|
|
|
@ -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_8(a, b) TIMER_DIFF(a, b, UINT8_MAX)
|
||||||
#define TIMER_DIFF_MS(a, b) TIMER_DIFF(a, b, UINT16_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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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]);
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue