keyboard_task.c File Reference

#include "config.h"
#include "conf_usb.h"
#include "keyboard_task.h"
#include "lib_board/stk_525/stk_525.h"
#include "lib_mcu/usb/usb_drv.h"
#include "usb_descriptors.h"
#include "modules/usb/device_chap9/usb_standard_request.h"
#include "lib_mcu/power/power_drv.h"

Include dependency graph for keyboard_task.c:

Go to the source code of this file.

Defines

#define SIZEOF_USB_KEYS   (Uint16)sizeof(usb_keys)

Functions

void keyboard_task_init (void)
 This function initializes the hardware/software ressources required for keyboard task.
void keyboard_task (void)
void kbd_test_hit (void)
void vbus_off_action (void)
void suspend_action (void)
__interrupt void mouse_disco_int ()

Variables

U8 code usb_keys []
volatile U8 cpt_sof
U8 transmit_no_key
volatile bit key_hit
U8 usb_key
U8 usb_kbd_state
U16 usb_data_to_send
U8 code * usb_key_pointer


Detailed Description

This file manages the keyboard task.

Author:
Atmel Corporation: http://www.atmel.com
Support and FAQ: http://support.atmel.no/

Definition in file keyboard_task.c.


Define Documentation

#define SIZEOF_USB_KEYS   (Uint16)sizeof(usb_keys)

Definition at line 67 of file keyboard_task.c.

Referenced by kbd_test_hit().


Function Documentation

void keyboard_task ( void   ) 

Entry point of the mouse management This function links the mouse and the USB bus.

Definition at line 100 of file keyboard_task.c.

References EP_KBD_IN, FALSE, HID_MODIFIER_NONE, Is_device_enumerated, Is_usb_write_enabled, kbd_test_hit(), key_hit, transmit_no_key, TRUE, usb_key, Usb_select_endpoint, Usb_send_in, and Usb_write_byte.

00101 {
00102    if(Is_device_enumerated())
00103    {
00104       // if USB ready to transmit new data :
00105       //        - if last time = 0, nothing
00106       //        - if key pressed -> transmit key
00107       //        - if !key pressed -> transmit 0
00108       if (key_hit==FALSE)
00109       {
00110          kbd_test_hit();
00111       }
00112       
00113       else
00114       {
00115          Usb_select_endpoint(EP_KBD_IN);   
00116          if(Is_usb_write_enabled())
00117          {
00118             if ( transmit_no_key==FALSE)
00119             {
00120                transmit_no_key = TRUE;
00121                Usb_write_byte(HID_MODIFIER_NONE);  // Byte0: Modifier
00122                Usb_write_byte(0);                  // Byte1: Reserved
00123                Usb_write_byte(usb_key);            // Byte2: Keycode 0
00124                Usb_write_byte(0);                  // Byte2: Keycode 1
00125                Usb_write_byte(0);                  // Byte2: Keycode 2
00126                Usb_write_byte(0);                  // Byte2: Keycode 3
00127                Usb_write_byte(0);                  // Byte2: Keycode 4
00128                Usb_write_byte(0);                  // Byte2: Keycode 5
00129                Usb_send_in();
00130                return;
00131             }
00132             else
00133             {
00134                key_hit = FALSE;
00135                transmit_no_key = FALSE;
00136                Usb_write_byte(0);
00137                Usb_write_byte(0);
00138                Usb_write_byte(0);
00139                Usb_write_byte(0);
00140                Usb_write_byte(0);
00141                Usb_write_byte(0);
00142                Usb_write_byte(0);
00143                Usb_write_byte(0);
00144                Usb_send_in();
00145             }
00146          }
00147       }
00148    }
00149 }

Here is the call graph for this function:

void kbd_test_hit ( void   ) 

Chech keyboard key hit This function scans the keyboard keys and update the scan_key word. if a key is pressed, the key_hit bit is set to TRUE.

Definition at line 156 of file keyboard_task.c.

Referenced by keyboard_task().

00157 {
00158    switch (usb_kbd_state)
00159    {
00160       case 0:
00161       if (Is_btn_middle())
00162       {
00163          usb_kbd_state = 1;
00164          usb_key_pointer = usb_keys;
00165          usb_data_to_send = SIZEOF_USB_KEYS;
00166       }
00167       break;
00168 
00169       case 1:
00170       if (usb_data_to_send != 0)
00171       {
00172          if ((key_hit == FALSE) && (transmit_no_key == FALSE))
00173          {
00174 #ifndef __GNUC__
00175             usb_key = *usb_key_pointer++;
00176 #else
00177             usb_key = pgm_read_byte_near(usb_key_pointer++);
00178 #endif
00179             usb_data_to_send --;
00180             key_hit = TRUE;
00181          }
00182       }
00183       else
00184       {
00185          usb_kbd_state = 0;
00186       }
00187       break;
00188    }
00189 }

Here is the caller graph for this function:

void vbus_off_action ( void   ) 

vbus_off_action This function increments the action to be executed upon the USB VBUS disconnection Here a Vbus lost lead to detach

Definition at line 197 of file keyboard_task.c.

References Usb_detach.

00198 {
00199    Usb_detach();
00200 }

__interrupt void mouse_disco_int (  ) 

Definition at line 220 of file keyboard_task.c.

References Switches_disable_it, and usb_generate_remote_wakeup().

00222 {
00223    Switches_disable_it();
00224    usb_generate_remote_wakeup();
00225 }

Here is the call graph for this function:


Variable Documentation

U8 code usb_keys[]

Initial value:

 {HID_ENTER, 
HID_W, HID_E, HID_L, HID_C, HID_O, HID_M, HID_E, HID_SPACEBAR, HID_T, HID_O, HID_SPACEBAR, HID_H, HID_I, HID_D, HID_SPACEBAR, HID_K, HID_E, HID_Y, HID_B, HID_O, HID_A, HID_R, HID_D, HID_SPACEBAR, HID_D, HID_E, HID_M, HID_O, HID_SPACEBAR, HID_A, HID_N, HID_D, HID_SPACEBAR, HID_C, HID_O, HID_N, HID_G, HID_R, HID_A, HID_T, HID_U, HID_L, HID_A, HID_T, HID_I, HID_O, HID_N, HID_S, HID_SPACEBAR, HID_F, HID_O, HID_R, HID_SPACEBAR, HID_S, HID_E, HID_L, HID_E, HID_C, HID_T, HID_I, HID_N, HID_G, HID_SPACEBAR, HID_T, HID_H, HID_E, HID_SPACEBAR, HID_A, HID_T, HID_9, HID_0, HID_U, HID_S, HID_B, HID_X, HID_X, HID_X, HID_SPACEBAR, HID_M, HID_I, HID_C, HID_R, HID_O, HID_C, HID_O, HID_N, HID_T, HID_R, HID_O, HID_L, HID_L, HID_E, HID_R, HID_SPACEBAR, HID_F, HID_A, HID_M, HID_I, HID_L, HID_Y, HID_DOT,HID_ENTER,HID_ENTER
,HID_T, HID_H, HID_E, HID_SPACEBAR, HID_A, HID_T, HID_9, HID_0, HID_U, HID_S, HID_B, HID_X, HID_X, HID_X, HID_SPACEBAR,HID_I, HID_S, HID_SPACEBAR, HID_B, HID_A, HID_S, HID_E, HID_D, HID_SPACEBAR,HID_O, HID_N, HID_SPACEBAR, HID_T, HID_H, HID_E, HID_SPACEBAR, HID_A, HID_V, HID_R, HID_SPACEBAR, HID_C, HID_O, HID_R, HID_E, HID_SPACEBAR, HID_W, HID_I, HID_T, HID_H, HID_SPACEBAR, HID_T, HID_H, HID_E, HID_SPACEBAR, HID_F, HID_O, HID_L, HID_L, HID_O, HID_W, HID_I, HID_N, HID_G, HID_SPACEBAR, HID_F, HID_E, HID_A, HID_T, HID_U, HID_R, HID_E, HID_S, HID_ENTER
,HID_KEYPAD_MINUS,HID_SPACEBAR,HID_U,HID_S,HID_B,HID_SPACEBAR,HID_O,HID_T,HID_G,HID_SPACEBAR,HID_ENTER
,HID_KEYPAD_MINUS,HID_SPACEBAR,HID_L,HID_O,HID_W,HID_SLASH,HID_F,HID_U,HID_L,HID_L,HID_SPACEBAR,HID_S,HID_P,HID_E,HID_E,HID_D,HID_SPACEBAR,HID_C,HID_O,HID_N,HID_T,HID_R,HID_O,HID_L,HID_L,HID_E,HID_R,HID_SPACEBAR,HID_W,HID_I,HID_T,HID_H,HID_SPACEBAR,HID_7,HID_SPACEBAR,HID_E,HID_N,HID_D,HID_P,HID_O,HID_I,HID_N,HID_T,HID_S,HID_ENTER
,HID_KEYPAD_MINUS,HID_SPACEBAR,HID_U,HID_P,HID_SPACEBAR,HID_T,HID_O,HID_SPACEBAR,HID_1,HID_2,HID_8,HID_SPACEBAR,HID_K,HID_B,HID_Y,HID_T,HID_E,HID_S,HID_SPACEBAR,HID_O,HID_N,HID_KEYPAD_MINUS,HID_C,HID_H,HID_I,HID_P,HID_SPACEBAR,HID_F,HID_L,HID_A,HID_S,HID_H,HID_SPACEBAR,HID_M,HID_E,HID_M,HID_O,HID_R,HID_Y,HID_ENTER
,HID_KEYPAD_MINUS,HID_SPACEBAR,HID_U,HID_S,HID_B,HID_SPACEBAR,HID_B,HID_O,HID_O,HID_T,HID_L,HID_O,HID_A,HID_D,HID_E,HID_R,HID_ENTER
,HID_KEYPAD_MINUS,HID_SPACEBAR,HID_U,HID_A,HID_R,HID_T,HID_SLASH,HID_S,HID_P,HID_I,HID_SLASH,HID_SPACEBAR,HID_T,HID_W,HID_I,HID_ENTER
,HID_SPACEBAR,HID_SPACEBAR,HID_A,HID_N,HID_D,HID_SPACEBAR,HID_M,HID_O,HID_R,HID_E,HID_DOT,HID_DOT,HID_DOT,HID_ENTER
,HID_E,HID_N,HID_J,HID_O,HID_Y,HID_SPACEBAR,HID_Y,HID_O,HID_U,HID_R,HID_SPACEBAR,HID_T,HID_I,HID_M,HID_E,HID_SPACEBAR,HID_W,HID_I,HID_T,HID_H,HID_SPACEBAR,HID_A,HID_T,HID_M,HID_E,HID_L,HID_SPACEBAR,HID_P,HID_R,HID_O,HID_D,HID_U,HID_C,HID_T,HID_S,HID_DOT,HID_DOT,HID_DOT
                           }

Definition at line 55 of file keyboard_task.c.

Referenced by kbd_test_hit().

volatile U8 cpt_sof

Definition at line 72 of file keyboard_task.c.

Referenced by keyboard_task_init().

U8 transmit_no_key

Definition at line 73 of file keyboard_task.c.

Referenced by kbd_test_hit(), keyboard_task(), and keyboard_task_init().

volatile bit key_hit

Definition at line 74 of file keyboard_task.c.

Referenced by kbd_test_hit(), keyboard_task(), and keyboard_task_init().

U8 usb_key

Definition at line 75 of file keyboard_task.c.

Referenced by kbd_test_hit(), and keyboard_task().

U8 usb_kbd_state

Definition at line 76 of file keyboard_task.c.

Referenced by kbd_test_hit(), and keyboard_task_init().

U16 usb_data_to_send

Definition at line 77 of file keyboard_task.c.

Referenced by kbd_test_hit().

U8 code* usb_key_pointer

Definition at line 81 of file keyboard_task.c.

Referenced by kbd_test_hit().


Generated on Fri Oct 31 15:59:43 2008 for ATMEL by  doxygen 1.5.3