]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.h
Check in the missing code.
[mirror_edk2.git] / MdeModulePkg / Universal / DisplayEngineDxe / FormDisplay.h
1 /** @file
2 FormDiplay protocol to show Form
3
4 Copyright (c) 2013, 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_QUESTION_ID QuestionId;
198 UINT16 DisplayRow;
199 } DISPLAY_HIGHLIGHT_MENU_INFO;
200
201 #define UI_MENU_OPTION_SIGNATURE SIGNATURE_32 ('u', 'i', 'm', 'm')
202
203 typedef struct {
204 UINTN Signature;
205 LIST_ENTRY Link;
206
207 EFI_HII_HANDLE Handle;
208 FORM_DISPLAY_ENGINE_STATEMENT *ThisTag;
209 UINT16 EntryNumber;
210
211 UINTN Row;
212 UINTN Col;
213 UINTN OptCol;
214 CHAR16 *Description;
215 UINTN Skip; // Number of lines
216
217 //
218 // Display item sequence for date/time
219 // Date: Month/Day/Year
220 // Sequence: 0 1 2
221 //
222 // Time: Hour : Minute : Second
223 // Sequence: 0 1 2
224 //
225 //
226 UINTN Sequence;
227
228 BOOLEAN GrayOut;
229 BOOLEAN ReadOnly;
230
231 //
232 // Whether user could change value of this item
233 //
234 BOOLEAN IsQuestion;
235 BOOLEAN NestInStatement;
236 } UI_MENU_OPTION;
237
238 #define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE)
239
240 /**
241 Print Question Value according to it's storage width and display attributes.
242
243 @param Question The Question to be printed.
244 @param FormattedNumber Buffer for output string.
245 @param BufferSize The FormattedNumber buffer size in bytes.
246
247 @retval EFI_SUCCESS Print success.
248 @retval EFI_BUFFER_TOO_SMALL Buffer size is not enough for formatted number.
249
250 **/
251 EFI_STATUS
252 PrintFormattedNumber (
253 IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
254 IN OUT CHAR16 *FormattedNumber,
255 IN UINTN BufferSize
256 );
257
258 /**
259 Set value of a data element in an Array by its Index.
260
261 @param Array The data array.
262 @param Type Type of the data in this array.
263 @param Index Zero based index for data in this array.
264 @param Value The value to be set.
265
266 **/
267 VOID
268 SetArrayData (
269 IN VOID *Array,
270 IN UINT8 Type,
271 IN UINTN Index,
272 IN UINT64 Value
273 );
274
275 /**
276 Return data element in an Array by its Index.
277
278 @param Array The data array.
279 @param Type Type of the data in this array.
280 @param Index Zero based index for data in this array.
281
282 @retval Value The data to be returned
283
284 **/
285 UINT64
286 GetArrayData (
287 IN VOID *Array,
288 IN UINT8 Type,
289 IN UINTN Index
290 );
291
292 /**
293 Search an Option of a Question by its value.
294
295 @param Question The Question
296 @param OptionValue Value for Option to be searched.
297
298 @retval Pointer Pointer to the found Option.
299 @retval NULL Option not found.
300
301 **/
302 DISPLAY_QUESTION_OPTION *
303 ValueToOption (
304 IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
305 IN EFI_HII_VALUE *OptionValue
306 );
307
308 /**
309 Compare two Hii value.
310
311 @param Value1 Expression value to compare on left-hand.
312 @param Value2 Expression value to compare on right-hand.
313 @param Result Return value after compare.
314 retval 0 Two operators equal.
315 return Positive value if Value1 is greater than Value2.
316 retval Negative value if Value1 is less than Value2.
317 @param HiiHandle Only required for string compare.
318
319 @retval other Could not perform compare on two values.
320 @retval EFI_SUCCESS Compare the value success.
321
322 **/
323 EFI_STATUS
324 CompareHiiValue (
325 IN EFI_HII_VALUE *Value1,
326 IN EFI_HII_VALUE *Value2,
327 OUT INTN *Result,
328 IN EFI_HII_HANDLE HiiHandle OPTIONAL
329 );
330
331 /**
332 Draw a pop up windows based on the dimension, number of lines and
333 strings specified.
334
335 @param RequestedWidth The width of the pop-up.
336 @param NumberOfLines The number of lines.
337 @param ... A series of text strings that displayed in the pop-up.
338
339 **/
340 VOID
341 EFIAPI
342 CreateMultiStringPopUp (
343 IN UINTN RequestedWidth,
344 IN UINTN NumberOfLines,
345 ...
346 );
347
348 /**
349 Will copy LineWidth amount of a string in the OutputString buffer and return the
350 number of CHAR16 characters that were copied into the OutputString buffer.
351 The output string format is:
352 Glyph Info + String info + '\0'.
353
354 In the code, it deals \r,\n,\r\n same as \n\r, also it not process the \r or \g.
355
356 @param InputString String description for this option.
357 @param LineWidth Width of the desired string to extract in CHAR16
358 characters
359 @param GlyphWidth The glyph width of the begin of the char in the string.
360 @param Index Where in InputString to start the copy process
361 @param OutputString Buffer to copy the string into
362
363 @return Returns the number of CHAR16 characters that were copied into the OutputString
364 buffer, include extra glyph info and '\0' info.
365
366 **/
367 UINT16
368 GetLineByWidth (
369 IN CHAR16 *InputString,
370 IN UINT16 LineWidth,
371 IN OUT UINT16 *GlyphWidth,
372 IN OUT UINTN *Index,
373 OUT CHAR16 **OutputString
374 );
375
376
377 /**
378 Get the string based on the StringId and HII Package List Handle.
379
380 @param Token The String's ID.
381 @param HiiHandle The Hii handle for this string package.
382
383 @return The output string.
384
385 **/
386 CHAR16 *
387 GetToken (
388 IN EFI_STRING_ID Token,
389 IN EFI_HII_HANDLE HiiHandle
390 );
391
392 /**
393 Count the storage space of a Unicode string.
394
395 This function handles the Unicode string with NARROW_CHAR
396 and WIDE_CHAR control characters. NARROW_HCAR and WIDE_CHAR
397 does not count in the resultant output. If a WIDE_CHAR is
398 hit, then 2 Unicode character will consume an output storage
399 space with size of CHAR16 till a NARROW_CHAR is hit.
400
401 If String is NULL, then ASSERT ().
402
403 @param String The input string to be counted.
404
405 @return Storage space for the input string.
406
407 **/
408 UINTN
409 GetStringWidth (
410 IN CHAR16 *String
411 );
412
413 /**
414 This routine reads a numeric value from the user input.
415
416 @param MenuOption Pointer to the current input menu.
417
418 @retval EFI_SUCCESS If numerical input is read successfully
419 @retval EFI_DEVICE_ERROR If operation fails
420
421 **/
422 EFI_STATUS
423 GetNumericInput (
424 IN UI_MENU_OPTION *MenuOption
425 );
426
427 /**
428 Get string or password input from user.
429
430 @param MenuOption Pointer to the current input menu.
431 @param Prompt The prompt string shown on popup window.
432 @param StringPtr Old user input and destination for use input string.
433
434 @retval EFI_SUCCESS If string input is read successfully
435 @retval EFI_DEVICE_ERROR If operation fails
436
437 **/
438 EFI_STATUS
439 ReadString (
440 IN UI_MENU_OPTION *MenuOption,
441 IN CHAR16 *Prompt,
442 IN OUT CHAR16 *StringPtr
443 );
444
445 /**
446 Draw a pop up windows based on the dimension, number of lines and
447 strings specified.
448
449 @param RequestedWidth The width of the pop-up.
450 @param NumberOfLines The number of lines.
451 @param Marker The variable argument list for the list of string to be printed.
452
453 **/
454 VOID
455 CreateSharedPopUp (
456 IN UINTN RequestedWidth,
457 IN UINTN NumberOfLines,
458 IN VA_LIST Marker
459 );
460
461 /**
462 Wait for a key to be pressed by user.
463
464 @param Key The key which is pressed by user.
465
466 @retval EFI_SUCCESS The function always completed successfully.
467
468 **/
469 EFI_STATUS
470 WaitForKeyStroke (
471 OUT EFI_INPUT_KEY *Key
472 );
473
474 /**
475 Get selection for OneOf and OrderedList (Left/Right will be ignored).
476
477 @param MenuOption Pointer to the current input menu.
478
479 @retval EFI_SUCCESS If Option input is processed successfully
480 @retval EFI_DEVICE_ERROR If operation fails
481
482 **/
483 EFI_STATUS
484 GetSelectionInputPopUp (
485 IN UI_MENU_OPTION *MenuOption
486 );
487
488 /**
489 Process the help string: Split StringPtr to several lines of strings stored in
490 FormattedString and the glyph width of each line cannot exceed gHelpBlockWidth.
491
492 @param StringPtr The entire help string.
493 @param FormattedString The oupput formatted string.
494 @param EachLineWidth The max string length of each line in the formatted string.
495 @param RowCount TRUE: if Question is selected.
496
497 **/
498 UINTN
499 ProcessHelpString (
500 IN CHAR16 *StringPtr,
501 OUT CHAR16 **FormattedString,
502 OUT UINT16 *EachLineWidth,
503 IN UINTN RowCount
504 );
505
506 /**
507 Process a Question's Option (whether selected or un-selected).
508
509 @param MenuOption The MenuOption for this Question.
510 @param Selected TRUE: if Question is selected.
511 @param OptionString Pointer of the Option String to be displayed.
512 @param SkipErrorValue Whether need to return when value without option for it.
513
514 @retval EFI_SUCCESS Question Option process success.
515 @retval Other Question Option process fail.
516
517 **/
518 EFI_STATUS
519 ProcessOptions (
520 IN UI_MENU_OPTION *MenuOption,
521 IN BOOLEAN Selected,
522 OUT CHAR16 **OptionString,
523 IN BOOLEAN SkipErrorValue
524 );
525
526 /**
527 Set Buffer to Value for Size bytes.
528
529 @param Buffer Memory to set.
530 @param Size Number of bytes to set
531 @param Value Value of the set operation.
532
533 **/
534 VOID
535 SetUnicodeMem (
536 IN VOID *Buffer,
537 IN UINTN Size,
538 IN CHAR16 Value
539 );
540
541 /**
542 Display one form, and return user input.
543
544 @param FormData Form Data to be shown.
545 @param UserInputData User input data.
546
547 @retval EFI_SUCCESS Form Data is shown, and user input is got.
548 **/
549 EFI_STATUS
550 EFIAPI
551 FormDisplay (
552 IN FORM_DISPLAY_ENGINE_FORM *FormData,
553 OUT USER_INPUT *UserInputData
554 );
555
556 /**
557 Clear Screen to the initial state.
558 **/
559 VOID
560 EFIAPI
561 DriverClearDisplayPage (
562 VOID
563 );
564
565 /**
566 Exit Display and Clear Screen to the original state.
567
568 **/
569 VOID
570 EFIAPI
571 ExitDisplay (
572 VOID
573 );
574
575 /**
576 Process validate for one question.
577
578 @param Question The question which need to validate.
579
580 @retval EFI_SUCCESS Question Option process success.
581 @retval Other Question Option process fail.
582
583 **/
584 EFI_STATUS
585 ValidateQuestion (
586 IN FORM_DISPLAY_ENGINE_STATEMENT *Question
587 );
588
589 #endif