mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-12 18:28:50 +01:00
keyboard bug fix
This commit is contained in:
parent
bcc984109a
commit
ccc90142a6
@ -1,7 +1,7 @@
|
||||
#ifndef DEVTERM_H
|
||||
#define DEVTERM_H
|
||||
|
||||
#define KEY_LATENCY 80
|
||||
#define KEY_LATENCY 140
|
||||
|
||||
#include <USBComposite.h>
|
||||
typedef struct key_debouncing{
|
||||
@ -14,8 +14,8 @@ typedef struct key_debouncing{
|
||||
typedef struct keyboard_state{
|
||||
|
||||
uint8_t layer;
|
||||
uint8_t shift;
|
||||
uint8_t caps_lock;
|
||||
uint8_t prev_layer;
|
||||
uint8_t fn_on;
|
||||
|
||||
}KEYBOARD_STATE;
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
|
||||
#include <USBComposite.h>
|
||||
|
||||
#define SER_NUM_STR "20210320"
|
||||
#define SER_NUM_STR "20210517"
|
||||
|
||||
USBHID HID;
|
||||
DEVTERM dev_term;
|
||||
@ -27,10 +27,13 @@ void setup() {
|
||||
dev_term.Joystick = new HIDJoystick(HID);
|
||||
dev_term.Mouse = new HIDMouse(HID);
|
||||
dev_term.Consumer = new HIDConsumer(HID);
|
||||
|
||||
dev_term.Keyboard->setAdjustForHostCapsLock(false);
|
||||
|
||||
dev_term.Keyboard_state.shift = 0;
|
||||
|
||||
dev_term.Keyboard_state.layer = 0;
|
||||
dev_term.Keyboard_state.caps_lock = 0;
|
||||
dev_term.Keyboard_state.prev_layer = 0;
|
||||
dev_term.Keyboard_state.fn_on = 0;
|
||||
|
||||
dev_term._Serial = new USBCompositeSerial;
|
||||
|
||||
|
||||
@ -57,10 +57,9 @@ enum SKEYS {
|
||||
|
||||
};
|
||||
|
||||
#define DEF_LAYER 0x00
|
||||
#define SHI_LAYER 0x01
|
||||
#define CAPS_LAYER 0x02
|
||||
#define FN_LAYER 0x03
|
||||
#define DEF_LAYER 0x00
|
||||
#define FN_LAYER 0x01
|
||||
|
||||
|
||||
/*
|
||||
* keyboard_maps
|
||||
@ -84,24 +83,6 @@ const uint16_t keyboard_maps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
'n','m',',','.','/','\\',';','\'', \
|
||||
KEY_BACKSPACE,KEY_RETURN,KEY_RIGHT_ALT,KEY_RIGHT_CTRL,KEY_RIGHT_SHIFT,' ',EMP,EMP},
|
||||
|
||||
[SHI_LAYER] = {_SELECT_KEY,_START_KEY,_VOLUME_P,'~','{','}','_','+', \
|
||||
'!','@','#','$','%','^','&','*',\
|
||||
'(',')',KEY_ESC,KEY_TAB,KEY_PAGE_UP,KEY_PAGE_DOWN,KEY_HOME,KEY_END, \
|
||||
'Q','W','E','R','T','Y','U','I', \
|
||||
'O','P','A','S','D','F','G','H',\
|
||||
'J','K','L','Z','X','C','V','B', \
|
||||
'N','M','<','>','?','|',':','"', \
|
||||
KEY_BACKSPACE,KEY_RETURN,KEY_RIGHT_ALT,KEY_RIGHT_CTRL,KEY_RIGHT_SHIFT,' ',EMP,EMP},
|
||||
|
||||
[CAPS_LAYER] = { _SELECT_KEY,_START_KEY,_VOLUME_M,'`','[',']','-','=', \
|
||||
'1','2','3','4','5','6','7','8',\
|
||||
'9','0',KEY_ESC,KEY_TAB,KEY_UP_ARROW,KEY_DOWN_ARROW,KEY_LEFT_ARROW,KEY_RIGHT_ARROW, \
|
||||
'Q','W','E','R','T','Y','U','I', \
|
||||
'O','P','A','S','D','F','G','H',\
|
||||
'J','K','L','Z','X','C','V','B', \
|
||||
'N','M',',','.','/','\\',';','\'', \
|
||||
KEY_BACKSPACE,KEY_RETURN,KEY_RIGHT_ALT,KEY_RIGHT_CTRL,KEY_RIGHT_SHIFT,' ',EMP,EMP},
|
||||
|
||||
[FN_LAYER] = { _PRINT_KEY,_PAUSE_KEY,_VOLUME_M,'`','[',']',KEY_F11,KEY_F12, \
|
||||
KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,\
|
||||
KEY_F9,KEY_F10,KEY_ESC,KEY_CAPS_LOCK,_FN_KEY_UP_ARROW,_FN_KEY_DOWN_ARROW,_FN_KEY_LEFT_ARROW,_FN_KEY_RIGHT_ARROW, \
|
||||
@ -122,46 +103,51 @@ const uint16_t keys_maps[KEYS_NUM] = {_JOYSTICK_UP,_JOYSTICK_DOWN, _JOYSTICK_LEF
|
||||
_MOUSE_LEFT,_MOUSE_MID,_MOUSE_RIGHT};
|
||||
|
||||
|
||||
|
||||
void dt_kbd_set_layer(DEVTERM*dv,uint8_t new_layer) {
|
||||
|
||||
if( dv->Keyboard_state.layer != new_layer) {
|
||||
|
||||
dv->Keyboard_state.prev_layer = dv->Keyboard_state.layer;
|
||||
dv->Keyboard_state.layer = new_layer;
|
||||
}
|
||||
}
|
||||
|
||||
void dt_kbd_restore_layer(DEVTERM*dv) {
|
||||
|
||||
dv->Keyboard_state.layer = dv->Keyboard_state.prev_layer;
|
||||
|
||||
}
|
||||
|
||||
void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) {
|
||||
|
||||
uint16_t k;
|
||||
|
||||
k = keyboard_maps[dv->Keyboard_state.layer][row][col];
|
||||
|
||||
if(dv->Keyboard_state.fn_on > 0){
|
||||
k = keyboard_maps[dv->Keyboard_state.fn_on][row][col];
|
||||
}else {
|
||||
k = keyboard_maps[dv->Keyboard_state.layer][row][col];
|
||||
}
|
||||
|
||||
if(k == EMP){
|
||||
return;
|
||||
}
|
||||
|
||||
switch(k) {
|
||||
case _LEFT_SHIFT_KEY:
|
||||
case KEY_RIGHT_SHIFT:
|
||||
if(mode == KEY_PRESSED) {
|
||||
dv->_Serial->println("into shift layer");
|
||||
dv->Keyboard_state.layer = SHI_LAYER;
|
||||
dv->Keyboard->press(k);
|
||||
}else if(mode == KEY_RELEASED) {
|
||||
dv->_Serial->println("leave shift layer");
|
||||
dv->Keyboard_state.layer = DEF_LAYER;
|
||||
dv->Keyboard->release(k);
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_CAPS_LOCK:
|
||||
if(mode == KEY_PRESSED) {
|
||||
dv->Keyboard_state.layer = CAPS_LAYER;
|
||||
dv->Keyboard->press(k);
|
||||
|
||||
dv->Keyboard->press(k);
|
||||
dv->Keyboard->setAdjustForHostCapsLock(true);
|
||||
}else if(mode == KEY_RELEASED) {
|
||||
|
||||
dv->Keyboard->setAdjustForHostCapsLock(false);
|
||||
dv->Keyboard->release(k);
|
||||
if(dv->Keyboard_state.caps_lock == 0) {
|
||||
dv->Keyboard_state.caps_lock = 1;
|
||||
}else{
|
||||
dv->Keyboard_state.caps_lock = 0;
|
||||
dv->Keyboard_state.layer = DEF_LAYER;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
break;
|
||||
|
||||
case _SELECT_KEY:
|
||||
dv->Joystick->button(9,mode);
|
||||
break;
|
||||
@ -230,22 +216,19 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
||||
|
||||
switch(k) {
|
||||
case _LEFT_SHIFT_KEY:
|
||||
case KEY_RIGHT_SHIFT:
|
||||
if(mode == KEY_PRESSED) {
|
||||
dv->Keyboard_state.layer = SHI_LAYER;
|
||||
dv->Keyboard->press(k);
|
||||
}else if(mode == KEY_RELEASED) {
|
||||
dv->Keyboard_state.layer = DEF_LAYER;
|
||||
dv->Keyboard->release(k);
|
||||
}
|
||||
break;
|
||||
case _FN_KEY:
|
||||
if(mode == KEY_PRESSED){
|
||||
dv->Keyboard_state.layer = FN_LAYER;
|
||||
dv->_Serial->println("into fn layer");
|
||||
dv->Keyboard_state.fn_on = FN_LAYER;
|
||||
|
||||
}else if(mode == KEY_RELEASED ) {
|
||||
dv->Keyboard_state.layer = DEF_LAYER;
|
||||
dv->_Serial->println("leave fn layer");
|
||||
dv->Keyboard_state.fn_on = 0;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
@ -298,17 +281,17 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
||||
break;
|
||||
case _MOUSE_MID:
|
||||
if(mode == KEY_PRESSED){
|
||||
dv->Mouse->press(2);
|
||||
dv->Mouse->press(4);
|
||||
}else if(mode == KEY_RELEASED){
|
||||
dv->Mouse->release(2);
|
||||
dv->Mouse->release(4);
|
||||
}
|
||||
break;
|
||||
|
||||
case _MOUSE_RIGHT:
|
||||
if(mode == KEY_PRESSED){
|
||||
dv->Mouse->press(3);
|
||||
dv->Mouse->press(2);
|
||||
}else if(mode == KEY_RELEASED){
|
||||
dv->Mouse->release(3);
|
||||
dv->Mouse->release(2);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user