From 2204b6dfd40f754da604caeaba1dfc34012a75b1 Mon Sep 17 00:00:00 2001 From: cuu Date: Sun, 13 Nov 2022 13:30:51 +0800 Subject: [PATCH] add more keys to lock --- Code/devterm_keyboard_mini/devterm.h | 20 +++++-- .../devterm_keyboard_mini.ino | 57 +++++++++++++------ Code/devterm_keyboard_mini/keymaps.ino | 49 ++++------------ 3 files changed, 66 insertions(+), 60 deletions(-) diff --git a/Code/devterm_keyboard_mini/devterm.h b/Code/devterm_keyboard_mini/devterm.h index 882506c..bbe4f70 100644 --- a/Code/devterm_keyboard_mini/devterm.h +++ b/Code/devterm_keyboard_mini/devterm.h @@ -12,18 +12,28 @@ typedef struct key_debouncing{ }KEY_DEB; +typedef struct keyboard_lock{ + + uint16_t lock;// + uint16_t time;// + uint16_t begin;// + +}KEYBOARD_LOCK; + typedef struct keyboard_state{ uint8_t layer; uint8_t prev_layer; uint8_t fn_on; - uint8_t shift; + uint8_t backlight;//0 1 2 3 uint8_t lock;//0 1 - uint16_t ctrl_lock;// - uint16_t ctrl_time;// - uint16_t ctrl_begin;// - + + KEYBOARD_LOCK ctrl; + KEYBOARD_LOCK shift; + KEYBOARD_LOCK alt; + KEYBOARD_LOCK fn; + }KEYBOARD_STATE; class DEVTERM { diff --git a/Code/devterm_keyboard_mini/devterm_keyboard_mini.ino b/Code/devterm_keyboard_mini/devterm_keyboard_mini.ino index a54c9d2..0b1b803 100644 --- a/Code/devterm_keyboard_mini/devterm_keyboard_mini.ino +++ b/Code/devterm_keyboard_mini/devterm_keyboard_mini.ino @@ -41,12 +41,25 @@ void setup() { dev_term.Keyboard_state.layer = 0; dev_term.Keyboard_state.prev_layer = 0; dev_term.Keyboard_state.fn_on = 0; - dev_term.Keyboard_state.shift = 0; + //dev_term.Keyboard_state.shift = 0; dev_term.Keyboard_state.backlight = 0; dev_term.Keyboard_state.lock = 0; - dev_term.Keyboard_state.ctrl_lock = 0; - dev_term.Keyboard_state.ctrl_time = 0; - dev_term.Keyboard_state.ctrl_begin = 0; + + dev_term.Keyboard_state.ctrl.lock = 0; + dev_term.Keyboard_state.ctrl.time = 0; + dev_term.Keyboard_state.ctrl.begin = 0; + + dev_term.Keyboard_state.shift.lock = 0; + dev_term.Keyboard_state.shift.time = 0; + dev_term.Keyboard_state.shift.begin = 0; + + dev_term.Keyboard_state.alt.lock = 0; + dev_term.Keyboard_state.alt.time = 0; + dev_term.Keyboard_state.alt.begin = 0; + + dev_term.Keyboard_state.fn.lock = 0; + dev_term.Keyboard_state.fn.time = 0; + dev_term.Keyboard_state.fn.begin = 0; dev_term._Serial = new USBCompositeSerial; @@ -78,24 +91,34 @@ void setup() { delay(1000); } +#define LOCK_TIME 50 + //DO NOT USE dev_term._Serial->println(""); in timer interrupt function,will block +void check_keyboard_lock(KEYBOARD_LOCK*lock){ + if( lock->begin >0) { + lock->time++; + + if( lock->time>=LOCK_TIME && lock->time<200){ + lock->lock = 1; + } + + if( lock->time > 200){ + dev_term.Keyboard->release(lock->begin); + lock->time = 0; + lock->lock = 0; + lock->begin = 0; + } + } +} + #define LOCK_TIME 50 void ctrl_timer_handler(void) { - if( dev_term.Keyboard_state.ctrl_begin >0) { - dev_term.Keyboard_state.ctrl_time++; + check_keyboard_lock(&dev_term.Keyboard_state.ctrl); + check_keyboard_lock(&dev_term.Keyboard_state.shift); + check_keyboard_lock(&dev_term.Keyboard_state.alt); + check_keyboard_lock(&dev_term.Keyboard_state.fn); - if(dev_term.Keyboard_state.ctrl_time>=LOCK_TIME && dev_term.Keyboard_state.ctrl_time<200){ - dev_term.Keyboard_state.ctrl_lock = 1; - } - - if(dev_term.Keyboard_state.ctrl_time > 200){ - dev_term.Keyboard->release(dev_term.Keyboard_state.ctrl_begin); - dev_term.Keyboard_state.ctrl_time = 0; - dev_term.Keyboard_state.ctrl_lock = 0; - dev_term.Keyboard_state.ctrl_begin = 0; - } - } } void loop() { diff --git a/Code/devterm_keyboard_mini/keymaps.ino b/Code/devterm_keyboard_mini/keymaps.ino index ac024bf..b628cee 100644 --- a/Code/devterm_keyboard_mini/keymaps.ino +++ b/Code/devterm_keyboard_mini/keymaps.ino @@ -167,14 +167,6 @@ void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) { } switch(k) { - case KEY_RIGHT_SHIFT:{ - if(mode == KEY_PRESSED) { - dv->Keyboard->press(k); - }else { - dv->Keyboard->release(k); - } - }break; - case KEY_CAPS_LOCK: if(mode == KEY_PRESSED) { @@ -264,10 +256,7 @@ void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) { case _FN_KEY: if(mode == KEY_PRESSED){ dv->Keyboard_state.fn_on = FN_LAYER; - //dv->_Serial->println("fn pressed"); - }else if(mode == KEY_RELEASED ) { - //release all pressed fn keys if they still been pressing for(int i=0;i<64;i++) { if(fn_actions[i] !=0) { k = keyboard_maps[dv->Keyboard_state.fn_on][i]; @@ -317,29 +306,13 @@ 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->press(k); }else if(mode == KEY_RELEASED) { dv->Keyboard->release(k); } break; - case _FN_KEY: - if(mode == KEY_PRESSED){ - dv->Keyboard_state.fn_on = FN_LAYER; - - }else if(mode == KEY_RELEASED ) { - //release all pressed fn keys if they still been pressing - for(int i=0;i<64;i++) { - if(fn_actions[i] !=0) { - k = keyboard_maps[dv->Keyboard_state.fn_on][i]; - dv->Keyboard->release(k); - fn_actions[i] = 0; - } - } - - dv->Keyboard_state.fn_on = 0; - } - break; case _JOYSTICK_UP: if(check_pd2() == HIGH) { @@ -485,15 +458,15 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) { case _LEFT_CTRL_KEY: case KEY_RIGHT_CTRL: if(mode == KEY_PRESSED){ - if(dv->Keyboard_state.ctrl_lock == 0){ + if(dv->Keyboard_state.ctrl.lock == 0){ dv->Keyboard->press(k); - dv->Keyboard_state.ctrl_begin = k; + dv->Keyboard_state.ctrl.begin = k; } }else { - if(dv->Keyboard_state.ctrl_lock == 0){ + if(dv->Keyboard_state.ctrl.lock == 0){ dv->Keyboard->release(k); - dv->Keyboard_state.ctrl_begin = 0; - dv->Keyboard_state.ctrl_time = 0; + dv->Keyboard_state.ctrl.begin = 0; + dv->Keyboard_state.ctrl.time = 0; } } break; @@ -519,12 +492,12 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) { } - if(dv->Keyboard_state.ctrl_lock > 0 ) { + if(dv->Keyboard_state.ctrl.lock > 0 ) { if(mode == KEY_RELEASED && k != _LEFT_CTRL_KEY && k!= KEY_RIGHT_CTRL){ - dv->Keyboard_state.ctrl_lock = 0; - dv->Keyboard->release(dv->Keyboard_state.ctrl_begin); - dv->Keyboard_state.ctrl_begin = 0; - dv->Keyboard_state.ctrl_time = 0; + dv->Keyboard_state.ctrl.lock = 0; + dv->Keyboard->release(dv->Keyboard_state.ctrl.begin); + dv->Keyboard_state.ctrl.begin = 0; + dv->Keyboard_state.ctrl.time = 0; //dv->_Serial->println("ctrl lock released"); } }