From 1c023901a7b242888a43b97a54443bcc04ef47ec Mon Sep 17 00:00:00 2001 From: cuu Date: Tue, 11 Oct 2022 21:06:57 +0800 Subject: [PATCH] add keys,keyboard actions for mini keyboard --- Code/devterm_keyboard_mini/devterm.h | 3 + .../devterm_keyboard_mini.ino | 9 +++ Code/devterm_keyboard_mini/keymaps.ino | 68 ++++++++++++++++--- 3 files changed, 71 insertions(+), 9 deletions(-) diff --git a/Code/devterm_keyboard_mini/devterm.h b/Code/devterm_keyboard_mini/devterm.h index c9d4a46..ea5b9b9 100644 --- a/Code/devterm_keyboard_mini/devterm.h +++ b/Code/devterm_keyboard_mini/devterm.h @@ -18,6 +18,8 @@ typedef struct keyboard_state{ uint8_t prev_layer; uint8_t fn_on; uint8_t shift; + uint8_t backlight;//0 1 2 3 + uint8_t lock;//0 1 }KEYBOARD_STATE; @@ -38,5 +40,6 @@ class DEVTERM { }; #define KEYBOARD_PULL 1 // 1 for PULLUP, 0 FOR PULLDOWN +#define KEYBOARD_LED_PWM_PERIOD 200 #endif diff --git a/Code/devterm_keyboard_mini/devterm_keyboard_mini.ino b/Code/devterm_keyboard_mini/devterm_keyboard_mini.ino index 4cfe578..576ca19 100644 --- a/Code/devterm_keyboard_mini/devterm_keyboard_mini.ino +++ b/Code/devterm_keyboard_mini/devterm_keyboard_mini.ino @@ -21,6 +21,8 @@ const uint8_t reportDescription[] = { static const uint32_t LOOP_INTERVAL_MS = 0; static TickWaiter waiter; +HardwareTimer timer(1); + void setup() { USBComposite.setManufacturerString("ClockworkPI"); USBComposite.setProductString("DevTerm"); @@ -39,6 +41,8 @@ void setup() { dev_term.Keyboard_state.prev_layer = 0; dev_term.Keyboard_state.fn_on = 0; dev_term.Keyboard_state.shift = 0; + dev_term.Keyboard_state.backlight = 0; + dev_term.Keyboard_state.lock = 0; dev_term._Serial = new USBCompositeSerial; @@ -54,6 +58,11 @@ void setup() { dev_term._Serial->println("setup done"); pinMode(PD2,INPUT);// switch 2 in back + + timer.setPeriod(KEYBOARD_LED_PWM_PERIOD); + + pinMode(PA8,PWM); + pwmWrite(PA8,dev_term.Keyboard_state.backlight); delay(1000); } diff --git a/Code/devterm_keyboard_mini/keymaps.ino b/Code/devterm_keyboard_mini/keymaps.ino index f4dd346..dc90574 100644 --- a/Code/devterm_keyboard_mini/keymaps.ino +++ b/Code/devterm_keyboard_mini/keymaps.ino @@ -106,13 +106,26 @@ const uint16_t keyboard_maps[][MATRIX_KEYS] = { static uint8_t fn_actions[MATRIX_KEYS]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -const uint16_t keys_maps[KEYS_NUM] = {_JOYSTICK_UP,_JOYSTICK_DOWN, _JOYSTICK_LEFT, _JOYSTICK_RIGHT, \ - _JOYSTICK_A,_JOYSTICK_B, _JOYSTICK_X,_JOYSTICK_Y, \ - _LEFT_SHIFT_KEY,KEY_RIGHT_SHIFT,_LEFT_CTRL_KEY, KEY_RIGHT_CTRL, \ - _LEFT_ALT, _MOUSE_LEFT, KEY_RIGHT_ALT,_MOUSE_RIGHT, \ - _TRACKBALL_BTN }; +const uint16_t keys_maps[][KEYS_NUM] = { + + [DEF_LAYER] = {_JOYSTICK_UP,_JOYSTICK_DOWN, _JOYSTICK_LEFT, _JOYSTICK_RIGHT, \ + _JOYSTICK_A,_JOYSTICK_B, _JOYSTICK_X,_JOYSTICK_Y, \ + _LEFT_SHIFT_KEY,KEY_RIGHT_SHIFT,_LEFT_CTRL_KEY, KEY_RIGHT_CTRL, \ + _LEFT_ALT, _MOUSE_LEFT, KEY_RIGHT_ALT,_MOUSE_RIGHT, \ + _TRACKBALL_BTN }, + + [FN_LAYER] = {_JOYSTICK_UP,_JOYSTICK_DOWN, _JOYSTICK_LEFT, _JOYSTICK_RIGHT, \ + _JOYSTICK_A,_JOYSTICK_B, _JOYSTICK_X,_JOYSTICK_Y, \ + _LEFT_SHIFT_KEY,KEY_RIGHT_SHIFT,_LEFT_CTRL_KEY, KEY_RIGHT_CTRL, \ + _CMD_KEY, _MOUSE_LEFT, KEY_RIGHT_ALT,_MOUSE_RIGHT, \ + _TRACKBALL_BTN }, + + }; + +const uint16_t backlight[4] = {0,32,500,2000}; + uint8_t check_pd2(){ // if swtich 2 in back is set to on(HIGH) return digitalRead(PD2); @@ -148,6 +161,10 @@ void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) { if(k == EMP){ return; } + + if(k != _FN_KEY && k != _FN_LOCK_KEYBOARD && dv->Keyboard_state.lock == 1) { + return; + } switch(k) { case KEY_RIGHT_SHIFT:{ @@ -225,7 +242,31 @@ void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) { dv->Consumer->release(); } }break; - + case _FN_LOCK_KEYBOARD:{ + dv->Keyboard_state.lock = dv->Keyboard_state.lock ^ 1; + + }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 _FN_LIGHT_KEYBOARD: { + dev_term.Keyboard_state.backlight = (dev_term.Keyboard_state.backlight + 1) % 4; + pwmWrite(PA8,backlight[ dev_term.Keyboard_state.backlight ] ); + }break; default: if(mode == KEY_PRESSED) { dv->Keyboard->press(k); @@ -246,14 +287,21 @@ void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) { void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) { uint16_t k; - - k = keys_maps[col]; + + if(dv->Keyboard_state.fn_on > 0){ + k = keys_maps[dv->Keyboard_state.fn_on][col]; + }else { + k = keyboard_maps[dv->Keyboard_state.layer][col]; + } if(k == EMP){ return; } - + if(dv->Keyboard_state.lock == 1) { + return; + } + switch(k) { case _LEFT_SHIFT_KEY: if(mode == KEY_PRESSED) { @@ -424,6 +472,8 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) { case _LEFT_CTRL_KEY: case _CMD_KEY: case _LEFT_ALT: + case KEY_RIGHT_CTRL: + case KEY_RIGHT_ALT: if(mode == KEY_PRESSED){ dv->Keyboard->press(k); }else {