FYI

On 10/15/2018 03:17 AM, Supreeth Venkatesh wrote:


On 10/13/2018 05:21 PM, Eric Jin wrote:

UEFI Spec clarify the Toggle state

Cc: Supreeth Venkatesh 
<supreeth.venkat...@arm.com><mailto:supreeth.venkat...@arm.com>
Cc: Jiaxin Wu <jiaxin...@intel.com><mailto:jiaxin...@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Eric Jin <eric....@intel.com><mailto:eric....@intel.com>
---
  .../SimpleTextInputEx/BlackBoxTest/Guid.c     |   7 +-
  .../SimpleTextInputEx/BlackBoxTest/Guid.h     |  12 +-
  .../SimpleTextInputExBBTestFunction.c         | 210 +++++++++++++++++
  .../SimpleTextInputExBBTestMain.c             |  13 +-
  .../SimpleTextInputExBBTestMain.h             |  22 +-
  .../SimpleTextInputEx/BlackBoxTest/Guid.c     |   7 +-
  .../SimpleTextInputEx/BlackBoxTest/Guid.h     |  12 +-
  .../SimpleTextInputExBBTestFunction.c         | 212 +++++++++++++++++-
  .../SimpleTextInputExBBTestMain.c             |  11 +-
  .../SimpleTextInputExBBTestMain.h             |  20 +-
  10 files changed, 513 insertions(+), 13 deletions(-)

diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
index 9cb19f48..ff2d50fa 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
@@ -1,7 +1,7 @@
  /** @file
      Copyright 2006 - 2012 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, 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
@@ -63,3 +63,8 @@ EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid007 = 
EFI_TEST_SIMPLETEXTI
  EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid008 = 
EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_008_GUID;
    EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009 = 
EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_009_GUID;
+
+EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010 = 
EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID;
+
+EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011 = 
EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID;
+
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
index 6c90fca3..2a6be48b 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
@@ -1,7 +1,7 @@
  /** @file
      Copyright 2006 - 2010 Unified EFI, Inc.<BR>
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, 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
@@ -119,3 +119,13 @@ extern EFI_GUID 
gSimpleTextInputExBBTestFunctionAssertionGuid008;
  { 0x534369f7, 0x8399, 0x4353, { 0x94, 0xad, 0xc4, 0x48, 0xfa, 0xda, 0xeb, 
0x84 } }
    extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009;
+
+#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID \
+{ 0xcf4d54eb, 0x6696, 0x4794, { 0x91, 0x74, 0x59, 0xd, 0x1c, 0x22, 0xa8, 0x67 
} }
+
+extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010;
+
+#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID \
+{ 0xf8e8f879, 0xa6d4, 0x4fd3, { 0x8b, 0x8e, 0xba, 0x1d, 0x18, 0xf1, 0x40, 0x71 
} }
+
+extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011;
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
index 153ade03..48f91002 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
@@ -456,6 +456,78 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
  }
    +EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  )
+{
+  EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib;
+  EFI_STATUS                            Status;
+  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *SimpleTextInputEx;
+
+  EFI_DEVICE_PATH_PROTOCOL             *DevicePath;
+  CHAR16                               *DevicePathStr;
+
+  //
+  // init
+  //
+  SimpleTextInputEx = (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)ClientInterface;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  //
+  // Get Device Path of current Simple_Text_Input_Ex_Protocol
+  // And out put device path or device name
+  //
+  Status = LocateDevicePathFromSimpleTextInputEx (SimpleTextInputEx, 
&DevicePath, StandardLib);
+  if (Status == EFI_SUCCESS) {
+    DevicePathStr = SctDevicePathToStr (DevicePath);
+    if (DevicePathStr != NULL) {
+      StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nCurrent Device: %s",
+                     DevicePathStr
+                     );
+      Status = gtBS->FreePool (DevicePathStr);
+      if (EFI_ERROR(Status))
+        return Status;
+      DevicePathStr=NULL;
+    }
+  } else {
+    //
+    // Console Splitter/StdErr
+    //
+    StandardLib->RecordMessage (
+                   StandardLib,
+                   EFI_VERBOSE_LEVEL_DEFAULT,
+                   L"\r\nCurrent Device: ConsoleSplitter/TxtIn"
+                   );
+  }
+
+  //
+  //
+  //
+  BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib, 
SimpleTextInputEx );
+
+  return EFI_SUCCESS;
+}
+
+
+
  //
  //Check Points
  //
@@ -1061,3 +1133,141 @@ BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
      return EFI_SUCCESS;
  }
+
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
+  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
+  )
+{
+  EFI_STATUS            Status;
+  EFI_TEST_ASSERTION    AssertionType;
+  EFI_KEY_DATA          Key;
+  UINT8                 Index;
+
+  EFI_KEY_TOGGLE_STATE  State = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED;
+
+  EFI_KEY_TOGGLE_STATE  ValidState[7] = {
Magic Number 7

+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_SCROLL_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_NUM_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_SCROLL_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          };
+
+  //
+  //Reset the console
+  //
+  Status = SimpleTextInputEx->ReadKeyStrokeEx (
+                                  SimpleTextInputEx,
+                                  &Key
+                                  );
+  if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
+       return Status;
+  }
+
+  if ((Key.KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) == 0) {
+       return EFI_UNSUPPORTED;
+  }
+
+  //
+  //Set the KEY_STATE_EXPOSED to check the imcomplete keystroke support
+  //
+  Status = SimpleTextInputEx->SetState (
+                                SimpleTextInputEx,
+                                &State
+                                );
+
+  if (Status == EFI_UNSUPPORTED || Status == EFI_DEVICE_ERROR) {
+    StandardLib->RecordAssertion (
+                   StandardLib,
+                   EFI_TEST_ASSERTION_WARNING,
+                   gTestGenericFailureGuid,
+                   L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState - SetState() 
doesn't return EFI_SUCCESS with EFI_KEY_STATE_EXPOSED",
+                   L"%a:%d, Status = %r\n",
+                   __FILE__,
+                   (UINTN)__LINE__,
+                   Status
+                   );
+    return Status;
+  }
+
+  for (Index=0; Index<7; Index++) {
Magic Number 7

+
+    //
+    // Set the valid KeyToggleState
+    //
+    Status = SimpleTextInputEx->SetState (
+                                  SimpleTextInputEx,
+                                  ValidState + Index
+                                  );
+
+    if (Status != EFI_SUCCESS) {
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     EFI_TEST_ASSERTION_FAILED,
+                     gTestGenericFailureGuid,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState - SetState() 
doesn't return EFI_SUCCESS with the valid KeyToggleState",
+                     L"%a:%d, Status = %r, KeyToggleState = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     ValidState[Index]
+                     );
+      continue;
+    }
+
+    //
+    // Get the KeyToggleState
+    //
+    Status = SimpleTextInputEx->ReadKeyStrokeEx (
+                                  SimpleTextInputEx,
+                                  &Key
+                                  );
+
+    if (Status != EFI_NOT_READY) {
+      AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     AssertionType,
+                     gSimpleTextInputExBBTestFunctionAssertionGuid010,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx - 
ReadKeyStrokeEx() doesn't return EFI_NOT_READY when there is no Key data and 
EFI_KEY_STATE_EXPOSED is enabled",
+                     L"%a:%d, Status = %r, Index = %d, KeyToggleState = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     Index,
+                     ValidState[Index]
+                     );
+
+    } else {
+      if (Key.KeyState.KeyToggleState == ValidState[Index] &&
+             (Key.KeyState.KeyShiftState == 0 || Key.KeyState.KeyShiftState == 
EFI_SHIFT_STATE_VALID) &&
+           Key.Key.ScanCode == 0 && Key.Key.UnicodeChar == 0)
+        AssertionType = EFI_TEST_ASSERTION_PASSED;
+      else
+           AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     AssertionType,
+                     gSimpleTextInputExBBTestFunctionAssertionGuid011,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx - 
ReadKeyStrokeEx() should get the ValidState with EFI_NOT_READY and other field 
is zero",
+                     L"%a:%d, Status = %r, Index = %d, KeyToggleState = %x, 
expect State = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     Index,
+                     Key.KeyState.KeyToggleState,
+                     ValidState[Index]
+                     );
+
+    }
+  }
+
+  return EFI_SUCCESS;
+}
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
index fdbc90fe..5b71b6a9 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
@@ -1,7 +1,7 @@
  /** @file
      Copyright 2006 - 2017 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, 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
@@ -105,6 +105,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
      BBTestUnregisterKeyNotifyFunctionManualTest
    },
  #endif
+  {
+    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107,
+    L"ReadKeyStrokeExFunctionAuto",
+    L"Function Auto test for Simple Text Input Ex Protocol ReadKeyStrokeEx().",
+    EFI_TEST_LEVEL_MINIMAL,
+    gSupportProtocolGuid,
+    EFI_TEST_CASE_AUTO,
+    BBTestReadKeyStrokeExFunctionAutoTest
+  },
    {
      EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0201,
      L"ReadKeyStrokeExConformance",
@@ -151,7 +160,6 @@ BOOLEAN     BeenExecuted;
  //
    EFI_STATUS
-EFIAPI
  InitializeSimpleTextInputExBBTest (
    IN EFI_HANDLE                   ImageHandle,
    IN EFI_SYSTEM_TABLE             *SystemTable
@@ -179,7 +187,6 @@ InitializeSimpleTextInputExBBTest (
      EFI_STATUS
-EFIAPI
  UnloadSimpleTextInputExBBTest (
    IN EFI_HANDLE                   ImageHandle
    )
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
index cb2160b3..86766068 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
@@ -1,7 +1,7 @@
  /** @file
      Copyright 2006 - 2017 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, 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
@@ -57,6 +57,8 @@ Abstract:
  #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0106 \
  { 0xdbc6e659, 0xb0e0, 0x4471, { 0x94, 0x13, 0x45, 0x1b, 0xdc, 0xe2, 0xad, 
0xc7 } }
  +#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107 \
+{ 0x2c3ca282, 0x5644, 0x41b6, { 0xaf, 0xc9, 0x43, 0x87, 0xf2, 0x53, 0x89, 0xbd 
} }
  //
  // Entry GUIDs for Conf Test
  //
@@ -86,7 +88,6 @@ typedef enum {
  //
  //
  EFI_STATUS
-EFIAPI
  InitializeSimpleTextInputExBBTest (
    IN EFI_HANDLE                   ImageHandle,
    IN EFI_SYSTEM_TABLE             *SystemTable
@@ -94,7 +95,6 @@ InitializeSimpleTextInputExBBTest (
          EFI_STATUS
-EFIAPI
  UnloadSimpleTextInputExBBTest (
    IN EFI_HANDLE                   ImageHandle
    );
@@ -155,6 +155,15 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
    IN EFI_TEST_LEVEL             TestLevel,
    IN EFI_HANDLE                 SupportHandle
    );
+
+
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  );
          EFI_STATUS
@@ -238,6 +247,13 @@ BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
    );
    +EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
+  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
+  );
+
+
  EFI_STATUS
  BBTestReadKeyStrokeExConformanceTestCheckpoint1 (
    IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
index b79772c9..6876814c 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
@@ -1,7 +1,7 @@
  /** @file
      Copyright 2006 - 2015 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, 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
@@ -63,3 +63,8 @@ EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid007 = 
EFI_TEST_SIMPLETEXTI
  EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid008 = 
EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_008_GUID;
    EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009 = 
EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_009_GUID;
+
+EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010 = 
EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID;
+
+EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011 = 
EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID;
+
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
index 6c90fca3..2a6be48b 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
@@ -1,7 +1,7 @@
  /** @file
      Copyright 2006 - 2010 Unified EFI, Inc.<BR>
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, 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
@@ -119,3 +119,13 @@ extern EFI_GUID 
gSimpleTextInputExBBTestFunctionAssertionGuid008;
  { 0x534369f7, 0x8399, 0x4353, { 0x94, 0xad, 0xc4, 0x48, 0xfa, 0xda, 0xeb, 
0x84 } }
    extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009;
+
+#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID \
+{ 0xcf4d54eb, 0x6696, 0x4794, { 0x91, 0x74, 0x59, 0xd, 0x1c, 0x22, 0xa8, 0x67 
} }
+
+extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010;
+
+#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID \
+{ 0xf8e8f879, 0xa6d4, 0x4fd3, { 0x8b, 0x8e, 0xba, 0x1d, 0x18, 0xf1, 0x40, 0x71 
} }
+
+extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011;
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
index ce5a80ac..04949de8 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
@@ -456,6 +456,78 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
  }
    +EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  )
+{
+  EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib;
+  EFI_STATUS                            Status;
+  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *SimpleTextInputEx;
+
+  EFI_DEVICE_PATH_PROTOCOL             *DevicePath;
+  CHAR16                               *DevicePathStr;
+
+  //
+  // init
+  //
+  SimpleTextInputEx = (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)ClientInterface;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+
+  //
+  // Get Device Path of current Simple_Text_Input_Ex_Protocol
+  // And out put device path or device name
+  //
+  Status = LocateDevicePathFromSimpleTextInputEx (SimpleTextInputEx, 
&DevicePath, StandardLib);
+  if (Status == EFI_SUCCESS) {
+    DevicePathStr = SctDevicePathToStr (DevicePath);
+    if (DevicePathStr != NULL) {
+      StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nCurrent Device: %s",
+                     DevicePathStr
+                     );
+      Status = gtBS->FreePool (DevicePathStr);
+      if (EFI_ERROR(Status))
+        return Status;
+      DevicePathStr=NULL;
+    }
+  } else {
+    //
+    // Console Splitter/StdErr
+    //
+    StandardLib->RecordMessage (
+                   StandardLib,
+                   EFI_VERBOSE_LEVEL_DEFAULT,
+                   L"\r\nCurrent Device: ConsoleSplitter/TxtIn"
+                   );
+  }
+
+  //
+  //
+  //
+  BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib, 
SimpleTextInputEx );
+
+  return EFI_SUCCESS;
+}
+
+
+
  //
  //Check Points
  //
@@ -1060,4 +1132,142 @@ BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
             );
      return EFI_SUCCESS;
-}
\ No newline at end of file
+}
+
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
+  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
+  )
+{
+  EFI_STATUS            Status;
+  EFI_TEST_ASSERTION    AssertionType;
+  EFI_KEY_DATA          Key;
+  UINT8                 Index;
+
+  EFI_KEY_TOGGLE_STATE  State = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED;
+
+  EFI_KEY_TOGGLE_STATE  ValidState[7] = {
Magic Number 7

+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_SCROLL_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_NUM_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_SCROLL_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | 
EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          };
+
+  //
+  //Reset the console
+  //
+  Status = SimpleTextInputEx->ReadKeyStrokeEx (
+                                  SimpleTextInputEx,
+                                  &Key
+                                  );
+  if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
+       return Status;
+  }
+
+  if ((Key.KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) == 0) {
+       return EFI_UNSUPPORTED;
+  }
+
+  //
+  //Set the KEY_STATE_EXPOSED to check the imcomplete keystroke support
+  //
+  Status = SimpleTextInputEx->SetState (
+                                SimpleTextInputEx,
+                                &State
+                                );
+
+  if (Status == EFI_UNSUPPORTED || Status == EFI_DEVICE_ERROR) {
+    StandardLib->RecordAssertion (
+                   StandardLib,
+                   EFI_TEST_ASSERTION_WARNING,
+                   gTestGenericFailureGuid,
+                   L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState - SetState() 
doesn't return EFI_SUCCESS with EFI_KEY_STATE_EXPOSED",
+                   L"%a:%d, Status = %r\n",
+                   __FILE__,
+                   (UINTN)__LINE__,
+                   Status
+                   );
+    return Status;
+  }
+
+  for (Index=0; Index<7; Index++) {
Magic Number 7

+
+    //
+    // Set the valid KeyToggleState
+    //
+    Status = SimpleTextInputEx->SetState (
+                                  SimpleTextInputEx,
+                                  ValidState + Index
+                                  );
+
+    if (Status != EFI_SUCCESS) {
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     EFI_TEST_ASSERTION_FAILED,
+                     gTestGenericFailureGuid,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState - SetState() 
doesn't return EFI_SUCCESS with the valid KeyToggleState",
+                     L"%a:%d, Status = %r, KeyToggleState = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     ValidState[Index]
+                     );
+      continue;
+    }
+
+    //
+    // Get the KeyToggleState
+    //
+    Status = SimpleTextInputEx->ReadKeyStrokeEx (
+                                  SimpleTextInputEx,
+                                  &Key
+                                  );
+
+    if (Status != EFI_NOT_READY) {
+      AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     AssertionType,
+                     gSimpleTextInputExBBTestFunctionAssertionGuid010,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx - 
ReadKeyStrokeEx() doesn't return EFI_NOT_READY when there is no Key data and 
EFI_KEY_STATE_EXPOSED is enabled",
+                     L"%a:%d, Status = %r, Index = %d, KeyToggleState = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     Index,
+                     ValidState[Index]
+                     );
+
+    } else {
+      if (Key.KeyState.KeyToggleState == ValidState[Index] &&
+             (Key.KeyState.KeyShiftState == 0 || Key.KeyState.KeyShiftState == 
EFI_SHIFT_STATE_VALID) &&
+           Key.Key.ScanCode == 0 && Key.Key.UnicodeChar == 0)
+        AssertionType = EFI_TEST_ASSERTION_PASSED;
+      else
+           AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     AssertionType,
+                     gSimpleTextInputExBBTestFunctionAssertionGuid011,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx - 
ReadKeyStrokeEx() should get the ValidState with EFI_NOT_READY and other field 
is zero",
+                     L"%a:%d, Status = %r, Index = %d, KeyToggleState = %x, 
expect State = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     Index,
+                     Key.KeyState.KeyToggleState,
+                     ValidState[Index]
+                     );
+
+    }
+  }
+
+  return EFI_SUCCESS;
+}
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
index 43dbbdae..c0a4f5aa 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
@@ -1,7 +1,7 @@
  /** @file
      Copyright 2006 - 2016 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, 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
@@ -105,6 +105,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
      BBTestUnregisterKeyNotifyFunctionManualTest
    },
  #endif
+  {
+    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107,
+    L"ReadKeyStrokeExFunctionAuto",
+    L"Function Auto test for Simple Text Input Ex Protocol ReadKeyStrokeEx().",
+    EFI_TEST_LEVEL_MINIMAL,
+    gSupportProtocolGuid,
+    EFI_TEST_CASE_AUTO,
+    BBTestReadKeyStrokeExFunctionAutoTest
+  },
    {
      EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0201,
      L"ReadKeyStrokeExConformance",
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
index 0b3312e9..bb0d8c9a 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
@@ -1,7 +1,7 @@
  /** @file
      Copyright 2006 - 2014 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, 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
@@ -61,6 +61,8 @@ Abstract:
  #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0106 \
  { 0xdbc6e659, 0xb0e0, 0x4471, { 0x94, 0x13, 0x45, 0x1b, 0xdc, 0xe2, 0xad, 
0xc7 } }
  +#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107 \
+{ 0x2c3ca282, 0x5644, 0x41b6, { 0xaf, 0xc9, 0x43, 0x87, 0xf2, 0x53, 0x89, 0xbd 
} }
  //
  // Entry GUIDs for Conf Test
  //
@@ -157,6 +159,15 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
    IN EFI_TEST_LEVEL             TestLevel,
    IN EFI_HANDLE                 SupportHandle
    );
+
+
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  );
          EFI_STATUS
@@ -240,6 +251,13 @@ BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
    );
    +EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
+  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
+  );
+
+
  EFI_STATUS
  BBTestReadKeyStrokeExConformanceTestCheckpoint1 (
    IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,


IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to