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