Procházet zdrojové kódy

usb_hid: Fix timer size uint16_t to uint32_t;

tags/v1.9
tmk před 11 roky
rodič
revize
c77c5043a1

+ 9
- 0
common/debug.c Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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?)

+ 6
- 3
common/timer.h Zobrazit soubor

@@ -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

+ 0
- 6
protocol/pjrc/main.c Zobrazit soubor

@@ -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;

+ 8
- 0
protocol/usb_hid/README Zobrazit soubor

@@ -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.

+ 2
- 2
protocol/usb_hid/override_wiring.c Zobrazit soubor

@@ -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)
{

+ 1
- 2
protocol/usb_hid/parser.cpp Zobrazit soubor

@@ -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]);

+ 10
- 0
protocol/usb_hid/usb_hid.h Zobrazit soubor

@@ -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

Načítá se…
Zrušit
Uložit