forked from mirrors/qmk_userspace
		
	usb_hid: Fix timer size uint16_t to uint32_t;
This commit is contained in:
		
					parent
					
						
							
								b17f52ebe1
							
						
					
				
			
			
				commit
				
					
						c77c5043a1
					
				
			
		
					 8 changed files with 66 additions and 17 deletions
				
			
		
							
								
								
									
										9
									
								
								common/debug.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								common/debug.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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]);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								protocol/usb_hid/usb_hid.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								protocol/usb_hid/usb_hid.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue