⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lh7a400_evb_keyboard_driver.c

📁 sharp的arm920t 7A400的评估板附带光盘Sharp KEVLH7A400 v0.3b Welcome to the SHARP KEV7A400 Evaluation board
💻 C
📖 第 1 页 / 共 3 页
字号:
                  if (caps_lock)
                     scanned_key.decoded.c = 'j';
                  else
                     scanned_key.decoded.c = 'J';
               else
                  if (caps_lock)
                     scanned_key.decoded.c = 'J';
                  else
                     scanned_key.decoded.c = 'j';
            else if (row & KB_SLASH_KEY)
               if (num_lock)
                  scanned_key.decoded.c = '/';
               else if (scanned_key.decoded.left_shift || 
                        scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '?';
               else
                  scanned_key.decoded.c = '/';
             else if (row & KB_LEFT_KEY)
             {
               if (scanned_key.decoded.fn)
                  scanned_key.decoded.c = KB_HOME;
               else
                  scanned_key.decoded.c = KB_LEFT;
            }
            break;
         case 5:
            if (row & KB_X_KEY)
               if (scanned_key.decoded.left_shift || 
                   scanned_key.decoded.right_shift)
                  if (caps_lock)
                     scanned_key.decoded.c = 'x';
                  else
                     scanned_key.decoded.c = 'X';
               else
                  if (caps_lock)
                     scanned_key.decoded.c = 'X';
                  else
                     scanned_key.decoded.c = 'x';
            else if (row & KB_C_KEY)
               if (scanned_key.decoded.left_shift || 
                   scanned_key.decoded.right_shift)
                  if (caps_lock)
                     scanned_key.decoded.c = 'c';
                  else
                     scanned_key.decoded.c = 'C';
               else
                  if (caps_lock)
                     scanned_key.decoded.c = 'C';
                  else
                     scanned_key.decoded.c = 'c';
            else if (row & KB_V_KEY)
               if (scanned_key.decoded.left_shift || 
                   scanned_key.decoded.right_shift)
                  if (caps_lock)
                     scanned_key.decoded.c = 'v';
                  else
                     scanned_key.decoded.c = 'V';
               else
                  if (caps_lock)
                     scanned_key.decoded.c = 'V';
                  else
                     scanned_key.decoded.c = 'v';
            else if (row & KB_B_KEY)
               if (scanned_key.decoded.left_shift || 
                   scanned_key.decoded.right_shift)
                  if (caps_lock)
                     scanned_key.decoded.c = 'b';
                  else
                     scanned_key.decoded.c = 'B';
               else
                  if (caps_lock)
                     scanned_key.decoded.c = 'B';
                  else
                     scanned_key.decoded.c = 'b';
            else if (row & KB_N_KEY)
               if (scanned_key.decoded.left_shift || 
                   scanned_key.decoded.right_shift)
                  if (caps_lock)
                     scanned_key.decoded.c = 'n';
                  else
                     scanned_key.decoded.c = 'N';
               else
                  if (caps_lock)
                     scanned_key.decoded.c = 'N';
                  else
                     scanned_key.decoded.c = 'n';
            else if (row & KB_M_KEY)
               if (num_lock)
                  scanned_key.decoded.c = '0';
               else if (scanned_key.decoded.left_shift || 
                   scanned_key.decoded.right_shift)
                  if (caps_lock)
                     scanned_key.decoded.c = 'm';
                  else
                     scanned_key.decoded.c = 'M';
               else
                  if (caps_lock)
                     scanned_key.decoded.c = 'M';
                  else
                     scanned_key.decoded.c = 'm';
            else if (row & KB_PERIOD_KEY)
               if (scanned_key.decoded.left_shift || 
                   scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '>';
               else
                  scanned_key.decoded.c = '.';
            else if (row & KB_COMMA_KEY)
               if (scanned_key.decoded.left_shift || 
                   scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '<';
               else
                  scanned_key.decoded.c = ',';
            else if (row & KB_SPACE_KEY)
               scanned_key.decoded.c = ' ';
            break;
         case 6:
            if (row & KB_THREE_KEY)
               if (scanned_key.decoded.fn)
                  scanned_key.decoded.c = KB_PF3;
               else if (scanned_key.decoded.left_shift || 
                        scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '#';
               else
                  scanned_key.decoded.c = '3';
            else if (row & KB_FOUR_KEY)
            {
               if (scanned_key.decoded.fn)
                  scanned_key.decoded.c = KB_PF4;
               else if (scanned_key.decoded.left_shift || 
                        scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '$';
               else
                  scanned_key.decoded.c = '4';
            }
            else if (row & KB_FOUR_KEY)
               if (scanned_key.decoded.fn)
                  scanned_key.decoded.c = KB_PF4;
               else if (scanned_key.decoded.left_shift || 
                        scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '$';
               else
                  scanned_key.decoded.c = '4';
            else if (row & KB_FIVE_KEY)
               if (scanned_key.decoded.fn)
                  scanned_key.decoded.c = KB_PF5;
               else if (scanned_key.decoded.left_shift || 
                        scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '%';
               else
                  scanned_key.decoded.c = '5';
            else if (row & KB_SIX_KEY)
               if (scanned_key.decoded.fn)
                  scanned_key.decoded.c = KB_PF6;
               else if (scanned_key.decoded.left_shift || 
                        scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '^';
               else
                  scanned_key.decoded.c = '6';
            else if (row & KB_SEVEN_KEY)
               if (scanned_key.decoded.fn)
                  scanned_key.decoded.c = KB_PF7;
               else if (scanned_key.decoded.left_shift || 
                        scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '&';
               else
                  scanned_key.decoded.c = '7';
            else if (row & KB_EIGHT_KEY)
               if (scanned_key.decoded.fn)
                  scanned_key.decoded.c = KB_PF8;
               else if (scanned_key.decoded.left_shift || 
                        scanned_key.decoded.right_shift)
                  scanned_key.decoded.c = '*';
               else
                  scanned_key.decoded.c = '8';
            else if (row & KB_PROG_KEY)
               scanned_key.decoded.c = KB_PROG;
            else if (row & KB_RIGHT_KEY)
            {
              if (scanned_key.decoded.fn)
                 scanned_key.decoded.c = KB_END;
              else
                 scanned_key.decoded.c = KB_RIGHT;
            }
            break;
         default:
            /* should never get here */
            for (;; ) 
               ;
            break;
      }
      if (scanned_key.raw != previous_key.raw)
      {
         /* then a new button is pressed */
         previous_key.raw = scanned_key.raw;
         LH7A400_enqueue_key(previous_key);
      }
      /* else previous key is still being held */
      /* start scanning again */
      goto_control_button_scan_state();   
   }
   timer_start(KB_KEYBOARD_TIMER);
}

/**********************************************************************
*
* Function: goto_debounce_state
*
* Purpose:
*  Set up keyboard driver for debounce state
*
* Processing:
*  Set all column drivers high.
*  setup timer for polling wait interval. Install debounce state timer 
*  interrupt handler. start timer.
*
* Parameters: None
*
* Outputs: None
*
* Returns: Nothing
*
* Notes:
*  Enter this state with timer stopped and set for periodic mode
*
**********************************************************************/
static void goto_debounce_state(void)
{
   /* else still holding previous keys; wait and re-scan */
   gpio_keyscan_set(GPIO_KSCAN_ALL_HIGH);
   timer_set_delay(KB_KEYBOARD_TIMER, KB_POLL_INTERVAL);
               
   timer_irq_setup(KB_KEYBOARD_TIMER, 
                   KB_KEYBOARD_PRIORITY,
                   debounce_state_handler);
   timer_start(KB_KEYBOARD_TIMER);
}

/**********************************************************************
*
* Function: goto_poll_state
*
* Purpose:
*  Set up keyboard driver for poll state
*
* Processing:
*  clear previous key state.
*  Set all column drivers high.
*  setup timer for polling wait interval. Install Poll state timer 
*  interrupt handler. start timer.
*
* Parameters: None
*
* Outputs: None
*
* Returns: Nothing
*
* Notes:
*  Enter this state with timer stopped and set for periodic mode
*
**********************************************************************/
static void goto_poll_state(void)
{
   previous_key.raw = 0;
   gpio_keyscan_set(GPIO_KSCAN_ALL_HIGH);
   timer_set_delay(KB_KEYBOARD_TIMER, KB_POLL_INTERVAL);
               
   timer_irq_setup(KB_KEYBOARD_TIMER, 
                   KB_KEYBOARD_PRIORITY,
                   poll_state_handler);
   timer_start(KB_KEYBOARD_TIMER);
}


/**********************************************************************
*
* Function: LH7A400_init_kb_driver
*
* Purpose:
*  Implement Initial State of keyboard driver state machine
*
* Processing:
*  see module header
*
* Parameters: 
*  timer: Must be one of TIMER1, TIMER2 as defined in
*         LH7A400_map.h
*
* Outputs: None
*
* Returns: Nothing
*
* Notes:
*
**********************************************************************/
void LH7A400_init_kb_driver(void)
{
   num_lock = 0;
   caps_lock = 0;
   timer_init(KB_KEYBOARD_TIMER);
   timer_periodic(KB_KEYBOARD_TIMER);
   
   timer_int_clear(KB_KEYBOARD_TIMER);
   timer_int_enable(KB_KEYBOARD_TIMER);
   goto_poll_state();
}

/**********************************************************************
*
* Function: LH7A400_evb_kb_set_caps_lock
*
* Purpose:
*  Turn caps_lock on or off
*
* Processing:
*  set caps_lock to 1 if lock_on is non-zero, to 0 if lock_on is 0
*
* Parameters: 
*  lock_on: 0 to turn off caps_lock; non-zero to turn it on.
*
* Outputs: None
*
* Returns: Nothing
*
* Notes:
*
**********************************************************************/
void LH7A400_evb_kb_set_caps_lock(INT_32 lock_on)
{
   caps_lock = (lock_on != 0);
}

/**********************************************************************
*
* Function: LH7A400_evb_kb_caps_lock_is_on
*
* Purpose:
*  return the state of caps_lock
*
* Processing: n/a
*
* Parameters: none
*
* Outputs: None
*
* Returns: 
*  1 if caps_lock is on, 0 if caps_lock is off.
*
* Notes:
*
**********************************************************************/
INT_32 LH7A400_evb_kb_caps_lock_is_on(void)
{
   return (caps_lock != 0);
}

/**********************************************************************
*
* Function: LH7A400_evb_kb_set_num_lock
*
* Purpose:
*  Turn num_lock on or off
*
* Processing:
*  set num_lock to 1 if lock_on is non-zero, to 0 if lock_on is 0
*
* Parameters: 
*  lock_on: 0 to turn off num_lock; non-zero to turn it on.
*
* Outputs: None
*
* Returns: Nothing
*
* Notes:
*
**********************************************************************/
void LH7A400_evb_kb_set_num_lock(INT_32 lock_on)
{
   caps_lock = (lock_on != 0);
}

/**********************************************************************
*
* Function: LH7A400_evb_kb_num_lock_is_on
*
* Purpose:
*  return the state of num_lock
*
* Processing: n/a
*
* Parameters: none
*
* Outputs: None
*
* Returns: 
*  1 if num_lock is on, 0 if num_lock is off.
*
* Notes:
*
**********************************************************************/
INT_32 LH7A400_evb_kb_num_lock_is_on(void)
{
   return (caps_lock != 0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -