static void input_task(void *arg) { unsigned char scode; unsigned ch; while (true) { if ( !GetMsgQueue(scan_mq, &scode) ) continue; /* Perform make/break processing. */ if ( (ch = make_break(scode)) == NONE ) continue; if (1 <= ch && ch <= 0xFF) /* A normal character. */ PutMsgQueue(key_mq, &ch); else if (HOME <= ch && ch <= INSRT) { /* An ASCII escape sequence generated by the numeric pad. */ unsigned c = ESC; PutMsgQueue(key_mq, &c); c = '['; PutMsgQueue(key_mq, &c); c = numpad_map[ch - HOME]; PutMsgQueue(key_mq, &c); } else { // Aquí deberían procesarse teclas especiales de procesamiento // inmediato como Fn, Alt-Fn, etc. } } }
static void input_task(void *arg){ unsigned char scode; unsigned ch; int tty_num=-1; while (true) { tty_num=-1; if ( !GetMsgQueue(scan_mq, &scode) ) continue; /* Perform make/break processing. */ if ( (ch = make_break(scode)) == NONE ) continue; if (1 <= ch && ch <= 0xFF) /* A normal character. */ PutMsgQueue(key_mq, &ch); else if (HOME <= ch && ch <= INSRT) { /* An ASCII escape sequence generated by the numeric pad. */ unsigned c = ESC; PutMsgQueue(key_mq, &c); c = '['; PutMsgQueue(key_mq, &c); c = numpad_map[ch - HOME]; PutMsgQueue(key_mq, &c); }else{ // Aquí deberían procesarse teclas especiales de procesamiento // inmediato como Fn, Alt-Fn, etc. switch( ch ){ case AF1: tty_num = 0; break; case AF2: tty_num = 1; break; case AF3: tty_num = 2; break; case AF4: tty_num = 3; break; } if(tty_num != -1){ clearAllTabs(); turnOnOFFTab(ON, tty_num+1); turnOffMouse(); switch_focus(tty_num); turnOnMouse(); } } } }