mirror of
https://github.com/qmk/qmk_firmware
synced 2025-01-03 13:40:36 +00:00
Fix bug on RAW2SCAN. Add work around for M0110A.
- Bug fix: Macro RAW2SCAN doesn't work and converted into static inline function. - Add Exceptional handling for M0110A arrow keys and calc keys. - Fix keymap.
This commit is contained in:
9
m0110.h
9
m0110.h
@ -78,15 +78,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
#define M0110_KEYPAD_OFFSET 0x40
|
||||
#define M0110_CALC_OFFSET 0x60
|
||||
|
||||
/* convert key event raw response into scan code */
|
||||
#define M0110_RAW2SCAN(key) ( \
|
||||
(key == M0110_NULL) ? M0110_NULL : ( \
|
||||
(key == M0110_ERROR) ? M0110_ERROR : ( \
|
||||
((key&0x80) | ((key&0x7F)>>1)) \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
|
||||
|
||||
extern uint8_t m0110_error;
|
||||
|
||||
|
0
m0110_usb/doc/m0110.jpg
Executable file → Normal file
0
m0110_usb/doc/m0110.jpg
Executable file → Normal file
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
0
m0110_usb/doc/teensy.jpg
Executable file → Normal file
0
m0110_usb/doc/teensy.jpg
Executable file → Normal file
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
@ -58,7 +58,7 @@ static const uint8_t PROGMEM fn_layer[] = {
|
||||
1, // Fn0
|
||||
2, // Fn1
|
||||
3, // Fn2
|
||||
0, // Fn3
|
||||
1, // Fn3
|
||||
0, // Fn4
|
||||
0, // Fn5
|
||||
0, // Fn6
|
||||
@ -68,15 +68,17 @@ static const uint8_t PROGMEM fn_layer[] = {
|
||||
// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
|
||||
// See layer.c for details.
|
||||
static const uint8_t PROGMEM fn_keycode[] = {
|
||||
#ifndef HASU
|
||||
KB_ESC, // Fn0
|
||||
#ifdef HASU
|
||||
KB_SCOLON, // Fn1
|
||||
KB_SLASH, // Fn2
|
||||
#else
|
||||
KB_NO, // Fn1
|
||||
KB_NO, // Fn2
|
||||
#endif
|
||||
KB_NO, // Fn3
|
||||
#else
|
||||
KB_NO, // Fn0
|
||||
KB_SCOLON, // Fn1
|
||||
KB_SLASH, // Fn2
|
||||
KB_UP, // Fn3
|
||||
#endif
|
||||
KB_NO, // Fn4
|
||||
KB_NO, // Fn5
|
||||
KB_NO, // Fn6
|
||||
@ -107,7 +109,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |---------------------------------------------------------| |-----------|Ent|
|
||||
* |Ctrl |Alt | Space |Gui| \|Lft|Rgt|Dn | | 0| .| |
|
||||
* `---------------------------------------------------------' `---------------'
|
||||
* You can register Esc by hitting(press&release) Fn0 quickly.
|
||||
*
|
||||
* HHKB/WASD cursor Layer(Fn0):
|
||||
* ,---------------------------------------------------------. ,---------------.
|
||||
@ -122,49 +123,18 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |Ctrl |Alt | Space |Gui | \|Lft|Rgt|Dn | | 0| .| |
|
||||
* `---------------------------------------------------------' `---------------'
|
||||
*
|
||||
* NOTE: Key between Space and \ in above diagram is M0110 Enter(assigned to Gui).
|
||||
* NOTE: You can register Esc by hitting(press&release) Fn0 quickly.
|
||||
* NOTE: Gui between Space and \ is Enter on M0110 not exists on M0110A.
|
||||
* NOTE: LShift and RShift are logically same key. (M0110, M0110A)
|
||||
* NOTE: LOption and ROption are logically same key. (M0110)
|
||||
*/
|
||||
#ifdef HASU
|
||||
KEYMAP(
|
||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, ESC, PEQL,PSLS,PAST,
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
|
||||
LCTL,A, S, D, F, G, H, J, K, L, FN1, QUOT, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN2, UP, P1, P2, P3, PENT,
|
||||
FN0, LALT, SPC, LGUI,BSLS,LEFT,DOWN,RGHT, P0, PDOT
|
||||
),
|
||||
// HHKB & WASD
|
||||
KEYMAP(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,PEQL,PSLS,PAST,
|
||||
CAPS,HOME,UP, PGUP,NO, NO, NO, NO, PSCR,SLCK,BRK, UP, INS, P7, P8, P9, PMNS,
|
||||
LCTL,LEFT,DOWN,RGHT,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,END, NO, PGDN,NO, VOLD,VOLU,MUTE,END, PGDN,DOWN, UP, P1, P2, P3, PENT,
|
||||
FN0, LALT, SPC, LGUI,BSLS,LEFT,DOWN,RGHT, P0, PDOT
|
||||
),
|
||||
// vi mousekeys
|
||||
KEYMAP(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,PEQL,PSLS,PAST,
|
||||
CAPS,NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, P7, P8, P9, PMNS,
|
||||
NO, VOLD,VOLU,MUTE,NO, NO, MS_L,MS_D,MS_U,MS_R,FN1, NO, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,NO, NO, NO, UP, P1, P2, P3, PENT,
|
||||
LCTL,LALT, BTN1, LGUI,BSLS,LEFT,DOWN,RGHT, P0, PDOT
|
||||
),
|
||||
// vi cusorkeys
|
||||
KEYMAP(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,PEQL,PSLS,PAST,
|
||||
CAPS,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, NO, NO, P7, P8, P9, PMNS,
|
||||
NO, NO, NO, NO, NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, UP, P1, P2, P3, PENT,
|
||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,DOWN,RGHT, P0, PDOT
|
||||
),
|
||||
#else
|
||||
#ifndef HASU
|
||||
KEYMAP(
|
||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, LGUI,PEQL,PSLS,PAST,
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
|
||||
FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, UP, P1, P2, P3, PENT,
|
||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,DOWN,RGHT, P0, PDOT
|
||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||
),
|
||||
// HHKB & WASD
|
||||
KEYMAP(
|
||||
@ -172,7 +142,41 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
CAPS,HOME,UP, PGUP,NO, NO, NO, NO, PSCR,SLCK,BRK, UP, INS, P7, P8, P9, PMNS,
|
||||
FN0, LEFT,DOWN,RGHT,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,END, NO, PGDN,NO, VOLD,VOLU,MUTE,END, PGDN,DOWN, UP, P1, P2, P3, PENT,
|
||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,DOWN,RGHT, P0, PDOT
|
||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||
),
|
||||
#else
|
||||
// hasu's keymap
|
||||
// To enable use this 'make' option: make EXTRAFLAGS=-DHASU
|
||||
KEYMAP(
|
||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, ESC, PEQL,PSLS,PAST,
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
|
||||
LCTL,A, S, D, F, G, H, J, K, L, FN1, QUOT, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN2, FN3, P1, P2, P3, PENT,
|
||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||
),
|
||||
// HHKB & WASD
|
||||
KEYMAP(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,PEQL,PSLS,PAST,
|
||||
CAPS,HOME,UP, PGUP,NO, NO, NO, NO, PSCR,SLCK,BRK, UP, INS, P7, P8, P9, PMNS,
|
||||
LCTL,LEFT,DOWN,RGHT,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,END, NO, PGDN,NO, VOLD,VOLU,MUTE,END, PGDN,DOWN, FN3, P1, P2, P3, PENT,
|
||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||
),
|
||||
// vi mousekeys
|
||||
KEYMAP(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,PEQL,PSLS,PAST,
|
||||
CAPS,NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, P7, P8, P9, PMNS,
|
||||
NO, VOLD,VOLU,MUTE,NO, NO, MS_L,MS_D,MS_U,MS_R,FN1, NO, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,NO, NO, NO, UP, P1, P2, P3, PENT,
|
||||
LCTL,LALT, BTN1, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||
),
|
||||
// vi cusorkeys
|
||||
KEYMAP(
|
||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,PEQL,PSLS,PAST,
|
||||
CAPS,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, NO, NO, P7, P8, P9, PMNS,
|
||||
NO, NO, NO, NO, NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, P4, P5, P6, PPLS,
|
||||
LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, UP, P1, P2, P3, PENT,
|
||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||
),
|
||||
#endif
|
||||
};
|
||||
|
@ -32,10 +32,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#define CAPS 0x39
|
||||
#define CAPS_UP (CAPS | 0x80)
|
||||
#define CAPS_BREAK (CAPS | 0x80)
|
||||
#define ROW(key) ((key)>>3&0x0F)
|
||||
#define COL(key) ((key)&0x07)
|
||||
|
||||
#define ARROW_UP_BREAK (0x4D | 0x80)
|
||||
#define ARROW_DOWN_BREAK (0x48 | 0x80)
|
||||
#define ARROW_LEFT_BREAK (0x46 | 0x80)
|
||||
#define ARROW_RIGHT_BREAK (0x42 | 0x80)
|
||||
|
||||
|
||||
static bool is_modified = false;
|
||||
|
||||
@ -88,14 +93,27 @@ uint8_t matrix_scan(void)
|
||||
// Send Caps key up event
|
||||
if (matrix_is_on(ROW(CAPS), COL(CAPS))) {
|
||||
is_modified = true;
|
||||
register_key(CAPS_UP);
|
||||
register_key(CAPS_BREAK);
|
||||
}
|
||||
#endif
|
||||
if (key == M0110_NULL) {
|
||||
return 0;
|
||||
} else if (key == M0110_ERROR) {
|
||||
// TODO: error recovery or reinit
|
||||
return 0;
|
||||
} else if (key == ARROW_UP_BREAK ||
|
||||
key == ARROW_DOWN_BREAK ||
|
||||
key == ARROW_LEFT_BREAK ||
|
||||
key == ARROW_RIGHT_BREAK) {
|
||||
// WORK AROUND: exceptional handling for M0110A
|
||||
// Unregister both Arrow key and coressponding Calc key when receive Arrow key break.
|
||||
//
|
||||
// Shift + Calc keys(=/*+):
|
||||
// Send no Shift break(0xF1) when release Calc keys. Can't be desinguished from Arrow keys.
|
||||
// (press: 0x71, 0x79, 0xXX release: 0x79, 0xXX)
|
||||
// See m0110.c for key events and scan codes.
|
||||
is_modified = true;
|
||||
register_key(key);
|
||||
register_key(key|M0110_CALC_OFFSET);
|
||||
} else {
|
||||
#ifdef MATRIX_HAS_LOCKING_CAPS
|
||||
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
|
||||
@ -103,11 +121,11 @@ uint8_t matrix_scan(void)
|
||||
// Ignore LockingCaps key down event
|
||||
if (key == CAPS) return 0;
|
||||
// Convert LockingCaps key up event into down event
|
||||
if (key == CAPS_UP) key = CAPS;
|
||||
if (key == CAPS_BREAK) key = CAPS;
|
||||
} else {
|
||||
// CAPS LOCK off:
|
||||
// Ignore LockingCaps key up event
|
||||
if (key == CAPS_UP) return 0;
|
||||
if (key == CAPS_BREAK) return 0;
|
||||
}
|
||||
#endif
|
||||
is_modified = true;
|
||||
|
2
rules.mk
2
rules.mk
@ -317,7 +317,7 @@ GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
|
||||
|
||||
# Combine all necessary flags and optional flags.
|
||||
# Add target processor to flags.
|
||||
# You can give EXTRAFLAGS at 'make' command line.
|
||||
# You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar
|
||||
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
|
||||
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
|
||||
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
|
||||
|
Reference in New Issue
Block a user