Commit e9c21711 authored by Eric Jin's avatar Eric Jin
Browse files

uefi-sct/SctPkg:Add checkpoint of ReadKeyStrokeEx Toggle state



The patch is applied to the EFI part.

UEFI drivers which implement the EFI_SIMPLE_TEXT_INPUT_EX protocol
are required to return KeyData.Key and KeyData.KeyState values.
These drivers must always return the most current state of
KeyData.KeyState.KeyShiftState and KeyData.KeyState.KeyToggleState.

The change in spec is "EFI_NOT_READY - There was no keystroke
data available. Current KeyData.KeyState values are exposed."

Cc: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: default avatarEric Jin <eric.jin@intel.com>
Reviewed-by: default avatarSupreeth Venkatesh <supreeth.venkatesh@arm.com>
parent b6772718
/** @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,7 @@ 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;
/** @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;
......@@ -26,6 +26,8 @@ Abstract:
#define REPEAT_RESET 5
#define VALIDSTATENUM_READKEYTEST 7
//
//Test Cases
//
......@@ -456,6 +458,79 @@ 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: %s",
L"ConsoleSplitter/TxtIn"
);
}
//
// Call check point
//
BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib, SimpleTextInputEx );
return EFI_SUCCESS;
}
//
//Check Points
//
......@@ -1061,3 +1136,144 @@ 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_KEY_TOGGLE_STATE ValidState[VALIDSTATENUM_READKEYTEST];
State = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED;
ValidState[0] = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE;
ValidState[1] = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE;
ValidState[2] = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_CAPS_LOCK_ACTIVE;
ValidState[3] = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE;
ValidState[4] = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE;
ValidState[5] = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE;
ValidState[6] = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE;
//
//Read next keystroke from the input device
//
Status = SimpleTextInputEx->ReadKeyStrokeEx (
SimpleTextInputEx,
&Key
);
if ((Status != EFI_SUCCESS) && (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 (EFI_ERROR(Status)) {
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<VALIDSTATENUM_READKEYTEST; Index++) {
//
// Set the valid KeyToggleState
// With EFI_KEY_STATE_EXPOSED bit enabled
//
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, and return status should be EFI_NOT_READY.
// the ReadKeyStrokeEx function will allow the return of
// incomplete keystrokes such as there is no Key data.
//
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;
}
/** @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",
......
/** @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
//
......@@ -155,6 +157,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 +249,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,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment