Sfoglia il codice sorgente

add keys,keyboard actions for mini keyboard

cuu 1 anno fa
parent
commit
1c023901a7

+ 3 - 0
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

+ 9 - 0
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<LOOP_INTERVAL_MS> 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);
 }

+ 60 - 10
Code/devterm_keyboard_mini/keymaps.ino

@@ -106,12 +106,25 @@ 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)
 
@@ -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 {