Esempio n. 1
0
char getChar(){


  /*I don't like allocating this memory every time a key is pressed but for now it works*/
  unsigned char kbdus[128]=
    
    {
      0, 27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b',
      '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
      0, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`', 0,
      '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 0,
      '*',
      0, ' ', 0, /* capslock */
      0, /* f1... */
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0, /* ...f10 */
      0, /* numlock */
      0, /*scroll lock*/
      0, /*home*/
      0, /*uparrow*/
      0, /*pgup*/
      '-',
      0, /*leftarrow*/
      0, /*rightarrow*/
      '+',
      0, /*end*/
      0, /*downarrow*/
      0, /*pgdown*/
      0, /*insert*/
      0, /*delete*/
      0, 0, 0,
      0, /*f11*/
      0, /*f12*/
      0, /*else*/
    };
  
  int result;
  result = getScancode();
  if (result != (result & 127)){
    return 0;
  }
  result = result & 127;
  
  unsigned char ret;
  ret = kbdus[result];
  return (char) ret;
}
Esempio n. 2
0
static void keyboard_handler(registers_t* r)
{
    // Get scancode
    uint8_t scancode = getScancode();
    bool make = false;

    // Find out key. Issue events.
    KEY_t key = scancodeToKey(scancode, &make);

    if (key == __KEY_INVALID)
    {
        return;
    }

    if (make)
    {
        for (dlelement_t* e = console_displayed->tasks->head; e != 0; e = e->next)
        {
            event_issue(((task_t*)(e->data))->eventQueue, EVENT_KEY_DOWN, &key, sizeof(KEY_t));
        }
    }
    else
    {
        for (dlelement_t* e = console_displayed->tasks->head; e != 0; e = e->next)
        {
            event_issue(((task_t*)(e->data))->eventQueue, EVENT_KEY_UP, &key, sizeof(KEY_t));
        }
        return;
    }

    // Find out ASCII representation of key. Issue events.
    char ascii = keyToASCII(key);
    if (ascii)
    {
        for (dlelement_t* e = console_displayed->tasks->head; e != 0; e = e->next)
        {
            event_issue(((task_t*)(e->data))->eventQueue, EVENT_TEXT_ENTERED, &ascii, sizeof(char));
        }
    }
}