2 FormDiplay protocol to show Form
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.
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.
15 #ifndef __FORM_DISPLAY_H__
16 #define __FORM_DISPLAY_H__
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>
28 #include <Protocol/FormBrowserEx2.h>
29 #include <Protocol/SimpleTextIn.h>
30 #include <Protocol/DisplayProtocol.h>
32 #include <Guid/MdeModuleHii.h>
35 // This is the generated header file which includes whatever needs to be exported (strings + IFR)
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
;
46 // Browser Global Strings
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
;
62 extern CHAR16 gPromptBlockWidth
;
63 extern CHAR16 gOptionBlockWidth
;
64 extern CHAR16 gHelpBlockWidth
;
65 extern CHAR16
*mUnknownString
;
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
77 // Display definitions
79 #define LEFT_ONEOF_DELIMITER L'<'
80 #define RIGHT_ONEOF_DELIMITER L'>'
82 #define LEFT_NUMERIC_DELIMITER L'['
83 #define RIGHT_NUMERIC_DELIMITER L']'
85 #define LEFT_CHECKBOX_DELIMITER L'['
86 #define RIGHT_CHECKBOX_DELIMITER L']'
89 #define CHECK_OFF L' '
91 #define TIME_SEPARATOR L':'
92 #define DATE_SEPARATOR L'/'
94 #define SUBTITLE_INDENT 2
97 // This is the Input Error Message
102 // This is the NV RAM update required Message
104 #define NV_UPDATE_REQUIRED 2
108 #define ONE_SECOND 10000000
111 // It take 23 characters including the NULL to print a 64 bits number with "[" and "]".
112 // pow(2, 64) = [18446744073709551616]
114 #define MAX_NUMERIC_INPUT_WIDTH 23
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
123 // Character definitions
125 #define CHAR_SPACE 0x0020
127 #define FORM_DISPLAY_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'D', 'D', 'V')
136 EDKII_FORM_DISPLAY_ENGINE_PROTOCOL FromDisplayProt
;
137 } FORM_DISPLAY_DRIVER_PRIVATE_DATA
;
153 } UI_SCREEN_OPERATION
;
188 UI_SCREEN_OPERATION ScreenOperation
;
189 } SCAN_CODE_TO_SCREEN_OPERATION
;
192 UI_SCREEN_OPERATION ScreenOperation
;
193 UI_CONTROL_FLAG ControlFlag
;
194 } SCREEN_OPERATION_T0_CONTROL_FLAG
;
197 EFI_HII_HANDLE HiiHandle
;
198 EFI_QUESTION_ID QuestionId
;
199 EFI_IFR_OP_HEADER
*OpCode
;
202 } DISPLAY_HIGHLIGHT_MENU_INFO
;
204 #define UI_MENU_OPTION_SIGNATURE SIGNATURE_32 ('u', 'i', 'm', 'm')
210 EFI_HII_HANDLE Handle
;
211 FORM_DISPLAY_ENGINE_STATEMENT
*ThisTag
;
218 UINTN Skip
; // Number of lines
221 // Display item sequence for date/time
222 // Date: Month/Day/Year
225 // Time: Hour : Minute : Second
235 // Whether user could change value of this item
238 BOOLEAN NestInStatement
;
241 #define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE)
244 Print Question Value according to it's storage width and display attributes.
246 @param Question The Question to be printed.
247 @param FormattedNumber Buffer for output string.
248 @param BufferSize The FormattedNumber buffer size in bytes.
250 @retval EFI_SUCCESS Print success.
251 @retval EFI_BUFFER_TOO_SMALL Buffer size is not enough for formatted number.
255 PrintFormattedNumber (
256 IN FORM_DISPLAY_ENGINE_STATEMENT
*Question
,
257 IN OUT CHAR16
*FormattedNumber
,
262 Set value of a data element in an Array by its Index.
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.
279 Return data element in an Array by its Index.
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.
285 @retval Value The data to be returned
296 Search an Option of a Question by its value.
298 @param Question The Question
299 @param OptionValue Value for Option to be searched.
301 @retval Pointer Pointer to the found Option.
302 @retval NULL Option not found.
305 DISPLAY_QUESTION_OPTION
*
307 IN FORM_DISPLAY_ENGINE_STATEMENT
*Question
,
308 IN EFI_HII_VALUE
*OptionValue
312 Compare two Hii value.
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.
322 @retval other Could not perform compare on two values.
323 @retval EFI_SUCCESS Compare the value success.
328 IN EFI_HII_VALUE
*Value1
,
329 IN EFI_HII_VALUE
*Value2
,
331 IN EFI_HII_HANDLE HiiHandle OPTIONAL
335 Draw a pop up windows based on the dimension, number of lines and
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.
345 CreateMultiStringPopUp (
346 IN UINTN RequestedWidth
,
347 IN UINTN NumberOfLines
,
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'.
357 In the code, it deals \r,\n,\r\n same as \n\r, also it not process the \r or \g.
359 @param InputString String description for this option.
360 @param LineWidth Width of the desired string to extract in CHAR16
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
366 @return Returns the number of CHAR16 characters that were copied into the OutputString
367 buffer, include extra glyph info and '\0' info.
372 IN CHAR16
*InputString
,
374 IN OUT UINT16
*GlyphWidth
,
376 OUT CHAR16
**OutputString
381 Get the string based on the StringId and HII Package List Handle.
383 @param Token The String's ID.
384 @param HiiHandle The Hii handle for this string package.
386 @return The output string.
391 IN EFI_STRING_ID Token
,
392 IN EFI_HII_HANDLE HiiHandle
396 Count the storage space of a Unicode string.
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.
404 If String is NULL, then ASSERT ().
406 @param String The input string to be counted.
408 @return Storage space for the input string.
417 This routine reads a numeric value from the user input.
419 @param MenuOption Pointer to the current input menu.
421 @retval EFI_SUCCESS If numerical input is read successfully
422 @retval EFI_DEVICE_ERROR If operation fails
427 IN UI_MENU_OPTION
*MenuOption
431 Get string or password input from user.
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.
437 @retval EFI_SUCCESS If string input is read successfully
438 @retval EFI_DEVICE_ERROR If operation fails
443 IN UI_MENU_OPTION
*MenuOption
,
445 IN OUT CHAR16
*StringPtr
449 Draw a pop up windows based on the dimension, number of lines and
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.
459 IN UINTN RequestedWidth
,
460 IN UINTN NumberOfLines
,
465 Wait for a key to be pressed by user.
467 @param Key The key which is pressed by user.
469 @retval EFI_SUCCESS The function always completed successfully.
474 OUT EFI_INPUT_KEY
*Key
478 Get selection for OneOf and OrderedList (Left/Right will be ignored).
480 @param MenuOption Pointer to the current input menu.
482 @retval EFI_SUCCESS If Option input is processed successfully
483 @retval EFI_DEVICE_ERROR If operation fails
487 GetSelectionInputPopUp (
488 IN UI_MENU_OPTION
*MenuOption
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.
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.
503 IN CHAR16
*StringPtr
,
504 OUT CHAR16
**FormattedString
,
505 OUT UINT16
*EachLineWidth
,
510 Process a Question's Option (whether selected or un-selected).
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.
517 @retval EFI_SUCCESS Question Option process success.
518 @retval Other Question Option process fail.
523 IN UI_MENU_OPTION
*MenuOption
,
525 OUT CHAR16
**OptionString
,
526 IN BOOLEAN SkipErrorValue
530 Set Buffer to Value for Size bytes.
532 @param Buffer Memory to set.
533 @param Size Number of bytes to set
534 @param Value Value of the set operation.
545 Display one form, and return user input.
547 @param FormData Form Data to be shown.
548 @param UserInputData User input data.
550 @retval EFI_SUCCESS Form Data is shown, and user input is got.
555 IN FORM_DISPLAY_ENGINE_FORM
*FormData
,
556 OUT USER_INPUT
*UserInputData
560 Clear Screen to the initial state.
564 DriverClearDisplayPage (
569 Exit Display and Clear Screen to the original state.
579 Process validate for one question.
581 @param Question The question which need to validate.
583 @retval EFI_SUCCESS Question Option process success.
584 @retval Other Question Option process fail.
589 IN FORM_DISPLAY_ENGINE_STATEMENT
*Question