/**
 * @file   kpd_scan_functions.h
 *
 * Declaration of keypad interface functions.
 *
 * @author   Laurent Sollier (l-sollier@ti.com)
 * @version 0.1
 */

/*
 * History:
 *
 *   Date          Author       Modification
 *  ----------------------------------------
 *  10/10/2001     L Sollier    Create
 *
 *
 * (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved
 */

#ifndef _KPD_SCAN_FUNCTIONS_H_
#define _KPD_SCAN_FUNCTIONS_H_

#include "kpd/kpd_i.h"

#include "rv/rv_general.h"


/* For Windows environment */
#ifdef _WINDOWS
   #ifdef __cplusplus
      extern "C"
      {
   #endif
#endif

/**
 * @name Internal functions
 *
 */
/*@{*/



#if (CHIPSET == 12)

/** 
 * function: kpd_init_ctrl_reg
 * Initialize the Control register
 */
void kpd_init_ctrl_reg(const UINT8 software_nreset, 
                       const T_KPD_Nsoftware_mode nsoftware_mode, 
                       const T_KPD_PTV ptv,
                       const T_KPD_EnableDetection long_key_process_en,
                       const T_KPD_EnableDetection time_out_empty_en,
                       const T_KPD_EnableDetection time_out_long_key_en, 
                       const T_KPD_EnableDetection repeat_mode_en);


/**
 * function: kpd_software_reset
 *
 * Reset software  
 */
void kpd_software_reset(void);

#endif

/**
 * function: kpd_initialize_keypad_hardware
 *
 * Hardware initialization (Not implemented on Riviera tool).
 */
void kpd_initialize_keypad_hardware(void);

/**
 * function: kpd_acknowledge_key_pressed
 *
 * Unmask keypad interrupt (Not implemented on Riviera tool).
 */
void kpd_acknowledge_key_pressed(void);

/**
 * function: kpd_key_pressed
 *
 * This function send the message T_KPD_KEY_PRESSED_MSG with the value of key pressed.
 *
 * @param   value  Physical key identification.
 */
void kpd_key_pressed(UINT8 value);


/**
 * function: kpd_scan_keypad
 *
 * This function returns the physical key Id for the pressed key, or
 * KPD_KEY_NULL if no key is pressed.
 *
 * @return Physical key identification. 
 */
T_KPD_PHYSICAL_KEY_ID kpd_scan_keypad(void);


#ifdef _WINDOWS

   /**
    * function: kpd_key_handler
    *
    * This function is called when a key is pressed (Interrupt process).
    *
    */
   void kpd_key_handler(void);


   /**
    * function: kpd_key_released
    *
    * This function send the message T_KPD_KEY_PRESSED_MSG with the value of key=KPD_PKEY_NULL.
    *
    */
   void kpd_key_released(void);

   /**
    * function: kpd_set_key_value
    *
    * This function set the key identification.
    *
    * @param   value  Physical key identification.
    */
   void kpd_set_key_value(T_KPD_PHYSICAL_KEY_ID value);

   #ifdef __cplusplus
      }
   #endif
#endif

/*@}*/
#endif /* #ifndef _KPD_SCAN_FUNCTIONS_H_ */