keyboard_task.c File Reference

#include "config.h"
#include "conf_usb.h"
#include "keyboard_task.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 ()
void sof_action (void)

Variables

U8 code usb_keys []
U8 code usb_keyup []
U8 code usb_keydown []
U8 code usb_keyright []
U8 code usb_keyleft []
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 87 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 121 of file keyboard_task.c.

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

00122 {
00123    if(Is_device_enumerated())
00124    {
00125       // if USB ready to transmit new data :
00126       //        - if last time = 0, nothing
00127       //        - if key pressed -> transmit key
00128       //        - if !key pressed -> transmit 0
00129       if (key_hit==FALSE )
00130       {
00131 
00132          if (cpt_sof>= NB_IDLE_POLLING_SOF) 
00133          {
00134             kbd_test_hit();
00135             cpt_sof = 0;
00136          }
00137       }
00138       
00139       else
00140       {
00141          Usb_select_endpoint(EP_KBD_IN);   
00142          if(Is_usb_write_enabled())
00143          {
00144             if ( transmit_no_key==FALSE)
00145             {
00146                transmit_no_key = TRUE;
00147                Usb_write_byte(HID_MODIFIER_NONE);  // Byte0: Modifier
00148                Usb_write_byte(0);                  // Byte1: Reserved
00149                Usb_write_byte(usb_key);            // Byte2: Keycode 0
00150                Usb_write_byte(0);                  // Byte2: Keycode 1
00151                Usb_write_byte(0);                  // Byte2: Keycode 2
00152                Usb_write_byte(0);                  // Byte2: Keycode 3
00153                Usb_write_byte(0);                  // Byte2: Keycode 4
00154                Usb_write_byte(0);                  // Byte2: Keycode 5
00155                Usb_send_in();
00156                return;
00157             }
00158             else
00159             {
00160                key_hit = FALSE;
00161                transmit_no_key = FALSE;
00162                Usb_write_byte(0);
00163                Usb_write_byte(0);
00164                Usb_write_byte(0);
00165                Usb_write_byte(0);
00166                Usb_write_byte(0);
00167                Usb_write_byte(0);
00168                Usb_write_byte(0);
00169                Usb_write_byte(0);
00170                Usb_send_in();
00171             }
00172          }
00173       }
00174    }
00175 }

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 182 of file keyboard_task.c.

Referenced by keyboard_task().

00183 {
00184    switch (usb_kbd_state)
00185    {
00186       case 0:
00187       if (Is_btn_middle())
00188       {
00189          usb_kbd_state = 1;
00190          usb_key_pointer = usb_keys;
00191          usb_data_to_send = SIZEOF_USB_KEYS;
00192       }
00193       else if (Is_joy_up())
00194       {
00195          usb_kbd_state = 1;
00196          usb_key_pointer = usb_keyup;
00197          usb_data_to_send = (Uint16)sizeof(usb_keyup);
00198       }    
00199       else if (Is_joy_down())
00200       {
00201          usb_kbd_state = 1;
00202          usb_key_pointer = usb_keydown;
00203         usb_data_to_send = (Uint16)sizeof(usb_keydown);
00204       }   
00205       else if (Is_joy_right())
00206       {
00207          usb_kbd_state = 1;
00208          usb_key_pointer = usb_keyright;
00209         usb_data_to_send = (Uint16)sizeof(usb_keyright);
00210       } 
00211       else if (Is_joy_left())
00212       {
00213          usb_kbd_state = 1;
00214          usb_key_pointer = usb_keyleft;
00215         usb_data_to_send = (Uint16)sizeof(usb_keyleft);
00216       }       
00217       
00218       break;
00219 
00220       case 1:
00221       if (usb_data_to_send != 0)
00222       {
00223          if ((key_hit == FALSE) && (transmit_no_key == FALSE))
00224          {
00225 #ifndef __GNUC__
00226             usb_key = *usb_key_pointer++;
00227 #else
00228             usb_key = pgm_read_byte_near(usb_key_pointer++);
00229 #endif
00230             usb_data_to_send --;
00231             key_hit = TRUE;
00232          }
00233       }
00234       else
00235       {
00236          usb_kbd_state = 0;
00237       }
00238       break;
00239    }
00240 }

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 248 of file keyboard_task.c.

References Usb_detach.

00249 {
00250    Usb_detach();
00251 }

__interrupt void mouse_disco_int (  ) 

Definition at line 271 of file keyboard_task.c.

References Switches_disable_it, and usb_generate_remote_wakeup().

00273 {
00274    Switches_disable_it();
00275    usb_generate_remote_wakeup();
00276 }

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 58 of file keyboard_task.c.

Referenced by kbd_test_hit().

U8 code usb_keyup[]

Initial value:

 {
                        HID_UP, 
                        }

Definition at line 72 of file keyboard_task.c.

Referenced by kbd_test_hit().

U8 code usb_keydown[]

Initial value:

 {
                        HID_DOWN, 
                        }

Definition at line 75 of file keyboard_task.c.

Referenced by kbd_test_hit().

U8 code usb_keyright[]

Initial value:

 {
                        HID_RIGHT, 
                        }

Definition at line 78 of file keyboard_task.c.

Referenced by kbd_test_hit().

U8 code usb_keyleft[]

Initial value:

 {
                        HID_LEFT, 
                        }

Definition at line 81 of file keyboard_task.c.

Referenced by kbd_test_hit().

volatile U8 cpt_sof

Definition at line 92 of file keyboard_task.c.

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

U8 transmit_no_key

Definition at line 93 of file keyboard_task.c.

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

volatile bit key_hit

Definition at line 94 of file keyboard_task.c.

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

U8 usb_key

Definition at line 95 of file keyboard_task.c.

Referenced by kbd_test_hit(), and keyboard_task().

U8 usb_kbd_state

Definition at line 96 of file keyboard_task.c.

Referenced by kbd_test_hit(), and keyboard_task_init().

U16 usb_data_to_send

Definition at line 97 of file keyboard_task.c.

Referenced by kbd_test_hit().

U8 code* usb_key_pointer

Definition at line 101 of file keyboard_task.c.

Referenced by kbd_test_hit().


Generated on Fri Sep 11 14:37:15 2009 for ATMEL by  doxygen 1.5.3