2 FormDiplay protocol to show Form
4 Copyright (c) 2013 - 2016, 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
;
61 extern CHAR16
*gPasswordUnsupported
;
63 extern CHAR16 gPromptBlockWidth
;
64 extern CHAR16 gOptionBlockWidth
;
65 extern CHAR16 gHelpBlockWidth
;
66 extern CHAR16
*mUnknownString
;
67 extern BOOLEAN gMisMatch
;
73 #define LEFT_SKIPPED_COLUMNS 3
74 #define SCROLL_ARROW_HEIGHT 1
75 #define POPUP_PAD_SPACE_COUNT 5
76 #define POPUP_FRAME_WIDTH 2
78 #define UPPER_LOWER_CASE_OFFSET 0x20
81 // Display definitions
83 #define LEFT_ONEOF_DELIMITER L'<'
84 #define RIGHT_ONEOF_DELIMITER L'>'
86 #define LEFT_NUMERIC_DELIMITER L'['
87 #define RIGHT_NUMERIC_DELIMITER L']'
89 #define LEFT_CHECKBOX_DELIMITER L'['
90 #define RIGHT_CHECKBOX_DELIMITER L']'
93 #define CHECK_OFF L' '
95 #define TIME_SEPARATOR L':'
96 #define DATE_SEPARATOR L'/'
98 #define SUBTITLE_INDENT 2
101 // This is the Input Error Message
103 #define INPUT_ERROR 1
106 // This is the NV RAM update required Message
108 #define NV_UPDATE_REQUIRED 2
112 #define ONE_SECOND 10000000
115 // It take 23 characters including the NULL to print a 64 bits number with "[" and "]".
116 // pow(2, 64) = [18446744073709551616]
117 // with extra '-' flat, set the width to 24.
119 #define MAX_NUMERIC_INPUT_WIDTH 24
121 #define EFI_HII_EXPRESSION_INCONSISTENT_IF 0
122 #define EFI_HII_EXPRESSION_NO_SUBMIT_IF 1
123 #define EFI_HII_EXPRESSION_GRAY_OUT_IF 2
124 #define EFI_HII_EXPRESSION_SUPPRESS_IF 3
125 #define EFI_HII_EXPRESSION_DISABLE_IF 4
128 // Character definitions
130 #define CHAR_SPACE 0x0020
132 #define FORM_DISPLAY_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'D', 'D', 'V')
141 EDKII_FORM_DISPLAY_ENGINE_PROTOCOL FromDisplayProt
;
142 } FORM_DISPLAY_DRIVER_PRIVATE_DATA
;
158 } UI_SCREEN_OPERATION
;
192 UI_SCREEN_OPERATION ScreenOperation
;
193 } SCAN_CODE_TO_SCREEN_OPERATION
;
196 UI_SCREEN_OPERATION ScreenOperation
;
197 UI_CONTROL_FLAG ControlFlag
;
198 } SCREEN_OPERATION_T0_CONTROL_FLAG
;
201 EFI_HII_HANDLE HiiHandle
;
205 // Info for the highlight question.
206 // HLT means highlight
208 // If one statement has questionid, save questionid info to find the question.
209 // If one statement not has questionid info, save the opcode info to find the
210 // statement. If more than one statement has same opcode in one form(just like
211 // empty subtitle info may has more than one info one form), also use Index
212 // info to find the statement.
214 EFI_QUESTION_ID HLTQuestionId
;
215 EFI_IFR_OP_HEADER
*HLTOpCode
;
220 // Info for the top of screen question.
221 // TOS means Top Of Screen
223 EFI_QUESTION_ID TOSQuestionId
;
224 EFI_IFR_OP_HEADER
*TOSOpCode
;
228 } DISPLAY_HIGHLIGHT_MENU_INFO
;
234 } WARNING_IF_CONTEXT
;
236 #define UI_MENU_OPTION_SIGNATURE SIGNATURE_32 ('u', 'i', 'm', 'm')
242 EFI_HII_HANDLE Handle
;
243 FORM_DISPLAY_ENGINE_STATEMENT
*ThisTag
;
250 UINTN Skip
; // Number of lines
253 // Display item sequence for date/time
254 // Date: Month/Day/Year
257 // Time: Hour : Minute : Second
267 // Whether user could change value of this item
270 BOOLEAN NestInStatement
;
273 #define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE)
276 Print Question Value according to it's storage width and display attributes.
278 @param Question The Question to be printed.
279 @param FormattedNumber Buffer for output string.
280 @param BufferSize The FormattedNumber buffer size in bytes.
282 @retval EFI_SUCCESS Print success.
283 @retval EFI_BUFFER_TOO_SMALL Buffer size is not enough for formatted number.
287 PrintFormattedNumber (
288 IN FORM_DISPLAY_ENGINE_STATEMENT
*Question
,
289 IN OUT CHAR16
*FormattedNumber
,
294 Set value of a data element in an Array by its Index.
296 @param Array The data array.
297 @param Type Type of the data in this array.
298 @param Index Zero based index for data in this array.
299 @param Value The value to be set.
311 Return data element in an Array by its Index.
313 @param Array The data array.
314 @param Type Type of the data in this array.
315 @param Index Zero based index for data in this array.
317 @retval Value The data to be returned
328 Search an Option of a Question by its value.
330 @param Question The Question
331 @param OptionValue Value for Option to be searched.
333 @retval Pointer Pointer to the found Option.
334 @retval NULL Option not found.
337 DISPLAY_QUESTION_OPTION
*
339 IN FORM_DISPLAY_ENGINE_STATEMENT
*Question
,
340 IN EFI_HII_VALUE
*OptionValue
344 Compare two Hii value.
346 @param Value1 Expression value to compare on left-hand.
347 @param Value2 Expression value to compare on right-hand.
348 @param Result Return value after compare.
349 retval 0 Two operators equal.
350 return Positive value if Value1 is greater than Value2.
351 retval Negative value if Value1 is less than Value2.
352 @param HiiHandle Only required for string compare.
354 @retval other Could not perform compare on two values.
355 @retval EFI_SUCCESS Compare the value success.
360 IN EFI_HII_VALUE
*Value1
,
361 IN EFI_HII_VALUE
*Value2
,
363 IN EFI_HII_HANDLE HiiHandle OPTIONAL
367 Draw a pop up windows based on the dimension, number of lines and
370 @param RequestedWidth The width of the pop-up.
371 @param NumberOfLines The number of lines.
372 @param ... A series of text strings that displayed in the pop-up.
377 CreateMultiStringPopUp (
378 IN UINTN RequestedWidth
,
379 IN UINTN NumberOfLines
,
384 Will copy LineWidth amount of a string in the OutputString buffer and return the
385 number of CHAR16 characters that were copied into the OutputString buffer.
386 The output string format is:
387 Glyph Info + String info + '\0'.
389 In the code, it deals \r,\n,\r\n same as \n\r, also it not process the \r or \g.
391 @param InputString String description for this option.
392 @param LineWidth Width of the desired string to extract in CHAR16
394 @param GlyphWidth The glyph width of the begin of the char in the string.
395 @param Index Where in InputString to start the copy process
396 @param OutputString Buffer to copy the string into
398 @return Returns the number of CHAR16 characters that were copied into the OutputString
399 buffer, include extra glyph info and '\0' info.
404 IN CHAR16
*InputString
,
406 IN OUT UINT16
*GlyphWidth
,
408 OUT CHAR16
**OutputString
413 Get the string based on the StringId and HII Package List Handle.
415 @param Token The String's ID.
416 @param HiiHandle The Hii handle for this string package.
418 @return The output string.
423 IN EFI_STRING_ID Token
,
424 IN EFI_HII_HANDLE HiiHandle
428 Count the storage space of a Unicode string.
430 This function handles the Unicode string with NARROW_CHAR
431 and WIDE_CHAR control characters. NARROW_HCAR and WIDE_CHAR
432 does not count in the resultant output. If a WIDE_CHAR is
433 hit, then 2 Unicode character will consume an output storage
434 space with size of CHAR16 till a NARROW_CHAR is hit.
436 If String is NULL, then ASSERT ().
438 @param String The input string to be counted.
440 @return Storage space for the input string.
449 This routine reads a numeric value from the user input.
451 @param MenuOption Pointer to the current input menu.
453 @retval EFI_SUCCESS If numerical input is read successfully
454 @retval EFI_DEVICE_ERROR If operation fails
459 IN UI_MENU_OPTION
*MenuOption
463 Get string or password input from user.
465 @param MenuOption Pointer to the current input menu.
466 @param Prompt The prompt string shown on popup window.
467 @param StringPtr Old user input and destination for use input string.
469 @retval EFI_SUCCESS If string input is read successfully
470 @retval EFI_DEVICE_ERROR If operation fails
475 IN UI_MENU_OPTION
*MenuOption
,
477 IN OUT CHAR16
*StringPtr
481 Draw a pop up windows based on the dimension, number of lines and
484 @param RequestedWidth The width of the pop-up.
485 @param NumberOfLines The number of lines.
486 @param Marker The variable argument list for the list of string to be printed.
491 IN UINTN RequestedWidth
,
492 IN UINTN NumberOfLines
,
497 Wait for a key to be pressed by user.
499 @param Key The key which is pressed by user.
501 @retval EFI_SUCCESS The function always completed successfully.
506 OUT EFI_INPUT_KEY
*Key
510 Get selection for OneOf and OrderedList (Left/Right will be ignored).
512 @param MenuOption Pointer to the current input menu.
514 @retval EFI_SUCCESS If Option input is processed successfully
515 @retval EFI_DEVICE_ERROR If operation fails
519 GetSelectionInputPopUp (
520 IN UI_MENU_OPTION
*MenuOption
524 Process the help string: Split StringPtr to several lines of strings stored in
525 FormattedString and the glyph width of each line cannot exceed gHelpBlockWidth.
527 @param StringPtr The entire help string.
528 @param FormattedString The oupput formatted string.
529 @param EachLineWidth The max string length of each line in the formatted string.
530 @param RowCount TRUE: if Question is selected.
535 IN CHAR16
*StringPtr
,
536 OUT CHAR16
**FormattedString
,
537 OUT UINT16
*EachLineWidth
,
542 Process a Question's Option (whether selected or un-selected).
544 @param MenuOption The MenuOption for this Question.
545 @param Selected TRUE: if Question is selected.
546 @param OptionString Pointer of the Option String to be displayed.
547 @param SkipErrorValue Whether need to return when value without option for it.
549 @retval EFI_SUCCESS Question Option process success.
550 @retval Other Question Option process fail.
555 IN UI_MENU_OPTION
*MenuOption
,
557 OUT CHAR16
**OptionString
,
558 IN BOOLEAN SkipErrorValue
562 Set Buffer to Value for Size bytes.
564 @param Buffer Memory to set.
565 @param Size Number of bytes to set
566 @param Value Value of the set operation.
577 Display one form, and return user input.
579 @param FormData Form Data to be shown.
580 @param UserInputData User input data.
582 @retval EFI_SUCCESS Form Data is shown, and user input is got.
587 IN FORM_DISPLAY_ENGINE_FORM
*FormData
,
588 OUT USER_INPUT
*UserInputData
592 Clear Screen to the initial state.
596 DriverClearDisplayPage (
601 Exit Display and Clear Screen to the original state.
613 @param Event The Event need to be process
614 @param Context The context of the event.
625 Process for the refresh interval statement.
627 @param Event The Event need to be process
628 @param Context The context of the event.
633 RefreshTimeOutProcess (
639 Record the highlight menu and top of screen menu info.
641 @param Highlight The menu opton which is highlight.
642 @param TopOfScreen The menu opton which is at the top of the form.
643 @param SkipValue The skip line info for the top of screen menu.
647 UpdateHighlightMenuInfo (
648 IN LIST_ENTRY
*Highlight
,
649 IN LIST_ENTRY
*TopOfScreen
,