1 /** @file
2   Simple Pointer protocol from the UEFI 2.0 specification.
3 
4   Abstraction of a very simple pointer device like a mouse or trackball.
5 
6   Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
7   SPDX-License-Identifier: BSD-2-Clause-Patent
8 
9 **/
10 
11 #ifndef __SIMPLE_POINTER_H__
12 #define __SIMPLE_POINTER_H__
13 
14 #define EFI_SIMPLE_POINTER_PROTOCOL_GUID \
15   { \
16     0x31878c87, 0xb75, 0x11d5, {0x9a, 0x4f, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
17   }
18 
19 typedef struct _EFI_SIMPLE_POINTER_PROTOCOL EFI_SIMPLE_POINTER_PROTOCOL;
20 
21 //
22 // Data structures
23 //
24 typedef struct {
25   ///
26   /// The signed distance in counts that the pointer device has been moved along the x-axis.
27   ///
28   INT32      RelativeMovementX;
29   ///
30   /// The signed distance in counts that the pointer device has been moved along the y-axis.
31   ///
32   INT32      RelativeMovementY;
33   ///
34   /// The signed distance in counts that the pointer device has been moved along the z-axis.
35   ///
36   INT32      RelativeMovementZ;
37   ///
38   /// If TRUE, then the left button of the pointer device is being
39   /// pressed. If FALSE, then the left button of the pointer device is not being pressed.
40   ///
41   BOOLEAN    LeftButton;
42   ///
43   /// If TRUE, then the right button of the pointer device is being
44   /// pressed. If FALSE, then the right button of the pointer device is not being pressed.
45   ///
46   BOOLEAN    RightButton;
47 } EFI_SIMPLE_POINTER_STATE;
48 
49 typedef struct {
50   ///
51   /// The resolution of the pointer device on the x-axis in counts/mm.
52   /// If 0, then the pointer device does not support an x-axis.
53   ///
54   UINT64     ResolutionX;
55   ///
56   /// The resolution of the pointer device on the y-axis in counts/mm.
57   /// If 0, then the pointer device does not support an x-axis.
58   ///
59   UINT64     ResolutionY;
60   ///
61   /// The resolution of the pointer device on the z-axis in counts/mm.
62   /// If 0, then the pointer device does not support an x-axis.
63   ///
64   UINT64     ResolutionZ;
65   ///
66   /// TRUE if a left button is present on the pointer device. Otherwise FALSE.
67   ///
68   BOOLEAN    LeftButton;
69   ///
70   /// TRUE if a right button is present on the pointer device. Otherwise FALSE.
71   ///
72   BOOLEAN    RightButton;
73 } EFI_SIMPLE_POINTER_MODE;
74 
75 /**
76   Resets the pointer device hardware.
77 
78   @param  This                  A pointer to the EFI_SIMPLE_POINTER_PROTOCOL
79                                 instance.
80   @param  ExtendedVerification  Indicates that the driver may perform a more exhaustive
81                                 verification operation of the device during reset.
82 
83   @retval EFI_SUCCESS           The device was reset.
84   @retval EFI_DEVICE_ERROR      The device is not functioning correctly and could not be reset.
85 
86 **/
87 typedef
88 EFI_STATUS
89 (EFIAPI *EFI_SIMPLE_POINTER_RESET)(
90   IN EFI_SIMPLE_POINTER_PROTOCOL            *This,
91   IN BOOLEAN                                ExtendedVerification
92   );
93 
94 /**
95   Retrieves the current state of a pointer device.
96 
97   @param  This                  A pointer to the EFI_SIMPLE_POINTER_PROTOCOL
98                                 instance.
99   @param  State                 A pointer to the state information on the pointer device.
100 
101   @retval EFI_SUCCESS           The state of the pointer device was returned in State.
102   @retval EFI_NOT_READY         The state of the pointer device has not changed since the last call to
103                                 GetState().
104   @retval EFI_DEVICE_ERROR      A device error occurred while attempting to retrieve the pointer device's
105                                 current state.
106 
107 **/
108 typedef
109 EFI_STATUS
110 (EFIAPI *EFI_SIMPLE_POINTER_GET_STATE)(
111   IN EFI_SIMPLE_POINTER_PROTOCOL          *This,
112   OUT EFI_SIMPLE_POINTER_STATE            *State
113   );
114 
115 ///
116 /// The EFI_SIMPLE_POINTER_PROTOCOL provides a set of services for a pointer
117 /// device that can use used as an input device from an application written
118 /// to this specification. The services include the ability to reset the
119 /// pointer device, retrieve get the state of the pointer device, and
120 /// retrieve the capabilities of the pointer device.
121 ///
122 struct _EFI_SIMPLE_POINTER_PROTOCOL {
123   EFI_SIMPLE_POINTER_RESET        Reset;
124   EFI_SIMPLE_POINTER_GET_STATE    GetState;
125   ///
126   /// Event to use with WaitForEvent() to wait for input from the pointer device.
127   ///
128   EFI_EVENT                       WaitForInput;
129   ///
130   /// Pointer to EFI_SIMPLE_POINTER_MODE data.
131   ///
132   EFI_SIMPLE_POINTER_MODE         *Mode;
133 };
134 
135 extern EFI_GUID  gEfiSimplePointerProtocolGuid;
136 
137 #endif
138