274 lines
7.9 KiB
C
274 lines
7.9 KiB
C
/* **********************************************************
|
|
* 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
|
|
/** @} */
|
|
/** @} */
|