mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-12 10:18:49 +01:00
add more keys to lock
This commit is contained in:
parent
521c5f0441
commit
2204b6dfd4
@ -12,18 +12,28 @@ typedef struct key_debouncing{
|
|||||||
|
|
||||||
}KEY_DEB;
|
}KEY_DEB;
|
||||||
|
|
||||||
|
typedef struct keyboard_lock{
|
||||||
|
|
||||||
|
uint16_t lock;//
|
||||||
|
uint16_t time;//
|
||||||
|
uint16_t begin;//
|
||||||
|
|
||||||
|
}KEYBOARD_LOCK;
|
||||||
|
|
||||||
typedef struct keyboard_state{
|
typedef struct keyboard_state{
|
||||||
|
|
||||||
uint8_t layer;
|
uint8_t layer;
|
||||||
uint8_t prev_layer;
|
uint8_t prev_layer;
|
||||||
uint8_t fn_on;
|
uint8_t fn_on;
|
||||||
uint8_t shift;
|
|
||||||
uint8_t backlight;//0 1 2 3
|
uint8_t backlight;//0 1 2 3
|
||||||
uint8_t lock;//0 1
|
uint8_t lock;//0 1
|
||||||
uint16_t ctrl_lock;//
|
|
||||||
uint16_t ctrl_time;//
|
KEYBOARD_LOCK ctrl;
|
||||||
uint16_t ctrl_begin;//
|
KEYBOARD_LOCK shift;
|
||||||
|
KEYBOARD_LOCK alt;
|
||||||
|
KEYBOARD_LOCK fn;
|
||||||
|
|
||||||
}KEYBOARD_STATE;
|
}KEYBOARD_STATE;
|
||||||
|
|
||||||
class DEVTERM {
|
class DEVTERM {
|
||||||
|
|||||||
@ -41,12 +41,25 @@ void setup() {
|
|||||||
dev_term.Keyboard_state.layer = 0;
|
dev_term.Keyboard_state.layer = 0;
|
||||||
dev_term.Keyboard_state.prev_layer = 0;
|
dev_term.Keyboard_state.prev_layer = 0;
|
||||||
dev_term.Keyboard_state.fn_on = 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.backlight = 0;
|
||||||
dev_term.Keyboard_state.lock = 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.lock = 0;
|
||||||
dev_term.Keyboard_state.ctrl_begin = 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;
|
dev_term._Serial = new USBCompositeSerial;
|
||||||
|
|
||||||
@ -78,24 +91,34 @@ void setup() {
|
|||||||
delay(1000);
|
delay(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LOCK_TIME 50
|
||||||
|
|
||||||
//DO NOT USE dev_term._Serial->println(""); in timer interrupt function,will block
|
//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
|
#define LOCK_TIME 50
|
||||||
void ctrl_timer_handler(void) {
|
void ctrl_timer_handler(void) {
|
||||||
|
|
||||||
if( dev_term.Keyboard_state.ctrl_begin >0) {
|
check_keyboard_lock(&dev_term.Keyboard_state.ctrl);
|
||||||
dev_term.Keyboard_state.ctrl_time++;
|
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() {
|
void loop() {
|
||||||
|
|||||||
@ -167,14 +167,6 @@ void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch(k) {
|
switch(k) {
|
||||||
case KEY_RIGHT_SHIFT:{
|
|
||||||
if(mode == KEY_PRESSED) {
|
|
||||||
dv->Keyboard->press(k);
|
|
||||||
}else {
|
|
||||||
dv->Keyboard->release(k);
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case KEY_CAPS_LOCK:
|
case KEY_CAPS_LOCK:
|
||||||
if(mode == KEY_PRESSED) {
|
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:
|
case _FN_KEY:
|
||||||
if(mode == KEY_PRESSED){
|
if(mode == KEY_PRESSED){
|
||||||
dv->Keyboard_state.fn_on = FN_LAYER;
|
dv->Keyboard_state.fn_on = FN_LAYER;
|
||||||
//dv->_Serial->println("fn pressed");
|
|
||||||
|
|
||||||
}else if(mode == KEY_RELEASED ) {
|
}else if(mode == KEY_RELEASED ) {
|
||||||
//release all pressed fn keys if they still been pressing
|
|
||||||
for(int i=0;i<64;i++) {
|
for(int i=0;i<64;i++) {
|
||||||
if(fn_actions[i] !=0) {
|
if(fn_actions[i] !=0) {
|
||||||
k = keyboard_maps[dv->Keyboard_state.fn_on][i];
|
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) {
|
switch(k) {
|
||||||
case _LEFT_SHIFT_KEY:
|
case _LEFT_SHIFT_KEY:
|
||||||
|
case KEY_RIGHT_SHIFT:
|
||||||
if(mode == KEY_PRESSED) {
|
if(mode == KEY_PRESSED) {
|
||||||
dv->Keyboard->press(k);
|
dv->Keyboard->press(k);
|
||||||
}else if(mode == KEY_RELEASED) {
|
}else if(mode == KEY_RELEASED) {
|
||||||
dv->Keyboard->release(k);
|
dv->Keyboard->release(k);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case _JOYSTICK_UP:
|
||||||
if(check_pd2() == HIGH) {
|
if(check_pd2() == HIGH) {
|
||||||
@ -485,15 +458,15 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
|||||||
case _LEFT_CTRL_KEY:
|
case _LEFT_CTRL_KEY:
|
||||||
case KEY_RIGHT_CTRL:
|
case KEY_RIGHT_CTRL:
|
||||||
if(mode == KEY_PRESSED){
|
if(mode == KEY_PRESSED){
|
||||||
if(dv->Keyboard_state.ctrl_lock == 0){
|
if(dv->Keyboard_state.ctrl.lock == 0){
|
||||||
dv->Keyboard->press(k);
|
dv->Keyboard->press(k);
|
||||||
dv->Keyboard_state.ctrl_begin = k;
|
dv->Keyboard_state.ctrl.begin = k;
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
if(dv->Keyboard_state.ctrl_lock == 0){
|
if(dv->Keyboard_state.ctrl.lock == 0){
|
||||||
dv->Keyboard->release(k);
|
dv->Keyboard->release(k);
|
||||||
dv->Keyboard_state.ctrl_begin = 0;
|
dv->Keyboard_state.ctrl.begin = 0;
|
||||||
dv->Keyboard_state.ctrl_time = 0;
|
dv->Keyboard_state.ctrl.time = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
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){
|
if(mode == KEY_RELEASED && k != _LEFT_CTRL_KEY && k!= KEY_RIGHT_CTRL){
|
||||||
dv->Keyboard_state.ctrl_lock = 0;
|
dv->Keyboard_state.ctrl.lock = 0;
|
||||||
dv->Keyboard->release(dv->Keyboard_state.ctrl_begin);
|
dv->Keyboard->release(dv->Keyboard_state.ctrl.begin);
|
||||||
dv->Keyboard_state.ctrl_begin = 0;
|
dv->Keyboard_state.ctrl.begin = 0;
|
||||||
dv->Keyboard_state.ctrl_time = 0;
|
dv->Keyboard_state.ctrl.time = 0;
|
||||||
//dv->_Serial->println("ctrl lock released");
|
//dv->_Serial->println("ctrl lock released");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user