]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.h
MdeModulePkg/SecurityPkg: Update TreePei to handle FvInfo2 and update FwVol of PeiCor...
[mirror_edk2.git] / MdeModulePkg / Universal / DisplayEngineDxe / FormDisplay.h
1 /** @file
2 FormDiplay protocol to show Form
3
4 Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef __FORM_DISPLAY_H__
16 #define __FORM_DISPLAY_H__
17
18
19 #include <Library/UefiBootServicesTableLib.h>
20 #include <Library/DebugLib.h>
21 #include <Library/BaseMemoryLib.h>
22 #include <Library/BaseLib.h>
23 #include <Library/HiiLib.h>
24 #include <Library/MemoryAllocationLib.h>
25 #include <Library/PrintLib.h>
26 #include <Library/CustomizedDisplayLib.h>
27
28 #include <Protocol/FormBrowserEx2.h>
29 #include <Protocol/SimpleTextIn.h>
30 #include <Protocol/DisplayProtocol.h>
31
32 #include <Guid/MdeModuleHii.h>
33
34 //
35 // This is the generated header file which includes whatever needs to be exported (strings + IFR)
36 //
37 extern UINT8 DisplayEngineStrings[];
38 extern EFI_SCREEN_DESCRIPTOR gStatementDimensions;
39 extern USER_INPUT *gUserInput;
40 extern FORM_DISPLAY_ENGINE_FORM *gFormData;
41 extern EFI_HII_HANDLE gHiiHandle;
42 extern UINT16 gDirection;
43 extern LIST_ENTRY gMenuOption;
44
45 //
46 // Browser Global Strings
47 //
48 extern CHAR16 *gSaveFailed;
49 extern CHAR16 *gPromptForData;
50 extern CHAR16 *gPromptForPassword;
51 extern CHAR16 *gPromptForNewPassword;
52 extern CHAR16 *gConfirmPassword;
53 extern CHAR16 *gConfirmError;
54 extern CHAR16 *gPassowordInvalid;
55 extern CHAR16 *gPressEnter;
56 extern CHAR16 *gEmptyString;
57 extern CHAR16 *gMiniString;
58 extern CHAR16 *gOptionMismatch;
59 extern CHAR16 *gFormSuppress;
60 extern CHAR16 *gProtocolNotFound;
61
62 extern CHAR16 gPromptBlockWidth;
63 extern CHAR16 gOptionBlockWidth;
64 extern CHAR16 gHelpBlockWidth;
65 extern CHAR16 *mUnknownString;
66
67 //
68 // Screen definitions
69 //
70
71 #define LEFT_SKIPPED_COLUMNS 3
72 #define SCROLL_ARROW_HEIGHT 1
73 #define POPUP_PAD_SPACE_COUNT 5
74 #define POPUP_FRAME_WIDTH 2
75
76 //
77 // Display definitions
78 //
79 #define LEFT_ONEOF_DELIMITER L'<'
80 #define RIGHT_ONEOF_DELIMITER L'>'
81
82 #define LEFT_NUMERIC_DELIMITER L'['
83 #define RIGHT_NUMERIC_DELIMITER L']'
84
85 #define LEFT_CHECKBOX_DELIMITER L'['
86 #define RIGHT_CHECKBOX_DELIMITER L']'
87
88 #define CHECK_ON L'X'
89 #define CHECK_OFF L' '
90
91 #define TIME_SEPARATOR L':'
92 #define DATE_SEPARATOR L'/'
93
94 #define SUBTITLE_INDENT 2
95
96 //
97 // This is the Input Error Message
98 //
99 #define INPUT_ERROR 1
100
101 //
102 // This is the NV RAM update required Message
103 //
104 #define NV_UPDATE_REQUIRED 2
105 //
106 // Time definitions
107 //
108 #define ONE_SECOND 10000000
109
110 //
111 // It take 23 characters including the NULL to print a 64 bits number with "[" and "]".
112 // pow(2, 64) = [18446744073709551616]
113 //
114 #define MAX_NUMERIC_INPUT_WIDTH 23
115
116 #define EFI_HII_EXPRESSION_INCONSISTENT_IF 0
117 #define EFI_HII_EXPRESSION_NO_SUBMIT_IF 1
118 #define EFI_HII_EXPRESSION_GRAY_OUT_IF 2
119 #define EFI_HII_EXPRESSION_SUPPRESS_IF 3
120 #define EFI_HII_EXPRESSION_DISABLE_IF 4
121
122 //
123 // Character definitions
124 //
125 #define CHAR_SPACE 0x0020
126
127 #define FORM_DISPLAY_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'D', 'D', 'V')
128 typedef struct {
129 UINT32 Signature;
130
131 EFI_HANDLE Handle;
132
133 //
134 // Produced protocol
135 //
136 EDKII_FORM_DISPLAY_ENGINE_PROTOCOL FromDisplayProt;
137 } FORM_DISPLAY_DRIVER_PRIVATE_DATA;
138
139
140 typedef enum {
141 UiNoOperation,
142 UiSelect,
143 UiUp,
144 UiDown,
145 UiLeft,
146 UiRight,
147 UiReset,
148 UiPrevious,
149 UiPageUp,
150 UiPageDown,
151 UiHotKey,
152 UiMaxOperation
153 } UI_SCREEN_OPERATION;
154
155 typedef enum {
156 CfInitialization,
157 CfCheckSelection,
158 CfRepaint,
159 CfRefreshHighLight,
160 CfUpdateHelpString,
161 CfPrepareToReadKey,
162 CfReadKey,
163 CfScreenOperation,
164 CfUiSelect,
165 CfUiReset,
166 CfUiLeft,
167 CfUiRight,
168 CfUiUp,
169 CfUiPageUp,
170 CfUiPageDown,
171 CfUiDown,
172 CfUiDefault,
173 CfUiNoOperation,
174 CfExit,
175 CfUiHotKey,
176 CfMaxControlFlag
177 } UI_CONTROL_FLAG;
178
179 typedef enum {
180 UIEventNone,
181 UIEventKey,
182 UIEventTimeOut,
183 UIEventDriver
184 } UI_EVENT_TYPE;
185
186 typedef struct {
187 UINT16 ScanCode;
188 UI_SCREEN_OPERATION ScreenOperation;
189 } SCAN_CODE_TO_SCREEN_OPERATION;
190
191 typedef struct {
192 UI_SCREEN_OPERATION ScreenOperation;
193 UI_CONTROL_FLAG ControlFlag;
194 } SCREEN_OPERATION_T0_CONTROL_FLAG;
195
196 typedef struct {
197 EFI_HII_HANDLE HiiHandle;
198 EFI_QUESTION_ID QuestionId;
199 EFI_IFR_OP_HEADER *OpCode;
200 UINT16 DisplayRow;
201 UINT16 SkipValue;
202 } DISPLAY_HIGHLIGHT_MENU_INFO;
203
204 #define UI_MENU_OPTION_SIGNATURE SIGNATURE_32 ('u', 'i', 'm', 'm')
205
206 typedef struct {
207 UINTN Signature;
208 LIST_ENTRY Link;
209
210 EFI_HII_HANDLE Handle;
211 FORM_DISPLAY_ENGINE_STATEMENT *ThisTag;
212 UINT16 EntryNumber;
213
214 UINTN Row;
215 UINTN Col;
216 UINTN OptCol;
217 CHAR16 *Description;
218 UINTN Skip; // Number of lines
219
220 //
221 // Display item sequence for date/time
222 // Date: Month/Day/Year
223 // Sequence: 0 1 2
224 //
225 // Time: Hour : Minute : Second
226 // Sequence: 0 1 2
227 //
228 //
229 UINTN Sequence;
230
231 BOOLEAN GrayOut;
232 BOOLEAN ReadOnly;
233
234 //
235 // Whether user could change value of this item
236 //
237 BOOLEAN IsQuestion;
238 BOOLEAN NestInStatement;
239 } UI_MENU_OPTION;
240
241 #define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE)
242
243 /**
244 Print Question Value according to it's storage width and display attributes.
245
246 @param Question The Question to be printed.
247 @param FormattedNumber Buffer for output string.
248 @param BufferSize The FormattedNumber buffer size in bytes.
249
250 @retval EFI_SUCCESS Print success.
251 @retval EFI_BUFFER_TOO_SMALL Buffer size is not enough for formatted number.
252
253 **/
254 EFI_STATUS
255 PrintFormattedNumber (
256 IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
257 IN OUT CHAR16 *FormattedNumber,
258 IN UINTN BufferSize
259 );
260
261 /**
262 Set value of a data element in an Array by its Index.
263
264 @param Array The data array.
265 @param Type Type of the data in this array.
266 @param Index Zero based index for data in this array.
267 @param Value The value to be set.
268
269 **/
270 VOID
271 SetArrayData (
272 IN VOID *Array,
273 IN UINT8 Type,
274 IN UINTN Index,
275 IN UINT64 Value
276 );
277
278 /**
279 Return data element in an Array by its Index.
280
281 @param Array The data array.
282 @param Type Type of the data in this array.
283 @param Index Zero based index for data in this array.
284
285 @retval Value The data to be returned
286
287 **/
288 UINT64
289 GetArrayData (
290 IN VOID *Array,
291 IN UINT8 Type,
292 IN UINTN Index
293 );
294
295 /**
296 Search an Option of a Question by its value.
297
298 @param Question The Question
299 @param OptionValue Value for Option to be searched.
300
301 @retval Pointer Pointer to the found Option.
302 @retval NULL Option not found.
303
304 **/
305 DISPLAY_QUESTION_OPTION *
306 ValueToOption (
307 IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
308 IN EFI_HII_VALUE *OptionValue
309 );
310
311 /**
312 Compare two Hii value.
313
314 @param Value1 Expression value to compare on left-hand.
315 @param Value2 Expression value to compare on right-hand.
316 @param Result Return value after compare.
317 retval 0 Two operators equal.
318 return Positive value if Value1 is greater than Value2.
319 retval Negative value if Value1 is less than Value2.
320 @param HiiHandle Only required for string compare.
321
322 @retval other Could not perform compare on two values.
323 @retval EFI_SUCCESS Compare the value success.
324
325 **/
326 EFI_STATUS
327 CompareHiiValue (
328 IN EFI_HII_VALUE *Value1,
329 IN EFI_HII_VALUE *Value2,
330 OUT INTN *Result,
331 IN EFI_HII_HANDLE HiiHandle OPTIONAL
332 );
333
334 /**
335 Draw a pop up windows based on the dimension, number of lines and
336 strings specified.
337
338 @param RequestedWidth The width of the pop-up.
339 @param NumberOfLines The number of lines.
340 @param ... A series of text strings that displayed in the pop-up.
341
342 **/
343 VOID
344 EFIAPI
345 CreateMultiStringPopUp (
346 IN UINTN RequestedWidth,
347 IN UINTN NumberOfLines,
348 ...
349 );
350
351 /**
352 Will copy LineWidth amount of a string in the OutputString buffer and return the
353 number of CHAR16 characters that were copied into the OutputString buffer.
354 The output string format is:
355 Glyph Info + String info + '\0'.
356
357 In the code, it deals \r,\n,\r\n same as \n\r, also it not process the \r or \g.
358
359 @param InputString String description for this option.
360 @param LineWidth Width of the desired string to extract in CHAR16
361 characters
362 @param GlyphWidth The glyph width of the begin of the char in the string.
363 @param Index Where in InputString to start the copy process
364 @param OutputString Buffer to copy the string into
365
366 @return Returns the number of CHAR16 characters that were copied into the OutputString
367 buffer, include extra glyph info and '\0' info.
368
369 **/
370 UINT16
371 GetLineByWidth (
372 IN CHAR16 *InputString,
373 IN UINT16 LineWidth,
374 IN OUT UINT16 *GlyphWidth,
375 IN OUT UINTN *Index,
376 OUT CHAR16 **OutputString
377 );
378
379
380 /**
381 Get the string based on the StringId and HII Package List Handle.
382
383 @param Token The String's ID.
384 @param HiiHandle The Hii handle for this string package.
385
386 @return The output string.
387
388 **/
389 CHAR16 *
390 GetToken (
391 IN EFI_STRING_ID Token,
392 IN EFI_HII_HANDLE HiiHandle
393 );
394
395 /**
396 Count the storage space of a Unicode string.
397
398 This function handles the Unicode string with NARROW_CHAR
399 and WIDE_CHAR control characters. NARROW_HCAR and WIDE_CHAR
400 does not count in the resultant output. If a WIDE_CHAR is
401 hit, then 2 Unicode character will consume an output storage
402 space with size of CHAR16 till a NARROW_CHAR is hit.
403
404 If String is NULL, then ASSERT ().
405
406 @param String The input string to be counted.
407
408 @return Storage space for the input string.
409
410 **/
411 UINTN
412 GetStringWidth (
413 IN CHAR16 *String
414 );
415
416 /**
417 This routine reads a numeric value from the user input.
418
419 @param MenuOption Pointer to the current input menu.
420
421 @retval EFI_SUCCESS If numerical input is read successfully
422 @retval EFI_DEVICE_ERROR If operation fails
423
424 **/
425 EFI_STATUS
426 GetNumericInput (
427 IN UI_MENU_OPTION *MenuOption
428 );
429
430 /**
431 Get string or password input from user.
432
433 @param MenuOption Pointer to the current input menu.
434 @param Prompt The prompt string shown on popup window.
435 @param StringPtr Old user input and destination for use input string.
436
437 @retval EFI_SUCCESS If string input is read successfully
438 @retval EFI_DEVICE_ERROR If operation fails
439
440 **/
441 EFI_STATUS
442 ReadString (
443 IN UI_MENU_OPTION *MenuOption,
444 IN CHAR16 *Prompt,
445 IN OUT CHAR16 *StringPtr
446 );
447
448 /**
449 Draw a pop up windows based on the dimension, number of lines and
450 strings specified.
451
452 @param RequestedWidth The width of the pop-up.
453 @param NumberOfLines The number of lines.
454 @param Marker The variable argument list for the list of string to be printed.
455
456 **/
457 VOID
458 CreateSharedPopUp (
459 IN UINTN RequestedWidth,
460 IN UINTN NumberOfLines,
461 IN VA_LIST Marker
462 );
463
464 /**
465 Wait for a key to be pressed by user.
466
467 @param Key The key which is pressed by user.
468
469 @retval EFI_SUCCESS The function always completed successfully.
470
471 **/
472 EFI_STATUS
473 WaitForKeyStroke (
474 OUT EFI_INPUT_KEY *Key
475 );
476
477 /**
478 Get selection for OneOf and OrderedList (Left/Right will be ignored).
479
480 @param MenuOption Pointer to the current input menu.
481
482 @retval EFI_SUCCESS If Option input is processed successfully
483 @retval EFI_DEVICE_ERROR If operation fails
484
485 **/
486 EFI_STATUS
487 GetSelectionInputPopUp (
488 IN UI_MENU_OPTION *MenuOption
489 );
490
491 /**
492 Process the help string: Split StringPtr to several lines of strings stored in
493 FormattedString and the glyph width of each line cannot exceed gHelpBlockWidth.
494
495 @param StringPtr The entire help string.
496 @param FormattedString The oupput formatted string.
497 @param EachLineWidth The max string length of each line in the formatted string.
498 @param RowCount TRUE: if Question is selected.
499
500 **/
501 UINTN
502 ProcessHelpString (
503 IN CHAR16 *StringPtr,
504 OUT CHAR16 **FormattedString,
505 OUT UINT16 *EachLineWidth,
506 IN UINTN RowCount
507 );
508
509 /**
510 Process a Question's Option (whether selected or un-selected).
511
512 @param MenuOption The MenuOption for this Question.
513 @param Selected TRUE: if Question is selected.
514 @param OptionString Pointer of the Option String to be displayed.
515 @param SkipErrorValue Whether need to return when value without option for it.
516
517 @retval EFI_SUCCESS Question Option process success.
518 @retval Other Question Option process fail.
519
520 **/
521 EFI_STATUS
522 ProcessOptions (
523 IN UI_MENU_OPTION *MenuOption,
524 IN BOOLEAN Selected,
525 OUT CHAR16 **OptionString,
526 IN BOOLEAN SkipErrorValue
527 );
528
529 /**
530 Set Buffer to Value for Size bytes.
531
532 @param Buffer Memory to set.
533 @param Size Number of bytes to set
534 @param Value Value of the set operation.
535
536 **/
537 VOID
538 SetUnicodeMem (
539 IN VOID *Buffer,
540 IN UINTN Size,
541 IN CHAR16 Value
542 );
543
544 /**
545 Display one form, and return user input.
546
547 @param FormData Form Data to be shown.
548 @param UserInputData User input data.
549
550 @retval EFI_SUCCESS Form Data is shown, and user input is got.
551 **/
552 EFI_STATUS
553 EFIAPI
554 FormDisplay (
555 IN FORM_DISPLAY_ENGINE_FORM *FormData,
556 OUT USER_INPUT *UserInputData
557 );
558
559 /**
560 Clear Screen to the initial state.
561 **/
562 VOID
563 EFIAPI
564 DriverClearDisplayPage (
565 VOID
566 );
567
568 /**
569 Exit Display and Clear Screen to the original state.
570
571 **/
572 VOID
573 EFIAPI
574 ExitDisplay (
575 VOID
576 );
577
578 /**
579 Process validate for one question.
580
581 @param Question The question which need to validate.
582
583 @retval EFI_SUCCESS Question Option process success.
584 @retval Other Question Option process fail.
585
586 **/
587 EFI_STATUS
588 ValidateQuestion (
589 IN FORM_DISPLAY_ENGINE_STATEMENT *Question
590 );
591
592 #endif