Revision: 17431
          http://sourceforge.net/p/edk2/code/17431
Author:   ydong10
Date:     2015-05-13 08:45:21 +0000 (Wed, 13 May 2015)
Log Message:
-----------
MdeModulePkg: Add sample code for keyword handler protocol.

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

Modified Paths:
--------------
    trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c
    trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.h
    trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf
    trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/Inventory.vfr
    trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
    trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/VfrStrings.uni

Modified: trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c    
2015-05-13 08:36:49 UTC (rev 17430)
+++ trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c    
2015-05-13 08:45:21 UTC (rev 17431)
@@ -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 - 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
 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
@@ -1279,6 +1279,10 @@
   DRIVER_SAMPLE_CONFIGURATION     *Configuration;
   MY_EFI_VARSTORE_DATA            *EfiData;
   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))||
     (ActionRequest == NULL)) {
@@ -1287,6 +1291,7 @@
 
 
   FormId = 0;
+  ProgressErr = 0;
   Status = EFI_SUCCESS;
   PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);
 
@@ -1753,7 +1758,78 @@
         //
         *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;
         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:
       break;
     }
@@ -1790,6 +1866,7 @@
   EFI_HII_STRING_PROTOCOL         *HiiString;
   EFI_FORM_BROWSER2_PROTOCOL      *FormBrowser2;
   EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
+  EFI_CONFIG_KEYWORD_HANDLER_PROTOCOL *HiiKeywordHandler;
   CHAR16                          *NewString;
   UINTN                           BufferSize;
   DRIVER_SAMPLE_CONFIGURATION     *Configuration;
@@ -1867,6 +1944,15 @@
   }
   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 (
                   &DriverHandle[0],
                   &gEfiDevicePathProtocolGuid,
@@ -1902,6 +1988,8 @@
                   &DriverHandle[1],
                   &gEfiDevicePathProtocolGuid,
                   &mHiiVendorDevicePath1,
+                  &gEfiHiiConfigAccessProtocolGuid,
+                  &PrivateData->ConfigAccess,
                   NULL
                   );
   ASSERT_EFI_ERROR (Status);

Modified: trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.h
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.h    
2015-05-13 08:36:49 UTC (rev 17430)
+++ trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.h    
2015-05-13 08:45:21 UTC (rev 17431)
@@ -1,6 +1,6 @@
 /** @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
 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
@@ -32,6 +32,7 @@
 #include <Protocol/HiiDatabase.h>
 #include <Protocol/HiiString.h>
 #include <Protocol/FormBrowserEx.h>
+#include <Protocol/HiiConfigKeyword.h>
 
 #include <Guid/MdeModuleHii.h>
 #include <Library/DebugLib.h>
@@ -97,6 +98,8 @@
   EFI_HII_DATABASE_PROTOCOL        *HiiDatabase;
   EFI_HII_STRING_PROTOCOL          *HiiString;
   EFI_HII_CONFIG_ROUTING_PROTOCOL  *HiiConfigRouting;
+  EFI_CONFIG_KEYWORD_HANDLER_PROTOCOL *HiiKeywordHandler;
+
   EFI_FORM_BROWSER2_PROTOCOL       *FormBrowser2;
 
   //

Modified: trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf       
2015-05-13 08:36:49 UTC (rev 17430)
+++ trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf       
2015-05-13 08:45:21 UTC (rev 17431)
@@ -4,7 +4,7 @@
 # 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.
 #
-# 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
 #  are licensed and made available under the terms and conditions of the BSD 
License
@@ -92,6 +92,7 @@
   gEfiHiiDatabaseProtocolGuid                   ## CONSUMES
   gEfiSimpleTextInputExProtocolGuid             ## SOMETIMES_CONSUMES
   gEfiFormBrowserExProtocolGuid                 ## CONSUMES
+  gEfiConfigKeywordHandlerProtocolGuid          ## CONSUMES
 
 [Depex]
   gEfiSimpleTextOutProtocolGuid AND gEfiHiiDatabaseProtocolGuid AND 
gEfiVariableArchProtocolGuid AND gEfiVariableWriteArchProtocolGuid

Modified: trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/Inventory.vfr
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/Inventory.vfr     
2015-05-13 08:36:49 UTC (rev 17430)
+++ trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/Inventory.vfr     
2015-05-13 08:45:21 UTC (rev 17431)
@@ -2,7 +2,7 @@
 //
 //    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
 //  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
@@ -104,6 +104,12 @@
       flags  = 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_VERSION_TEXT12);

Modified: trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr   2015-05-13 
08:36:49 UTC (rev 17430)
+++ trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr   2015-05-13 
08:45:21 UTC (rev 17431)
@@ -2,7 +2,7 @@
 //
 //    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
 //  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
@@ -280,7 +280,7 @@
     endoneof;
 
     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),
       flags       = RESET_REQUIRED,
       option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = 0;

Modified: trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/VfrStrings.uni
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/VfrStrings.uni    
2015-05-13 08:36:49 UTC (rev 17430)
+++ trunk/edk2/MdeModulePkg/Universal/DriverSampleDxe/VfrStrings.uni    
2015-05-13 08:45:21 UTC (rev 17431)
@@ -2,7 +2,7 @@
  - @@ -54,6 +54,8 @@
  +    +++++  

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
edk2-commits mailing list
edk2-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to