mirror of https://github.com/acidanthera/audk.git
Add example usage of EFI_BROWSER_ACTION_FORM_OPEN and EFI_BROWSER_ACTION_FORM_CLOSE to DriverSample.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9365 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
ce6d12cce0
commit
a6973cff62
|
@ -2,7 +2,7 @@
|
|||
This is an example of how a driver might export data to the HII protocol to be
|
||||
later utilized by the Setup Protocol
|
||||
|
||||
Copyright (c) 2004 - 2008, Intel Corporation
|
||||
Copyright (c) 2004 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -554,6 +554,67 @@ DriverCallback (
|
|||
EFI_IFR_GUID_LABEL *StartLabel;
|
||||
VOID *EndOpCodeHandle;
|
||||
EFI_IFR_GUID_LABEL *EndLabel;
|
||||
EFI_INPUT_KEY Key;
|
||||
DRIVER_SAMPLE_CONFIGURATION *Configuration;
|
||||
|
||||
if (Action == EFI_BROWSER_ACTION_FORM_OPEN) {
|
||||
//
|
||||
// On FORM_OPEN event, update the form on-the-fly
|
||||
//
|
||||
PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);
|
||||
|
||||
//
|
||||
// Initialize the container for dynamic opcodes
|
||||
//
|
||||
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||
ASSERT (StartOpCodeHandle != NULL);
|
||||
|
||||
//
|
||||
// Create Hii Extend Label OpCode as the start opcode
|
||||
//
|
||||
StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
|
||||
StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
|
||||
StartLabel->Number = LABEL_UPDATE2;
|
||||
|
||||
HiiCreateActionOpCode (
|
||||
StartOpCodeHandle, // Container for dynamic created opcodes
|
||||
0x1238, // Question ID
|
||||
STRING_TOKEN(STR_SAVE_TEXT), // Prompt text
|
||||
STRING_TOKEN(STR_SAVE_TEXT), // Help text
|
||||
EFI_IFR_FLAG_CALLBACK, // Question flag
|
||||
0 // Action String ID
|
||||
);
|
||||
|
||||
HiiUpdateForm (
|
||||
PrivateData->HiiHandle[0], // HII handle
|
||||
&mFormSetGuid, // Formset GUID
|
||||
0x3, // Form ID
|
||||
StartOpCodeHandle, // Label for where to insert opcodes
|
||||
NULL // Insert data
|
||||
);
|
||||
|
||||
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
if (Action == EFI_BROWSER_ACTION_FORM_CLOSE) {
|
||||
//
|
||||
// On FORM_CLOSE event, show up a pop-up
|
||||
//
|
||||
do {
|
||||
CreatePopUp (
|
||||
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
|
||||
&Key,
|
||||
L"",
|
||||
L"You are going to leave the Form!",
|
||||
L"Press ESC or ENTER to continue ...",
|
||||
L"",
|
||||
NULL
|
||||
);
|
||||
} while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN));
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
if ((Value == NULL) || (ActionRequest == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
@ -635,6 +696,28 @@ DriverCallback (
|
|||
&PrivateData->Configuration
|
||||
);
|
||||
|
||||
//
|
||||
// Set initial vlaue of dynamic created oneof Question in Form Browser
|
||||
//
|
||||
Configuration = AllocateZeroPool (sizeof (DRIVER_SAMPLE_CONFIGURATION));
|
||||
ASSERT (Configuration != NULL);
|
||||
Status = HiiGetBrowserData (&mFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION), (UINT8 *) Configuration);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Configuration->DynamicOneof = 2;
|
||||
|
||||
//
|
||||
// Update uncommitted data of Browser
|
||||
//
|
||||
HiiSetBrowserData (
|
||||
&mFormSetGuid,
|
||||
VariableName,
|
||||
sizeof (DRIVER_SAMPLE_CONFIGURATION),
|
||||
(UINT8 *) Configuration,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
FreePool (Configuration);
|
||||
|
||||
HiiCreateOneOfOpCode (
|
||||
StartOpCodeHandle, // Container for dynamic created opcodes
|
||||
0x8001, // Question ID (or call it "key")
|
||||
|
@ -682,6 +765,7 @@ DriverCallback (
|
|||
|
||||
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||
HiiFreeOpCodeHandle (OptionsOpCodeHandle);
|
||||
HiiFreeOpCodeHandle (EndOpCodeHandle);
|
||||
break;
|
||||
|
||||
case 0x5678:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/** @file
|
||||
|
||||
Copyright (c) 2007, Intel Corporation
|
||||
Copyright (c) 2007 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -43,6 +43,7 @@ Revision History
|
|||
#include <Library/HiiLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
#include <Library/UefiLib.h>
|
||||
|
||||
#include "NVDataStruc.h"
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# This is a sample driver which show how HII protocol, VFR and UNI files are used to
|
||||
# create a driver which can be dipslayed and configured by a UEFI HII Form Browser.
|
||||
#
|
||||
# Copyright (c) 2007 - 2008, Intel Corporation. All rights reserved.
|
||||
# Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -55,6 +55,7 @@
|
|||
DebugLib
|
||||
HiiLib
|
||||
PrintLib
|
||||
UefiLib
|
||||
|
||||
[Guids]
|
||||
gEfiIfrTianoGuid ## CONSUMES ## Guid
|
||||
|
|
Loading…
Reference in New Issue