]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg:Fix the issue that refresh the question fail in DriverSample
authorDandan Bi <dandan.bi@intel.com>
Tue, 4 Aug 2015 09:09:10 +0000 (09:09 +0000)
committerdandanbi <dandanbi@Edk2>
Tue, 4 Aug 2015 09:09:10 +0000 (09:09 +0000)
Once the question is refreshed,the processing should happen in the callback function
of EFI_BROWSER_ACTION_RETRIEVE case,rather than EFI_BROWSER_ACTION_CHANGING in DriverSample.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18150 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c

index a21f58a77dcf4af85619c77aa01f6ee077de9836..2f77d39e52db8023a8e8bf896e054b712be9ad02 100644 (file)
@@ -1375,14 +1375,90 @@ DriverCallback (
     \r
   case EFI_BROWSER_ACTION_RETRIEVE:\r
     {\r
-      if (QuestionId == 0x1248) {\r
-        {\r
-          if (Type != EFI_IFR_TYPE_REF) {\r
-            return EFI_INVALID_PARAMETER;\r
+      switch (QuestionId ) {\r
+      case 0x1248:\r
+        if (Type != EFI_IFR_TYPE_REF) {\r
+          return EFI_INVALID_PARAMETER;\r
+        }\r
+        Value->ref.FormId = 0x3;\r
+        break;\r
+\r
+      case 0x5678:\r
+      case 0x1247:\r
+        //\r
+        // We will reach here once the Question is refreshed\r
+        //\r
+\r
+        //\r
+        // Initialize the container for dynamic opcodes\r
+        //\r
+        StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+        ASSERT (StartOpCodeHandle != NULL);\r
+\r
+        //\r
+        // Create Hii Extend Label OpCode as the start opcode\r
+        //\r
+        StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+        StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+        if (QuestionId == 0x5678) {\r
+          StartLabel->Number       = LABEL_UPDATE2;\r
+          FormId                   = 0x03;\r
+          PrivateData->Configuration.DynamicRefresh++;\r
+        } else if (QuestionId == 0x1247 ) {\r
+          StartLabel->Number       = LABEL_UPDATE3;\r
+          FormId                   = 0x06;\r
+          PrivateData->Configuration.RefreshGuidCount++;\r
+        }\r
+\r
+        HiiCreateActionOpCode (\r
+          StartOpCodeHandle,                // Container for dynamic created opcodes\r
+          0x1237,                           // Question ID\r
+          STRING_TOKEN(STR_EXIT_TEXT),      // Prompt text\r
+          STRING_TOKEN(STR_EXIT_TEXT),      // Help text\r
+          EFI_IFR_FLAG_CALLBACK,            // Question flag\r
+          0                                 // Action String ID\r
+        );\r
+      \r
+        HiiUpdateForm (\r
+          PrivateData->HiiHandle[0],        // HII handle\r
+          &gDriverSampleFormSetGuid,        // Formset GUID\r
+          FormId,                           // Form ID\r
+          StartOpCodeHandle,                // Label for where to insert opcodes\r
+          NULL                              // Insert data\r
+        );\r
+\r
+        HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+\r
+        //\r
+        // Refresh the Question value\r
+        //\r
+        Status = gRT->SetVariable(\r
+                        VariableName,\r
+                        &gDriverSampleFormSetGuid,\r
+                        EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                        sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+                        &PrivateData->Configuration\r
+                        );\r
+\r
+        if (QuestionId == 0x5678) {\r
+          //\r
+          // Update uncommitted data of Browser\r
+          //\r
+          EfiData = AllocateZeroPool (sizeof (MY_EFI_VARSTORE_DATA));\r
+          ASSERT (EfiData != NULL);\r
+          if (HiiGetBrowserData (&gDriverSampleFormSetGuid, MyEfiVar, sizeof (MY_EFI_VARSTORE_DATA), (UINT8 *) EfiData)) {\r
+            EfiData->Field8 = 111;\r
+            HiiSetBrowserData (\r
+              &gDriverSampleFormSetGuid,\r
+              MyEfiVar,\r
+              sizeof (MY_EFI_VARSTORE_DATA),\r
+              (UINT8 *) EfiData,\r
+              NULL\r
+            );\r
           }\r
-        \r
-          Value->ref.FormId = 0x3;\r
+          FreePool (EfiData);\r
         }\r
+        break;\r
       }\r
     }\r
     break;\r
@@ -1596,83 +1672,6 @@ DriverCallback (
       HiiFreeOpCodeHandle (EndOpCodeHandle);\r
       break;\r
 \r
-    case 0x5678:\r
-    case 0x1247:\r
-      //\r
-      // We will reach here once the Question is refreshed\r
-      //\r
-\r
-      //\r
-      // Initialize the container for dynamic opcodes\r
-      //\r
-      StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-      ASSERT (StartOpCodeHandle != NULL);\r
-\r
-      //\r
-      // Create Hii Extend Label OpCode as the start opcode\r
-      //\r
-      StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
-      StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
-      if (QuestionId == 0x5678) {\r
-        StartLabel->Number       = LABEL_UPDATE2;\r
-        FormId                   = 0x03;\r
-        PrivateData->Configuration.DynamicRefresh++;\r
-      } else if (QuestionId == 0x1247 ) {\r
-        StartLabel->Number       = LABEL_UPDATE3;\r
-        FormId                   = 0x06;\r
-        PrivateData->Configuration.RefreshGuidCount++;\r
-      }\r
-\r
-      HiiCreateActionOpCode (\r
-        StartOpCodeHandle,                // Container for dynamic created opcodes\r
-        0x1237,                           // Question ID\r
-        STRING_TOKEN(STR_EXIT_TEXT),      // Prompt text\r
-        STRING_TOKEN(STR_EXIT_TEXT),      // Help text\r
-        EFI_IFR_FLAG_CALLBACK,            // Question flag\r
-        0                                 // Action String ID\r
-      );\r
-\r
-      HiiUpdateForm (\r
-        PrivateData->HiiHandle[0],  // HII handle\r
-        &gDriverSampleFormSetGuid,              // Formset GUID\r
-        FormId,                        // Form ID\r
-        StartOpCodeHandle,          // Label for where to insert opcodes\r
-        NULL                        // Insert data\r
-        );\r
-\r
-      HiiFreeOpCodeHandle (StartOpCodeHandle);\r
-\r
-      //\r
-      // Refresh the Question value\r
-      //\r
-      Status = gRT->SetVariable(\r
-                      VariableName,\r
-                      &gDriverSampleFormSetGuid,\r
-                      EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-                      sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
-                      &PrivateData->Configuration\r
-                      );\r
-\r
-      if (QuestionId == 0x5678) {\r
-        //\r
-        // Update uncommitted data of Browser\r
-        //\r
-        EfiData = AllocateZeroPool (sizeof (MY_EFI_VARSTORE_DATA));\r
-        ASSERT (EfiData != NULL);\r
-        if (HiiGetBrowserData (&gDriverSampleFormSetGuid, MyEfiVar, sizeof (MY_EFI_VARSTORE_DATA), (UINT8 *) EfiData)) {\r
-          EfiData->Field8 = 111;\r
-          HiiSetBrowserData (\r
-            &gDriverSampleFormSetGuid,\r
-            MyEfiVar,\r
-            sizeof (MY_EFI_VARSTORE_DATA),\r
-            (UINT8 *) EfiData,\r
-            NULL\r
-            );\r
-        }\r
-        FreePool (EfiData);\r
-      }\r
-      break;\r
-\r
     case 0x2000:\r
       //\r
       // Only used to update the state.\r