MdeModulePkg: Add sample code for keyword handler protocol.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@hp.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17431 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Eric Dong 2015-05-13 08:45:21 +00:00 committed by ydong10
parent f736c1f198
commit 34326197d1
6 changed files with 104 additions and 6 deletions

View File

@ -2,7 +2,7 @@
This is an example of how a driver might export data to the HII protocol to be This is an example of how a driver might export data to the HII protocol to be
later utilized by the Setup Protocol later utilized by the Setup Protocol
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR> Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -1279,6 +1279,10 @@ DriverCallback (
DRIVER_SAMPLE_CONFIGURATION *Configuration; DRIVER_SAMPLE_CONFIGURATION *Configuration;
MY_EFI_VARSTORE_DATA *EfiData; MY_EFI_VARSTORE_DATA *EfiData;
EFI_FORM_ID FormId; EFI_FORM_ID FormId;
EFI_STRING Progress;
EFI_STRING Results;
UINT32 ProgressErr;
CHAR16 *TmpStr;
if (((Value == NULL) && (Action != EFI_BROWSER_ACTION_FORM_OPEN) && (Action != EFI_BROWSER_ACTION_FORM_CLOSE))|| if (((Value == NULL) && (Action != EFI_BROWSER_ACTION_FORM_OPEN) && (Action != EFI_BROWSER_ACTION_FORM_CLOSE))||
(ActionRequest == NULL)) { (ActionRequest == NULL)) {
@ -1287,6 +1291,7 @@ DriverCallback (
FormId = 0; FormId = 0;
ProgressErr = 0;
Status = EFI_SUCCESS; Status = EFI_SUCCESS;
PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This); PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);
@ -1753,7 +1758,78 @@ DriverCallback (
// //
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;
break; break;
case 0x1231:
//
// 1. Check to see whether system support keyword.
//
Status = PrivateData->HiiKeywordHandler->GetData (PrivateData->HiiKeywordHandler,
L"NAMESPACE=x-UEFI-ns",
L"KEYWORD=iSCSIBootEnable",
&Progress,
&ProgressErr,
&Results
);
if (EFI_ERROR (Status)) {
do {
CreatePopUp (
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
&Key,
L"",
L"This system not support this keyword!",
L"Press ENTER to continue ...",
L"",
NULL
);
} while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);
Status = EFI_SUCCESS;
break;
}
//
// 2. If system support this keyword, just try to change value.
//
//
// Change value from '0' to '1' or from '1' to '0'
//
TmpStr = StrStr (Results, L"&VALUE=");
ASSERT (TmpStr != NULL);
TmpStr += StrLen (L"&VALUE=");
TmpStr++;
if (*TmpStr == L'0') {
*TmpStr = L'1';
} else {
*TmpStr = L'0';
}
//
// 3. Call the keyword handler protocol to change the value.
//
Status = PrivateData->HiiKeywordHandler->SetData (PrivateData->HiiKeywordHandler,
Results,
&Progress,
&ProgressErr
);
if (EFI_ERROR (Status)) {
do {
CreatePopUp (
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
&Key,
L"",
L"Set keyword to the system failed!",
L"Press ENTER to continue ...",
L"",
NULL
);
} while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);
Status = EFI_SUCCESS;
break;
}
break;
default: default:
break; break;
} }
@ -1790,6 +1866,7 @@ DriverSampleInit (
EFI_HII_STRING_PROTOCOL *HiiString; EFI_HII_STRING_PROTOCOL *HiiString;
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2; EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting; EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
EFI_CONFIG_KEYWORD_HANDLER_PROTOCOL *HiiKeywordHandler;
CHAR16 *NewString; CHAR16 *NewString;
UINTN BufferSize; UINTN BufferSize;
DRIVER_SAMPLE_CONFIGURATION *Configuration; DRIVER_SAMPLE_CONFIGURATION *Configuration;
@ -1867,6 +1944,15 @@ DriverSampleInit (
} }
PrivateData->HiiConfigRouting = HiiConfigRouting; PrivateData->HiiConfigRouting = HiiConfigRouting;
//
// Locate keyword handler protocol
//
Status = gBS->LocateProtocol (&gEfiConfigKeywordHandlerProtocolGuid, NULL, (VOID **) &HiiKeywordHandler);
if (EFI_ERROR (Status)) {
return Status;
}
PrivateData->HiiKeywordHandler = HiiKeywordHandler;
Status = gBS->InstallMultipleProtocolInterfaces ( Status = gBS->InstallMultipleProtocolInterfaces (
&DriverHandle[0], &DriverHandle[0],
&gEfiDevicePathProtocolGuid, &gEfiDevicePathProtocolGuid,
@ -1902,6 +1988,8 @@ DriverSampleInit (
&DriverHandle[1], &DriverHandle[1],
&gEfiDevicePathProtocolGuid, &gEfiDevicePathProtocolGuid,
&mHiiVendorDevicePath1, &mHiiVendorDevicePath1,
&gEfiHiiConfigAccessProtocolGuid,
&PrivateData->ConfigAccess,
NULL NULL
); );
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);

View File

@ -1,6 +1,6 @@
/** @file /** @file
Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR> Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -32,6 +32,7 @@ Revision History
#include <Protocol/HiiDatabase.h> #include <Protocol/HiiDatabase.h>
#include <Protocol/HiiString.h> #include <Protocol/HiiString.h>
#include <Protocol/FormBrowserEx.h> #include <Protocol/FormBrowserEx.h>
#include <Protocol/HiiConfigKeyword.h>
#include <Guid/MdeModuleHii.h> #include <Guid/MdeModuleHii.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
@ -97,6 +98,8 @@ typedef struct {
EFI_HII_DATABASE_PROTOCOL *HiiDatabase; EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
EFI_HII_STRING_PROTOCOL *HiiString; EFI_HII_STRING_PROTOCOL *HiiString;
EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting; EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
EFI_CONFIG_KEYWORD_HANDLER_PROTOCOL *HiiKeywordHandler;
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2; EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
// //

View File

@ -4,7 +4,7 @@
# This driver shows how HII protocol, VFR and UNI files are used to create a HII # This driver shows how HII protocol, VFR and UNI files are used to create a HII
# driver which can be dipslayed and configured by a UEFI HII Form Browser. # driver which can be dipslayed and configured by a UEFI HII Form Browser.
# #
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -92,6 +92,7 @@
gEfiHiiDatabaseProtocolGuid ## CONSUMES gEfiHiiDatabaseProtocolGuid ## CONSUMES
gEfiSimpleTextInputExProtocolGuid ## SOMETIMES_CONSUMES gEfiSimpleTextInputExProtocolGuid ## SOMETIMES_CONSUMES
gEfiFormBrowserExProtocolGuid ## CONSUMES gEfiFormBrowserExProtocolGuid ## CONSUMES
gEfiConfigKeywordHandlerProtocolGuid ## CONSUMES
[Depex] [Depex]
gEfiSimpleTextOutProtocolGuid AND gEfiHiiDatabaseProtocolGuid AND gEfiVariableArchProtocolGuid AND gEfiVariableWriteArchProtocolGuid gEfiSimpleTextOutProtocolGuid AND gEfiHiiDatabaseProtocolGuid AND gEfiVariableArchProtocolGuid AND gEfiVariableWriteArchProtocolGuid

View File

@ -2,7 +2,7 @@
// //
// Sample Inventory Data // Sample Inventory Data
// //
// Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR> // Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
// This program and the accompanying materials // This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License // 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 // which accompanies this distribution. The full text of the license may be found at
@ -104,6 +104,12 @@ formset
flags = 0, flags = 0,
key = 0; key = 0;
text
help = STRING_TOKEN(STR_CHECK_KEYWORD_SUPPORT),
text = STRING_TOKEN(STR_CHECK_KEYWORD_SUPPORT),
flags = INTERACTIVE,
key = 0x1231;
subtitle text = STRING_TOKEN(STR_INV_EMPTY_STRING); subtitle text = STRING_TOKEN(STR_INV_EMPTY_STRING);
subtitle text = STRING_TOKEN(STR_INV_VERSION_TEXT12); subtitle text = STRING_TOKEN(STR_INV_VERSION_TEXT12);

View File

@ -2,7 +2,7 @@
// //
// Sample Setup formset. // Sample Setup formset.
// //
// Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR> // Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
// This program and the accompanying materials // This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License // 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 // which accompanies this distribution. The full text of the license may be found at
@ -280,7 +280,7 @@ formset
endoneof; endoneof;
oneof varid = MyIfrNVData.QuestionAboutTreeHugging, oneof varid = MyIfrNVData.QuestionAboutTreeHugging,
prompt = STRING_TOKEN(STR_ONE_OF_PROMPT), prompt = STRING_TOKEN(STR_ONE_OF_PROMPT_KEYWORD),
help = STRING_TOKEN(STR_ONE_OF_HELP), help = STRING_TOKEN(STR_ONE_OF_HELP),
flags = RESET_REQUIRED, flags = RESET_REQUIRED,
option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = 0; option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = 0;