mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-12 18:28:50 +01:00
add keys,keyboard actions for mini keyboard
This commit is contained in:
parent
6ee33ba535
commit
1c023901a7
@ -18,6 +18,8 @@ typedef struct keyboard_state{
|
|||||||
uint8_t prev_layer;
|
uint8_t prev_layer;
|
||||||
uint8_t fn_on;
|
uint8_t fn_on;
|
||||||
uint8_t shift;
|
uint8_t shift;
|
||||||
|
uint8_t backlight;//0 1 2 3
|
||||||
|
uint8_t lock;//0 1
|
||||||
|
|
||||||
}KEYBOARD_STATE;
|
}KEYBOARD_STATE;
|
||||||
|
|
||||||
@ -38,5 +40,6 @@ class DEVTERM {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define KEYBOARD_PULL 1 // 1 for PULLUP, 0 FOR PULLDOWN
|
#define KEYBOARD_PULL 1 // 1 for PULLUP, 0 FOR PULLDOWN
|
||||||
|
#define KEYBOARD_LED_PWM_PERIOD 200
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -21,6 +21,8 @@ const uint8_t reportDescription[] = {
|
|||||||
static const uint32_t LOOP_INTERVAL_MS = 0;
|
static const uint32_t LOOP_INTERVAL_MS = 0;
|
||||||
static TickWaiter<LOOP_INTERVAL_MS> waiter;
|
static TickWaiter<LOOP_INTERVAL_MS> waiter;
|
||||||
|
|
||||||
|
HardwareTimer timer(1);
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
USBComposite.setManufacturerString("ClockworkPI");
|
USBComposite.setManufacturerString("ClockworkPI");
|
||||||
USBComposite.setProductString("DevTerm");
|
USBComposite.setProductString("DevTerm");
|
||||||
@ -39,6 +41,8 @@ void setup() {
|
|||||||
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.lock = 0;
|
||||||
|
|
||||||
dev_term._Serial = new USBCompositeSerial;
|
dev_term._Serial = new USBCompositeSerial;
|
||||||
|
|
||||||
@ -54,6 +58,11 @@ void setup() {
|
|||||||
dev_term._Serial->println("setup done");
|
dev_term._Serial->println("setup done");
|
||||||
|
|
||||||
pinMode(PD2,INPUT);// switch 2 in back
|
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);
|
delay(1000);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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};
|
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, \
|
const uint16_t keys_maps[][KEYS_NUM] = {
|
||||||
_JOYSTICK_A,_JOYSTICK_B, _JOYSTICK_X,_JOYSTICK_Y, \
|
|
||||||
_LEFT_SHIFT_KEY,KEY_RIGHT_SHIFT,_LEFT_CTRL_KEY, KEY_RIGHT_CTRL, \
|
[DEF_LAYER] = {_JOYSTICK_UP,_JOYSTICK_DOWN, _JOYSTICK_LEFT, _JOYSTICK_RIGHT, \
|
||||||
_LEFT_ALT, _MOUSE_LEFT, KEY_RIGHT_ALT,_MOUSE_RIGHT, \
|
_JOYSTICK_A,_JOYSTICK_B, _JOYSTICK_X,_JOYSTICK_Y, \
|
||||||
_TRACKBALL_BTN };
|
_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)
|
uint8_t check_pd2(){ // if swtich 2 in back is set to on(HIGH)
|
||||||
|
|
||||||
return digitalRead(PD2);
|
return digitalRead(PD2);
|
||||||
@ -148,6 +161,10 @@ void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) {
|
|||||||
if(k == EMP){
|
if(k == EMP){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(k != _FN_KEY && k != _FN_LOCK_KEYBOARD && dv->Keyboard_state.lock == 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch(k) {
|
switch(k) {
|
||||||
case KEY_RIGHT_SHIFT:{
|
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();
|
dv->Consumer->release();
|
||||||
}
|
}
|
||||||
}break;
|
}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:
|
default:
|
||||||
if(mode == KEY_PRESSED) {
|
if(mode == KEY_PRESSED) {
|
||||||
dv->Keyboard->press(k);
|
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) {
|
void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
||||||
|
|
||||||
uint16_t k;
|
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){
|
if(k == EMP){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(dv->Keyboard_state.lock == 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch(k) {
|
switch(k) {
|
||||||
case _LEFT_SHIFT_KEY:
|
case _LEFT_SHIFT_KEY:
|
||||||
if(mode == KEY_PRESSED) {
|
if(mode == KEY_PRESSED) {
|
||||||
@ -424,6 +472,8 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
|||||||
case _LEFT_CTRL_KEY:
|
case _LEFT_CTRL_KEY:
|
||||||
case _CMD_KEY:
|
case _CMD_KEY:
|
||||||
case _LEFT_ALT:
|
case _LEFT_ALT:
|
||||||
|
case KEY_RIGHT_CTRL:
|
||||||
|
case KEY_RIGHT_ALT:
|
||||||
if(mode == KEY_PRESSED){
|
if(mode == KEY_PRESSED){
|
||||||
dv->Keyboard->press(k);
|
dv->Keyboard->press(k);
|
||||||
}else {
|
}else {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user