Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   The file provides services that allow information about an
      3   absolute pointer device to be retrieved.
      4 
      5   Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this distribution.  The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef __ABSOLUTE_POINTER_H__
     17 #define __ABSOLUTE_POINTER_H__
     18 
     19 
     20 #define EFI_ABSOLUTE_POINTER_PROTOCOL_GUID \
     21   { 0x8D59D32B, 0xC655, 0x4AE9, { 0x9B, 0x15, 0xF2, 0x59, 0x04, 0x99, 0x2A, 0x43 } }
     22 
     23 
     24 typedef struct _EFI_ABSOLUTE_POINTER_PROTOCOL EFI_ABSOLUTE_POINTER_PROTOCOL;
     25 
     26 
     27 //*******************************************************
     28 // EFI_ABSOLUTE_POINTER_MODE
     29 //*******************************************************
     30 
     31 
     32 /**
     33   The following data values in the EFI_ABSOLUTE_POINTER_MODE
     34   interface are read-only and are changed by using the appropriate
     35   interface functions.
     36 **/
     37 typedef struct {
     38   UINT64 AbsoluteMinX; ///< The Absolute Minimum of the device on the x-axis
     39   UINT64 AbsoluteMinY; ///< The Absolute Minimum of the device on the y axis.
     40   UINT64 AbsoluteMinZ; ///< The Absolute Minimum of the device on the z-axis
     41   UINT64 AbsoluteMaxX; ///< The Absolute Maximum of the device on the x-axis. If 0, and the
     42                        ///< AbsoluteMinX is 0, then the pointer device does not support a xaxis
     43   UINT64 AbsoluteMaxY; ///< The Absolute Maximum of the device on the y -axis. If 0, and the
     44                        ///< AbsoluteMinX is 0, then the pointer device does not support a yaxis.
     45   UINT64 AbsoluteMaxZ; ///< The Absolute Maximum of the device on the z-axis. If 0 , and the
     46                        ///< AbsoluteMinX is 0, then the pointer device does not support a zaxis
     47   UINT32 Attributes;   ///< The following bits are set as needed (or'd together) to indicate the
     48                        ///< capabilities of the device supported. The remaining bits are undefined
     49                        ///< and should be 0
     50 } EFI_ABSOLUTE_POINTER_MODE;
     51 
     52 ///
     53 /// If set, indicates this device supports an alternate button input.
     54 ///
     55 #define EFI_ABSP_SupportsAltActive    0x00000001
     56 
     57 ///
     58 /// If set, indicates this device returns pressure data in parameter CurrentZ.
     59 ///
     60 #define EFI_ABSP_SupportsPressureAsZ  0x00000002
     61 
     62 
     63 /**
     64   This function resets the pointer device hardware. As part of
     65   initialization process, the firmware/device will make a quick
     66   but reasonable attempt to verify that the device is
     67   functioning. If the ExtendedVerification flag is TRUE the
     68   firmware may take an extended amount of time to verify the
     69   device is operating on reset. Otherwise the reset operation is
     70   to occur as quickly as possible. The hardware verification
     71   process is not defined by this specification and is left up to
     72   the platform firmware or driver to implement.
     73 
     74   @param This                 A pointer to the EFI_ABSOLUTE_POINTER_PROTOCOL
     75                               instance.
     76 
     77   @param ExtendedVerification Indicates that the driver may
     78                               perform a more exhaustive
     79                               verification operation of the
     80                               device during reset.
     81 
     82   @retval EFI_SUCCESS       The device was reset.
     83 
     84   @retval EFI_DEVICE_ERROR  The device is not functioning
     85                             correctly and could not be reset.
     86 
     87 **/
     88 typedef
     89 EFI_STATUS
     90 (EFIAPI *EFI_ABSOLUTE_POINTER_RESET)(
     91   IN EFI_ABSOLUTE_POINTER_PROTOCOL *This,
     92   IN BOOLEAN                       ExtendedVerification
     93 );
     94 
     95 ///
     96 /// This bit is set if the touch sensor is active.
     97 ///
     98 #define EFI_ABSP_TouchActive  0x00000001
     99 
    100 ///
    101 /// This bit is set if the alt sensor, such as pen-side button, is active
    102 ///
    103 #define EFI_ABS_AltActive     0x00000002
    104 
    105 
    106 /**
    107   Definition of EFI_ABSOLUTE_POINTER_STATE.
    108 **/
    109 typedef struct {
    110   ///
    111   /// The unsigned position of the activation on the x axis. If the AboluteMinX
    112   /// and the AboluteMaxX fields of the EFI_ABSOLUTE_POINTER_MODE structure are
    113   /// both 0, then this pointer device does not support an x-axis, and this field
    114   /// must be ignored.
    115   ///
    116   UINT64 CurrentX;
    117 
    118   ///
    119   /// The unsigned position of the activation on the y axis. If the AboluteMinY
    120   /// and the AboluteMaxY fields of the EFI_ABSOLUTE_POINTER_MODE structure are
    121   /// both 0, then this pointer device does not support an y-axis, and this field
    122   /// must be ignored.
    123   ///
    124   UINT64 CurrentY;
    125 
    126   ///
    127   /// The unsigned position of the activation on the z axis, or the pressure
    128   /// measurement. If the AboluteMinZ and the AboluteMaxZ fields of the
    129   /// EFI_ABSOLUTE_POINTER_MODE structure are both 0, then this pointer device
    130   /// does not support an z-axis, and this field must be ignored.
    131   ///
    132   UINT64 CurrentZ;
    133 
    134   ///
    135   /// Bits are set to 1 in this structure item to indicate that device buttons are
    136   /// active.
    137   ///
    138   UINT32 ActiveButtons;
    139 } EFI_ABSOLUTE_POINTER_STATE;
    140 
    141 /**
    142   The GetState() function retrieves the current state of a pointer
    143   device. This includes information on the active state associated
    144   with the pointer device and the current position of the axes
    145   associated with the pointer device. If the state of the pointer
    146   device has not changed since the last call to GetState(), then
    147   EFI_NOT_READY is returned. If the state of the pointer device
    148   has changed since the last call to GetState(), then the state
    149   information is placed in State, and EFI_SUCCESS is returned. If
    150   a device error occurs while attempting to retrieve the state
    151   information, then EFI_DEVICE_ERROR is returned.
    152 
    153 
    154   @param This   A pointer to the EFI_ABSOLUTE_POINTER_PROTOCOL
    155                 instance.
    156 
    157   @param State  A pointer to the state information on the
    158                 pointer device.
    159 
    160   @retval EFI_SUCCESS       The state of the pointer device was
    161                             returned in State.
    162 
    163   @retval EFI_NOT_READY     The state of the pointer device has not
    164                             changed since the last call to GetState().
    165 
    166   @retval EFI_DEVICE_ERROR  A device error occurred while
    167                             attempting to retrieve the pointer
    168                             device's current state.
    169 
    170 **/
    171 typedef
    172 EFI_STATUS
    173 (EFIAPI *EFI_ABSOLUTE_POINTER_GET_STATE)(
    174   IN      EFI_ABSOLUTE_POINTER_PROTOCOL  *This,
    175   IN OUT  EFI_ABSOLUTE_POINTER_STATE     *State
    176 );
    177 
    178 
    179 ///
    180 /// The EFI_ABSOLUTE_POINTER_PROTOCOL provides a set of services
    181 /// for a pointer device that can be used as an input device from an
    182 /// application written to this specification. The services include
    183 /// the ability to: reset the pointer device, retrieve the state of
    184 /// the pointer device, and retrieve the capabilities of the pointer
    185 /// device. The service also provides certain data items describing the device.
    186 ///
    187 struct _EFI_ABSOLUTE_POINTER_PROTOCOL {
    188   EFI_ABSOLUTE_POINTER_RESET      Reset;
    189   EFI_ABSOLUTE_POINTER_GET_STATE  GetState;
    190   ///
    191   /// Event to use with WaitForEvent() to wait for input from the pointer device.
    192   ///
    193   EFI_EVENT                       WaitForInput;
    194   ///
    195   /// Pointer to EFI_ABSOLUTE_POINTER_MODE data.
    196   ///
    197   EFI_ABSOLUTE_POINTER_MODE       *Mode;
    198 };
    199 
    200 
    201 extern EFI_GUID gEfiAbsolutePointerProtocolGuid;
    202 
    203 
    204 #endif
    205 
    206