Files @ d0a14f973771
Branch filter:

Location: vmkdrivers/BLD/build/HEADERS/vmkapi-current-all-public/vmkernel64/release/device/vmkapi_input.h

unknown
ESXi-5.0-U1
/* **********************************************************
 * Copyright 2008 - 2009 VMware, Inc.  All rights reserved.
 * **********************************************************/

/*
 * @VMKAPIMOD_LICENSE@
 */

/*
 ***********************************************************************
 * Input                                                          */ /**
 * \addtogroup Device
 * @{
 * \defgroup Input Human Input Device Interfaces
 *
 * Interfaces that allow to enqueue keyboard character(s) to vmkernel 
 * and forward input events to the host.
 * @{ 
 *
 ***********************************************************************
 */

#ifndef _VMKAPI_INPUT_H_
#define _VMKAPI_INPUT_H_

/** \cond never */
#ifndef VMK_HEADER_INCLUDED_FROM_VMKAPI_H
#error This vmkapi file should never be included directly but only via vmkapi.h
#endif
/** \endcond never */

/**
 * \brief Values for special keys (beyond normal ASCII codes).
 */
enum {
   VMK_INPUT_KEY_F1 = (vmk_int8) 0x81,
   VMK_INPUT_KEY_F2,
   VMK_INPUT_KEY_F3,
   VMK_INPUT_KEY_F4,
   VMK_INPUT_KEY_F5,
   VMK_INPUT_KEY_F6,
   VMK_INPUT_KEY_F7,
   VMK_INPUT_KEY_F8,
   VMK_INPUT_KEY_F9,
   VMK_INPUT_KEY_F10,
   VMK_INPUT_KEY_F11,
   VMK_INPUT_KEY_F12,
   VMK_INPUT_KEY_SHIFT_F1,
   VMK_INPUT_KEY_SHIFT_F2,
   VMK_INPUT_KEY_SHIFT_F3,
   VMK_INPUT_KEY_SHIFT_F4,
   VMK_INPUT_KEY_SHIFT_F5,
   VMK_INPUT_KEY_SHIFT_F6,
   VMK_INPUT_KEY_SHIFT_F7,
   VMK_INPUT_KEY_SHIFT_F8,
   VMK_INPUT_KEY_SHIFT_F9,
   VMK_INPUT_KEY_SHIFT_F10,
   VMK_INPUT_KEY_SHIFT_F11,
   VMK_INPUT_KEY_SHIFT_F12,
   VMK_INPUT_KEY_CTRL_F1,
   VMK_INPUT_KEY_CTRL_F2,
   VMK_INPUT_KEY_CTRL_F3,
   VMK_INPUT_KEY_CTRL_F4,
   VMK_INPUT_KEY_CTRL_F5,
   VMK_INPUT_KEY_CTRL_F6,
   VMK_INPUT_KEY_CTRL_F7,
   VMK_INPUT_KEY_CTRL_F8,
   VMK_INPUT_KEY_CTRL_F9,
   VMK_INPUT_KEY_CTRL_F10,
   VMK_INPUT_KEY_CTRL_F11,
   VMK_INPUT_KEY_CTRL_F12,
   VMK_INPUT_KEY_CTRLSHIFT_F1,
   VMK_INPUT_KEY_CTRLSHIFT_F2,
   VMK_INPUT_KEY_CTRLSHIFT_F3,
   VMK_INPUT_KEY_CTRLSHIFT_F4,
   VMK_INPUT_KEY_CTRLSHIFT_F5,
   VMK_INPUT_KEY_CTRLSHIFT_F6,
   VMK_INPUT_KEY_CTRLSHIFT_F7,
   VMK_INPUT_KEY_CTRLSHIFT_F8,
   VMK_INPUT_KEY_CTRLSHIFT_F9,
   VMK_INPUT_KEY_CTRLSHIFT_F10,
   VMK_INPUT_KEY_CTRLSHIFT_F11,
   VMK_INPUT_KEY_CTRLSHIFT_F12,
   VMK_INPUT_KEY_HOME,
   VMK_INPUT_KEY_UP,
   VMK_INPUT_KEY_PAGEUP,
   VMK_INPUT_KEY_NUMMINUS,
   VMK_INPUT_KEY_LEFT,
   VMK_INPUT_KEY_CENTER,
   VMK_INPUT_KEY_RIGHT,
   VMK_INPUT_KEY_NUMPLUS,
   VMK_INPUT_KEY_END,
   VMK_INPUT_KEY_DOWN,
   VMK_INPUT_KEY_PAGEDOWN,
   VMK_INPUT_KEY_INSERT,
   VMK_INPUT_KEY_DELETE,
   VMK_INPUT_KEY_UNUSED1,
   VMK_INPUT_KEY_UNUSED2,
   VMK_INPUT_KEY_UNUSED3,
   VMK_INPUT_KEY_ALT_F1,
   VMK_INPUT_KEY_ALT_F2,
   VMK_INPUT_KEY_ALT_F3,
   VMK_INPUT_KEY_ALT_F4,
   VMK_INPUT_KEY_ALT_F5,
   VMK_INPUT_KEY_ALT_F6,
   VMK_INPUT_KEY_ALT_F7,
   VMK_INPUT_KEY_ALT_F8,
   VMK_INPUT_KEY_ALT_F9,
   VMK_INPUT_KEY_ALT_F10,
   VMK_INPUT_KEY_ALT_F11,
   VMK_INPUT_KEY_ALT_F12,
};

/**
 * \brief Keyboard scancode mapping modes.
 */
typedef enum vmk_KeyboardKeymapMode {
   VMK_KEYMAP_MODE_INVALID=0,
   VMK_KEYMAP_MODE_XLATE=1,
   VMK_KEYMAP_MODE_MEDIUMRAW=2,
   VMK_KEYMAP_MODE_RAW=3,
   VMK_KEYMAP_MODE_UNICODE=4,
} vmk_KeyboardKeymapMode;

/**
 * \brief Keyboard driver type identifiers.
 */
typedef enum vmk_KeyboardDriverType {
   VMK_KEYBOARD_DRIVER_TYPE_INVALID=0,
   VMK_KEYBOARD_DRIVER_TYPE_USB=1,
} vmk_KeyboardDriverType;

/**
 * \brief Opaque handle for a keyboard interrupt handler.
 */
typedef void *vmk_KeyboardInterruptHandle;

/**
 * \brief Opaque handle for unregistering keyboard driver.
 */
typedef struct vmk_KeyboardDriverHandleInt *vmk_KeyboardDriverHandle;

/**
 * \brief Attributes struct for keyboard driver
 */
typedef struct vmk_KeyboardDriverAttributes {
   vmk_KeyboardDriverType driverType;
   int (*SetKeymapMode)(vmk_KeyboardKeymapMode mode);
   vmk_KeyboardKeymapMode (*GetKeymapMode)(void);
} vmk_KeyboardDriverAttributes;

/*
 ***********************************************************************
 * vmk_InputPutQueue         --                                   */ /**
 *
 * \ingroup Input
 * \brief Enqueue a keyboard character to vmkernel.
 *
 *        Does nothing if vmkernel is not the audience.
 *
 * \param[in]  ch    Input character (ASCII or special).
 *
 ***********************************************************************
 */

VMK_ReturnStatus vmk_InputPutQueue(int ch);

/*
 ***********************************************************************
 * vmk_InputPutsQueue --                                          */ /**
 *
 * \ingroup Input
 * \brief Enqueue multiple keyboard characters to vmkernel.
 *
 *        Does nothing if vmkernel is not the audience.
 *
 * \param[in]  cp    Input characters (ASCII or special).
 *
 ***********************************************************************
 */

VMK_ReturnStatus vmk_InputPutsQueue(char *cp);

/*
 ***********************************************************************
 * vmk_InterruptHandler --                                        */ /**
 *
 * \ingroup Input
 * \brief Interrupt handler pointer type provided to VMkernel
 *
 * \param[in] irq          Source specific IRQ info.
 * \param[in] context      Source specific context info.
 * \param[in] registers    Source specific register state.
 *
 ***********************************************************************
 */
typedef void (*vmk_InputInterruptHandler)(int irq,
                                          void *context,
                                          void *registers);

/*
 ***********************************************************************
 * vmk_RegisterInputKeyboardInterruptHandler --                   */ /**
 *
 * \ingroup Input
 * \brief Register an interrupt handler for polling an external
 *        keyboard.
 *
 * \note This function \em must be called at module load time.
 *
 * \param[in]  handler     Interrupt handler.
 * \param[in]  irq         Interrupt vector.
 * \param[in]  context     Context info.
 * \param[in]  registers   Register or other state.
 * \param[out] handle      Handle for registered keyboard interrupt
 *                         handler.
 *
 ***********************************************************************
 */
VMK_ReturnStatus
vmk_RegisterInputKeyboardInterruptHandler(vmk_InputInterruptHandler *handler,
                                          vmk_uint32 irq,
                                          void *context,
                                          void *registers,
                                          vmk_KeyboardInterruptHandle *handle);

/*
 ***********************************************************************
 * vmk_UnregisterInputKeyboardInterruptHandler --                 */ /**
 *
 * \ingroup Input
 * \brief Unregister a keyboard interrupt handler.
 *
 * \param[in] handle    Handle for registered keyboard interrupt
 *                      handler.
 *
 ***********************************************************************
 */
VMK_ReturnStatus
vmk_UnregisterInputKeyboardInterruptHandler(vmk_KeyboardInterruptHandle handle);

/*
 ***********************************************************************
 * vmk_RegisterKeyboardDriver --                                  */ /**
 *
 * \ingroup Input
 * \brief Register a keyboard driver.
 *
 * \param[in]  attributes Attributes for registered keyboard driver.
 * \param[out] handlePtr  Handle pointer for registered keyboard driver.
 *
 ***********************************************************************
 */
VMK_ReturnStatus
vmk_RegisterKeyboardDriver(vmk_KeyboardDriverAttributes *attributes, 
                           vmk_KeyboardDriverHandle *handlePtr);

/*
 ***********************************************************************
 * vmk_UnregisterKeyboardDriver --                                */ /**
 *
 * \ingroup Input
 * \brief Unregister a keyboard driver.
 *
 * \param[in] handle Handle for registered keyboard driver.
 *
 ***********************************************************************
 */
VMK_ReturnStatus
vmk_UnregisterKeyboardDriver(vmk_KeyboardDriverHandle handle);

#endif
/** @} */
/** @} */