mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-12 10:18:49 +01:00
add ctrl lock mode
This commit is contained in:
parent
a802c1ad3b
commit
ce4b765fea
@ -20,6 +20,9 @@ typedef struct keyboard_state{
|
||||
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_STATE;
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@ static const uint32_t LOOP_INTERVAL_MS = 0;
|
||||
static TickWaiter<LOOP_INTERVAL_MS> waiter;
|
||||
|
||||
HardwareTimer timer(1);
|
||||
HardwareTimer ctrl_timer(4);
|
||||
|
||||
void setup() {
|
||||
USBComposite.setManufacturerString("ClockworkPI");
|
||||
@ -43,6 +44,9 @@ void setup() {
|
||||
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._Serial = new USBCompositeSerial;
|
||||
|
||||
@ -55,12 +59,17 @@ void setup() {
|
||||
keys_init(&dev_term);
|
||||
trackball_init(&dev_term);
|
||||
|
||||
dev_term._Serial->println("setup done");
|
||||
//dev_term._Serial->println("setup done");
|
||||
|
||||
pinMode(PD2,INPUT);// switch 2 in back
|
||||
|
||||
timer.setPeriod(KEYBOARD_LED_PWM_PERIOD);
|
||||
timer.resume();
|
||||
|
||||
ctrl_timer.setPeriod(20*1000);
|
||||
ctrl_timer.attachInterrupt(1,ctrl_timer_handler);
|
||||
ctrl_timer.refresh();
|
||||
ctrl_timer.resume();
|
||||
|
||||
pinMode(PA8,PWM);
|
||||
pwmWrite(PA8,0);
|
||||
@ -69,6 +78,26 @@ void setup() {
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
//DO NOT USE dev_term._Serial->println(""); in timer interrupt function,will block
|
||||
#define LOCK_TIME 50
|
||||
void ctrl_timer_handler(void) {
|
||||
|
||||
if( dev_term.Keyboard_state.ctrl_begin >0) {
|
||||
dev_term.Keyboard_state.ctrl_time++;
|
||||
|
||||
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() {
|
||||
dev_term.delta = waiter.waitForNextTick();
|
||||
dev_term.state->tick(dev_term.delta);
|
||||
|
||||
@ -304,7 +304,7 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
||||
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];
|
||||
k = keys_maps[dv->Keyboard_state.layer][col];
|
||||
}
|
||||
|
||||
if(k == EMP){
|
||||
@ -314,7 +314,7 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
||||
if(dv->Keyboard_state.lock == 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
switch(k) {
|
||||
case _LEFT_SHIFT_KEY:
|
||||
if(mode == KEY_PRESSED) {
|
||||
@ -483,9 +483,22 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
||||
|
||||
//_LEFT_CTRL_KEY,_CMD_KEY , _LEFT_ALT
|
||||
case _LEFT_CTRL_KEY:
|
||||
case KEY_RIGHT_CTRL:
|
||||
if(mode == KEY_PRESSED){
|
||||
if(dv->Keyboard_state.ctrl_lock == 0){
|
||||
dv->Keyboard->press(k);
|
||||
dv->Keyboard_state.ctrl_begin = k;
|
||||
}
|
||||
}else {
|
||||
if(dv->Keyboard_state.ctrl_lock == 0){
|
||||
dv->Keyboard->release(k);
|
||||
dv->Keyboard_state.ctrl_begin = 0;
|
||||
dv->Keyboard_state.ctrl_time = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case _CMD_KEY:
|
||||
case _LEFT_ALT:
|
||||
case KEY_RIGHT_CTRL:
|
||||
case KEY_RIGHT_ALT:
|
||||
if(mode == KEY_PRESSED){
|
||||
dv->Keyboard->press(k);
|
||||
@ -504,5 +517,16 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
||||
default:break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
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->_Serial->println("ctrl lock released");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user