Commit graph

1582 commits

Author SHA1 Message Date
tmk
0ab0ebf8cb core: Make TIMER0 ISR noblock
The TIMER0 ISR takes 1.5us and can affect IBMPC protocol ISR.
Add ISR_NOBLOCK to allow interrupt during TIMER0 ISR.
2020-05-22 11:52:44 +09:00
tmk
f80601db96 ibmpc: Add Z-150 AT protocol recognition
https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-AT-Keyboard-Protocol#zenith-z-150-beige
2020-05-15 14:32:14 +09:00
tmk
343c32afc6 ibmpc: Fix 'Ack' check of sending data 2020-05-13 23:12:50 +09:00
tmk
54e3c239fc ibmpc: Fix AT 'request to send' signaling
Without this fix Realforce 101 PS/2 fails to receive 'set indicator'
command sometimes when pressing Caps Lock and some keys simultaneously.

before fix:
      ____     ______
clock     \___/
      ________
data          \_______
          | 100|

after fix:
      ____          __
clock     \________/
      ________
data          \_______
          | 100| 100|
2020-05-13 22:32:14 +09:00
tmk
c6a6049bc8 ibmpc_usb: Add 'protocol change detection'
for better keybaord hotswap support
2020-05-13 14:47:18 +09:00
tmk
d987783c1a ibmpc_usb: Fix scan code set change detection 2020-05-12 21:57:32 +09:00
tmk
c124220997 ibmpc_usb: Update debug prints 2020-05-12 18:59:19 +09:00
tmk
9fda70c476 ibmpc_usb: Add AT_RESET with reset command 'FF' 2020-05-12 18:56:54 +09:00
tmk
346169c5ed ibmpc: Fix ibmpc_host_isr_clear() 2020-05-12 18:51:39 +09:00
tmk
3e801a63e4 ibmpc: Add debug code for isr_state 2020-05-12 18:50:21 +09:00
tmk
77c5017cb2 ibmpc: Fix buffer full check
recv_data should appear to as 'sstt' when it is full with two data.
Both upper and lower byte should be checked.
2020-05-12 18:28:07 +09:00
tmk
4028b200be ibmpc: Fix Timeout error
Timeout error may be recoverable but may not in some situations.
For safety it is handled as a real error to start keyboard
recognition again.
2020-05-12 18:21:40 +09:00
tmk
fa58765325 ibmpc_usb: Fix led_set for XT keyobard 2020-05-12 11:32:28 +09:00
tmk
15434c3a16 hhkb: Add keys for Display Brightness Control 2020-05-11 21:59:33 +09:00
tmk
dd316b990f core: Add HID usage for Display Brightness Control 2020-05-11 21:58:50 +09:00
tmk
42b7bf8942 ibmpc_usb: Update prebuilt firmware files 2020-05-11 17:16:37 +09:00
tmk
b59f7655e3 ibmpc_usb: Remove invalid code check in Code Set 1 2020-05-11 16:13:47 +09:00
tmk
0661ef8a56 ibmpc_usb: Update Overrun and buffer full handling(00, FF) 2020-05-11 16:13:47 +09:00
tmk
53d10fe247 ibmpc: Update ERR_FF, ERR_FULL handling 2020-05-11 16:13:47 +09:00
tmk
846f55389a ibmpc_usb: Fix led_set 2020-05-11 16:12:36 +09:00
tmk
fcebf2215f ibmpc_usb: Add protocol and isr_debug check 2020-05-11 16:12:36 +09:00
tmk
0cf9dfc888 ibmpc: Add ibmpc_isr_debug to see isr_state 2020-05-11 16:12:36 +09:00
tmk
7c3b669e6f ibmpc: Add handling for erroneous start bit XT(IBM)
This is **not perferred** if it is evitable.
It allows to read start(0) as 1 wrongly at cost of 100us wait.
2020-05-11 16:11:39 +09:00
tmk
93e9ee22ce Merge branch 'interrupt_control_endpoint_fix' 2020-05-08 22:47:29 +09:00
tmk
8c72e93314 ibm4704: Use INTERRUPT_CONTROL_ENDPOINT to debug prints 2020-05-08 22:39:55 +09:00
tmk
e2ac2d746f usb_usb: Remove hook_usb_startup_wait_loop
matrix_scan in hook_usb_startup_wait_loop is not required for
FC660C since commit dd7b75: SOF timing fix of USB_Host_Shield_2.0.
Without INTERRUPT_CONTROL_ENDPOINT the matrix_scan blocks around 2300ms
and prevents getting USB configured. In the result console_putc
starts sending before hid_listen is ready and chars are lost.

console_is_ready delay value should be around 5000ms if matrix_scan
is needed in hook_usb_startup_wait_loop.
2020-05-08 22:39:55 +09:00
tmk
2173767a78 Remove INTERRUPT_CONTROL_ENDPOINT from converters
The LUFA feature can prevent converter's ISR from handing signal instantly.
The interrupt can block a while for Standard Device Requests and 500-1000us
for keyboard LED report.
2020-05-08 22:39:55 +09:00
tmk
9f04146031 lufa: Fix comment on INTERRUPT_CONTROL_ENDPOINT 2020-05-08 22:39:55 +09:00
tmk
820d96bdab core: ibmpc: Check response of set indicator command 2020-05-08 21:48:59 +09:00
tmk
27812520eb core: ibmpc: Add comments on stop bit of Z-150 AT 2020-05-08 21:46:33 +09:00
tmk
2a98bf516a ibmpc_usb: Fix Code Set 2 for Z-150 SysRq
Zenith Z-150 AT sends scan code 0x7F for SysRq.
Accoding to i8042 translation table it maps both 0x7F and
0x84 into 0x54(Print Screen).
https://geekhack.org/index.php?topic=103648.msg2897404#msg2897404

Swap MUTE and PSCR in unimap_cs2.
2020-05-08 21:45:45 +09:00
tmk
2c08ed9d94 ibmpc_usb: Fix Makefile 2020-05-08 21:43:24 +09:00
tmk
6332da2b95 ibmpc_usb: Add keyboard id AB85, BFB0
Other 122-key Teminals and IBM RT
2020-05-06 15:56:44 +09:00
tmk
46bd3670cf core: Add 'dude' makefile target for avrdude
Run like `make dude DEV=/dev/ttyACM0` to program
Arduino such as Pro Micro and Leonardo
2020-05-06 09:36:28 +09:00
tmk
2e5e6a69bc ibmpc_usb: Update firmware files again 2020-04-28 12:29:07 +09:00
tmk
b6ccbacdaa ibmpc_usb: Update prebuilt firmware files 2020-04-28 12:21:05 +09:00
tmk
aa276d55c4 ibmpc_usb: Add some comments 2020-04-28 12:18:56 +09:00
tmk
c4f65d4f5e ibmpc_usb: Remove G80-2551 support from Code Set 2 2020-04-28 12:07:19 +09:00
tmk
c6786290bc ibmpc_usb: Add G80-2551 support in Code Set 3
https://deskthority.net/wiki/Cherry_G80-2551
https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-AT-Keyboard-Protocol#g80-2551-in-code-set-3
https://geekhack.org/index.php?topic=103648.msg2894921#msg2894921
2020-04-28 11:59:20 +09:00
tmk
87bd991afa ibmpc_usb: Add codes in Set 3
GUI, Application, Henkan, Mehenkan, Kana used in PS/2 PC
keyboard when it is switched to Set 3
https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-AT-Keyboard-Protocol#g80-3600-and-skidata2-de-in-code-set-3
2020-04-28 11:33:02 +09:00
tmk
1575db9166 ibmpc_usb: Update prebuilt firmware hex files 2020-04-26 23:35:59 +09:00
tmk
da1ca3ab6f ibmpc_usb: Add support for G80-2551
Support for extra keys around cursor keys
https://deskthority.net/wiki/Cherry_G80-2551
https://geekhack.org/index.php?topic=103648.msg2893404#msg2893404
https://gist.github.com/tmk/22cb8680ca8ef854630ecd1953268c5b
2020-04-26 23:28:03 +09:00
tmk
890af7e7e3 ibmpc_usb: Change key mapping for Code Set 3 2020-04-26 18:39:47 +09:00
tmk
23305ad934 Fix TIMER_DIFF #646
Merge branch 'timer_diff_fixes' of https://github.com/purdeaandrei/tmk_keyboard into purdeaandrei-timer_diff_fixes
2020-04-14 12:59:41 +09:00
tmk
48058c638e sun_usb: Add prebuilt firmware files 2020-04-09 13:57:48 +09:00
tmk
e63aff8715 sun_usb: Add Makefile for ATmega32U4 2020-04-09 13:56:20 +09:00
tmk
05c2df1237 sun_usb: Update README and rename to .md 2020-04-08 17:54:15 +09:00
tmk
8898747b09 sun_usb: Add unimap support 2020-04-08 17:38:33 +09:00
Purdea Andrei
061e662345 tmk_core/common/timer.h: Improve code generation for TIMER_DIFF* macros
Because of integer promotion the compiler is having a hard time generating
efficient code to calculate TIMER_DIFF* macros in some situations.
In the below example, the return value is "int", and this is causing the
trouble.

Example C code:

int __attribute__ ((noinline)) test(uint8_t current_timer, uint8_t start_timer)
{
    return TIMER_DIFF_8(current_timer, start_timer);
}

BEFORE: (with -Os)

00004c40 <test>:
    4c40:       28 2f           mov     r18, r24
    4c42:       30 e0           ldi     r19, 0x00       ; 0
    4c44:       46 2f           mov     r20, r22
    4c46:       50 e0           ldi     r21, 0x00       ; 0
    4c48:       86 17           cp      r24, r22
    4c4a:       20 f0           brcs    .+8             ; 0x4c54 <test+0x14>
    4c4c:       c9 01           movw    r24, r18
    4c4e:       84 1b           sub     r24, r20
    4c50:       95 0b           sbc     r25, r21
    4c52:       08 95           ret
    4c54:       c9 01           movw    r24, r18
    4c56:       84 1b           sub     r24, r20
    4c58:       95 0b           sbc     r25, r21
    4c5a:       93 95           inc     r25
    4c5c:       08 95           ret

AFTER: (with -Os)

00004c40 <test>:
    4c40:       86 1b           sub     r24, r22
    4c42:       90 e0           ldi     r25, 0x00       ; 0
    4c44:       08 95           ret

Note: the example is showing -Os but improvements can be seen at all optimization levels,
including -O0. We never use -O0, but I tested it to make sure that no extra code is
generated in that case.
2020-04-01 07:46:18 +03:00
Purdea Andrei
338a1506dc tmk_core/common/timer.h: Fixing TIMER_DIFF macro to calculate difference correctly after the timer wraps.
Let's go through an example, using the following macro:

If the first timer read is 0xe4 and the second one is 0x32, the timer wrapped.
If the timer would have had more bits, it's new value would have been 0x132,
and the correct difference in time is 0x132 - 0xe4 = 0x4e

old code TIMER_DIFF_8(0x32, 0xe4) = 0xff - 0xe4 + 0x32 = 0x4d, which is wrong.
new code TIMER_DIFF_8(0x32, 0xe4) = 0xff + 1 - 0xe4 + 0x32 = 0x4e, which is correct.

This also gives a chance for a smart compiler to optimize the code using normal
integer overflow.

For example on AVR, the following C code:
uint8_t __attribute__ ((noinline)) test(uint8_t current_timer, uint8_t start_timer)
{
    return TIMER_DIFF_8(current_timer, start_timer);
}
With the original code, it gets translated to the following list of instructions:
00004c6e <test>:
    4c6e:       98 2f           mov     r25, r24
    4c70:       86 1b           sub     r24, r22
    4c72:       96 17           cp      r25, r22
    4c74:       08 f4           brcc    .+2             ; 0x4c78 <test+0xa>
    4c76:       81 50           subi    r24, 0x01       ; 1
    4c78:       08 95           ret
But with this commit, it gets translated to a single instruction:
00004c40 <test>:
    4c40:       86 1b           sub     r24, r22
    4c42:       08 95           ret

This unfortunately doesn't always work so nicely, for example the following C code:
int __attribute__ ((noinline)) test(uint8_t current_timer, uint8_t start_timer)
{
    return TIMER_DIFF_8(current_timer, start_timer);
}
(Note: return type changed to int)
With the original code it gets translated to:
00004c6e <test>:
    4c6e:       28 2f           mov     r18, r24
    4c70:       30 e0           ldi     r19, 0x00       ; 0
    4c72:       46 2f           mov     r20, r22
    4c74:       50 e0           ldi     r21, 0x00       ; 0
    4c76:       86 17           cp      r24, r22
    4c78:       20 f0           brcs    .+8             ; 0x4c82 <test+0x14>
    4c7a:       c9 01           movw    r24, r18
    4c7c:       84 1b           sub     r24, r20
    4c7e:       95 0b           sbc     r25, r21
    4c80:       08 95           ret
    4c82:       c9 01           movw    r24, r18
    4c84:       84 1b           sub     r24, r20
    4c86:       95 0b           sbc     r25, r21
    4c88:       81 50           subi    r24, 0x01       ; 1
    4c8a:       9f 4f           sbci    r25, 0xFF       ; 255
    4c8c:       08 95           ret
Wth this commit it gets translated to:
00004c40 <test>:
    4c40:       28 2f           mov     r18, r24
    4c42:       30 e0           ldi     r19, 0x00       ; 0
    4c44:       46 2f           mov     r20, r22
    4c46:       50 e0           ldi     r21, 0x00       ; 0
    4c48:       86 17           cp      r24, r22
    4c4a:       20 f0           brcs    .+8             ; 0x4c54 <test+0x14>
    4c4c:       c9 01           movw    r24, r18
    4c4e:       84 1b           sub     r24, r20
    4c50:       95 0b           sbc     r25, r21
    4c52:       08 95           ret
    4c54:       c9 01           movw    r24, r18
    4c56:       84 1b           sub     r24, r20
    4c58:       95 0b           sbc     r25, r21
    4c5a:       93 95           inc     r25
    4c5c:       08 95           ret
There is not much performance improvement in this case, however at least with this
commit it functions correctly.

Note: The following commit will improve compiler output for the latter example.
2020-04-01 07:45:05 +03:00