mirror of https://github.com/acidanthera/audk.git
MdeModulePkg FileExplorerLib: Create file explorer library.
This library support select one file from the specified directory or from system root directory. 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 <elhaj@hpe.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18917 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
8084b26e92
commit
ba529e7e5a
|
@ -0,0 +1,60 @@
|
|||
/** @file
|
||||
|
||||
This library class defines a set of interfaces for how to do file explorer.
|
||||
|
||||
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 that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __FILE_EXPLORER_LIB_H__
|
||||
#define __FILE_EXPLORER_LIB_H__
|
||||
|
||||
/**
|
||||
Prototype for the next process after user chosed one file.
|
||||
|
||||
@param[in] FilePath The device path of the find file.
|
||||
|
||||
@retval TRUE Need exit file explorer after do the extra task.
|
||||
@retval FALSE Not need to exit file explorer after do the extra task.
|
||||
|
||||
**/
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *CHOOSE_HANDLER)(
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
|
||||
);
|
||||
|
||||
/**
|
||||
Choose a file in the specified directory.
|
||||
|
||||
If user input NULL for the RootDirectory, will choose file in the system.
|
||||
|
||||
If user input *File != NULL, function will return the allocate device path
|
||||
info for the choosed file, caller has to free the memory after use it.
|
||||
|
||||
@param RootDirectory Pointer to the root directory.
|
||||
@param FileType The file type need to choose.
|
||||
@param ChooseHandler Function pointer to the extra task need to do
|
||||
after choose one file.
|
||||
@param File Return the device path for the last time chosed file.
|
||||
|
||||
@retval EFI_SUCESS Choose the file success.
|
||||
@retval Other errors Choose the file failed.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ChooseFile (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RootDirectory,
|
||||
IN CHAR16 *FileType, OPTIONAL
|
||||
IN CHOOSE_HANDLER ChooseHandler, OPTIONAL
|
||||
OUT EFI_DEVICE_PATH_PROTOCOL **File OPTIONAL
|
||||
);
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,239 @@
|
|||
/** @file
|
||||
File explorer lib.
|
||||
|
||||
Copyright (c) 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
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
**/
|
||||
|
||||
#ifndef _FILE_EXPLORER_H_
|
||||
#define _FILE_EXPLORER_H_
|
||||
|
||||
#include <PiDxe.h>
|
||||
#include <Guid/FileSystemVolumeLabelInfo.h>
|
||||
#include <Guid/FileInfo.h>
|
||||
#include <Guid/MdeModuleHii.h>
|
||||
|
||||
#include <Protocol/HiiConfigAccess.h>
|
||||
#include <Protocol/DevicePath.h>
|
||||
#include <Protocol/SimpleFileSystem.h>
|
||||
#include <Protocol/DevicePathToText.h>
|
||||
#include <Protocol/LoadFile.h>
|
||||
#include <Protocol/FormBrowser2.h>
|
||||
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/FileExplorerLib.h>
|
||||
#include <Library/HiiLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
|
||||
#include "FormGuid.h"
|
||||
|
||||
#define FILE_EXPLORER_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('f', 'e', 'c', 'k')
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
///
|
||||
/// HII specific Vendor Device Path definition.
|
||||
///
|
||||
typedef struct {
|
||||
VENDOR_DEVICE_PATH VendorDevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL End;
|
||||
} HII_VENDOR_DEVICE_PATH;
|
||||
|
||||
typedef struct {
|
||||
EFI_HANDLE DeviceHandle;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
EFI_FILE_HANDLE FileHandle;
|
||||
UINT16 *FileName;
|
||||
|
||||
BOOLEAN IsRoot;
|
||||
BOOLEAN IsDir;
|
||||
} FILE_CONTEXT;
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
UINT16 *DisplayString;
|
||||
UINT16 *HelpString;
|
||||
EFI_STRING_ID DisplayStringToken;
|
||||
EFI_STRING_ID HelpStringToken;
|
||||
VOID *VariableContext;
|
||||
} MENU_ENTRY;
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Head;
|
||||
UINTN MenuNumber;
|
||||
BOOLEAN Used;
|
||||
} MENU_OPTION;
|
||||
|
||||
typedef struct {
|
||||
//
|
||||
// Shared callback data.
|
||||
//
|
||||
UINTN Signature;
|
||||
|
||||
//
|
||||
// File explorer formset callback data.
|
||||
//
|
||||
EFI_HII_HANDLE FeHiiHandle;
|
||||
EFI_HANDLE FeDriverHandle;
|
||||
EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess;
|
||||
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
|
||||
MENU_OPTION *FsOptionMenu;
|
||||
CHAR16 *FileType;
|
||||
CHOOSE_HANDLER ChooseHandler;
|
||||
EFI_DEVICE_PATH_PROTOCOL *RetDevicePath;
|
||||
|
||||
} FILE_EXPLORER_CALLBACK_DATA;
|
||||
|
||||
#define FILE_EXPLORER_PRIVATE_FROM_THIS(a) CR (a, FILE_EXPLORER_CALLBACK_DATA, FeConfigAccess, FILE_EXPLORER_CALLBACK_DATA_SIGNATURE)
|
||||
|
||||
#pragma pack()
|
||||
|
||||
extern UINT8 FileExplorerVfrBin[];
|
||||
|
||||
#define MENU_OPTION_SIGNATURE SIGNATURE_32 ('m', 'e', 'n', 'u')
|
||||
#define MENU_ENTRY_SIGNATURE SIGNATURE_32 ('e', 'n', 't', 'r')
|
||||
|
||||
///
|
||||
/// Define the maximum characters that will be accepted.
|
||||
///
|
||||
#define MAX_CHAR 480
|
||||
#define FILE_OPTION_OFFSET 0x8000
|
||||
#define FILE_OPTION_MASK 0x7FFF
|
||||
|
||||
|
||||
/**
|
||||
This function processes the results of changes in configuration.
|
||||
When user select a interactive opcode, this callback will be triggered.
|
||||
Based on the Question(QuestionId) that triggers the callback, the corresponding
|
||||
actions is performed. It handles:
|
||||
|
||||
1) the addition of boot option.
|
||||
2) the addition of driver option.
|
||||
3) exit from file browser
|
||||
4) update of file content if a dir is selected.
|
||||
5) boot the file if a file is selected in "boot from file"
|
||||
|
||||
|
||||
@param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
|
||||
@param Action Specifies the type of action taken by the browser.
|
||||
@param QuestionId A unique value which is sent to the original exporting driver
|
||||
so that it can identify the type of data to expect.
|
||||
@param Type The type of value for the question.
|
||||
@param Value A pointer to the data being sent to the original exporting driver.
|
||||
@param ActionRequest On return, points to the action requested by the callback function.
|
||||
|
||||
@retval EFI_SUCCESS The callback successfully handled the action.
|
||||
@retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.
|
||||
@retval EFI_DEVICE_ERROR The variable could not be saved.
|
||||
@retval EFI_UNSUPPORTED The specified Action is not supported by the callback.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
LibCallback (
|
||||
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||||
IN EFI_BROWSER_ACTION Action,
|
||||
IN EFI_QUESTION_ID QuestionId,
|
||||
IN UINT8 Type,
|
||||
IN EFI_IFR_TYPE_VALUE *Value,
|
||||
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
This function allows a caller to extract the current configuration for one
|
||||
or more named elements from the target driver.
|
||||
|
||||
|
||||
@param This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
|
||||
@param Request - A null-terminated Unicode string in <ConfigRequest> format.
|
||||
@param Progress - On return, points to a character in the Request string.
|
||||
Points to the string's null terminator if request was successful.
|
||||
Points to the most recent '&' before the first failing name/value
|
||||
pair (or the beginning of the string if the failure is in the
|
||||
first name/value pair) if the request was not successful.
|
||||
@param Results - A null-terminated Unicode string in <ConfigAltResp> format which
|
||||
has all values filled in for the names in the Request string.
|
||||
String to be allocated by the called function.
|
||||
|
||||
@retval EFI_SUCCESS The Results is filled with the requested values.
|
||||
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the results.
|
||||
@retval EFI_INVALID_PARAMETER Request is NULL, illegal syntax, or unknown name.
|
||||
@retval EFI_NOT_FOUND Routing data doesn't match any storage in this driver.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
LibExtractConfig (
|
||||
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||||
IN CONST EFI_STRING Request,
|
||||
OUT EFI_STRING *Progress,
|
||||
OUT EFI_STRING *Results
|
||||
);
|
||||
|
||||
/**
|
||||
This function processes the results of changes in configuration.
|
||||
|
||||
|
||||
@param This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
|
||||
@param Configuration - A null-terminated Unicode string in <ConfigResp> format.
|
||||
@param Progress - A pointer to a string filled in with the offset of the most
|
||||
recent '&' before the first failing name/value pair (or the
|
||||
beginning of the string if the failure is in the first
|
||||
name/value pair) or the terminating NULL if all was successful.
|
||||
|
||||
@retval EFI_SUCCESS The Results is processed successfully.
|
||||
@retval EFI_INVALID_PARAMETER Configuration is NULL.
|
||||
@retval EFI_NOT_FOUND Routing data doesn't match any storage in this driver.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
LibRouteConfig (
|
||||
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
|
||||
IN CONST EFI_STRING Configuration,
|
||||
OUT EFI_STRING *Progress
|
||||
);
|
||||
|
||||
/**
|
||||
Update the file explower page with the refershed file system.
|
||||
|
||||
@param KeyValue Key value to identify the type of data to expect.
|
||||
|
||||
@retval EFI_SUCCESS Update the file explorer form success.
|
||||
@retval other errors Error occur when parse one directory.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
LibUpdateFileExplorer (
|
||||
IN UINT16 KeyValue
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Get the device path info saved in the menu structure.
|
||||
|
||||
@param KeyValue Key value to identify the type of data to expect.
|
||||
|
||||
**/
|
||||
VOID
|
||||
LibGetDevicePath (
|
||||
IN UINT16 KeyValue
|
||||
);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,60 @@
|
|||
## @file
|
||||
# library defines a set of interfaces for how to do file explorer.
|
||||
#
|
||||
# Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
# This software and associated documentation (if any) is furnished
|
||||
# under a license and may only be used or copied in accordance
|
||||
# with the terms of the license. Except as permitted by such
|
||||
# license, no part of this software or documentation may be
|
||||
# reproduced, stored in a retrieval system, or transmitted in any
|
||||
# form or by any means without the express written consent of
|
||||
# Intel Corporation.
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = FileExplorerLib
|
||||
FILE_GUID = 4FC9C630-0F90-4053-8F13-264CBD22FC58
|
||||
MODULE_TYPE = DXE_DRIVER
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = FileExplorerLib|DXE_DRIVER UEFI_APPLICATION
|
||||
CONSTRUCTOR = FileExplorerLibConstructor
|
||||
DESTRUCTOR = FileExplorerLibDestructor
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
FileExplorer.h
|
||||
FileExplorerVfr.vfr
|
||||
FileExplorerString.uni
|
||||
FileExplorer.c
|
||||
FormGuid.h
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
DevicePathLib
|
||||
BaseLib
|
||||
MemoryAllocationLib
|
||||
UefiBootServicesTableLib
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
HiiLib
|
||||
|
||||
[Guids]
|
||||
gEfiFileSystemVolumeLabelInfoIdGuid ## CONSUMES ## GUID (Indicate the information type is volume)
|
||||
gEfiIfrTianoGuid ## CONSUMES ## GUID (Extended IFR Guid Opcode)
|
||||
|
||||
[Protocols]
|
||||
gEfiSimpleFileSystemProtocolGuid ## PROTOCOL CONSUMES
|
||||
gEfiLoadFileProtocolGuid ## PROTOCOL CONSUMES
|
||||
gEfiHiiConfigAccessProtocolGuid ## PROTOCOL CONSUMES
|
||||
gEfiFormBrowser2ProtocolGuid ## PROTOCOL CONSUMES
|
||||
gEfiDevicePathToTextProtocolGuid ## PROTOCOL CONSUMES
|
Binary file not shown.
|
@ -0,0 +1,32 @@
|
|||
///** @file
|
||||
//
|
||||
// File Explorer Formset
|
||||
//
|
||||
// Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
|
||||
// This software and associated documentation (if any) is furnished
|
||||
// under a license and may only be used or copied in accordance
|
||||
// with the terms of the license. Except as permitted by such
|
||||
// license, no part of this software or documentation may be
|
||||
// reproduced, stored in a retrieval system, or transmitted in any
|
||||
// form or by any means without the express written consent of
|
||||
// Intel Corporation.
|
||||
|
||||
|
||||
//**/
|
||||
|
||||
#include "FormGuid.h"
|
||||
|
||||
formset
|
||||
guid = EFI_FILE_EXPLORE_FORMSET_GUID,
|
||||
title = STRING_TOKEN(STR_FILE_EXPLORER_TITLE),
|
||||
help = STRING_TOKEN(STR_NULL_STRING),
|
||||
classguid = EFI_FILE_EXPLORE_FORMSET_GUID,
|
||||
|
||||
form formid = FORM_FILE_EXPLORER_ID,
|
||||
title = STRING_TOKEN(STR_FILE_EXPLORER_TITLE);
|
||||
|
||||
label FORM_FILE_EXPLORER_ID;
|
||||
label LABEL_END;
|
||||
endform;
|
||||
|
||||
endformset;
|
|
@ -0,0 +1,27 @@
|
|||
/** @file
|
||||
Formset guids, form id and VarStore data structure for Boot Maintenance Manager.
|
||||
|
||||
Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This software and associated documentation (if any) is furnished
|
||||
under a license and may only be used or copied in accordance
|
||||
with the terms of the license. Except as permitted by such
|
||||
license, no part of this software or documentation may be
|
||||
reproduced, stored in a retrieval system, or transmitted in any
|
||||
form or by any means without the express written consent of
|
||||
Intel Corporation.
|
||||
|
||||
**/
|
||||
#ifndef _FILE_EXPLORER_FORM_GUID_H_
|
||||
#define _FILE_EXPLORER_FORM_GUID_H_
|
||||
|
||||
|
||||
#define EFI_FILE_EXPLORE_FORMSET_GUID \
|
||||
{ \
|
||||
0x1f2d63e1, 0xfebd, 0x4dc7, {0x9c, 0xc5, 0xba, 0x2b, 0x1c, 0xef, 0x9c, 0x5b} \
|
||||
}
|
||||
|
||||
#define FORM_FILE_EXPLORER_ID 0x1000
|
||||
#define LABEL_END 0xffff
|
||||
|
||||
#endif
|
||||
|
|
@ -131,6 +131,10 @@
|
|||
#
|
||||
PlatformVarCleanupLib|Include/Library/PlatformVarCleanupLib.h
|
||||
|
||||
## @libraryclass Provides services to get do the file explorer.
|
||||
#
|
||||
FileExplorerLib|Include/Library/FileExplorerLib.h
|
||||
|
||||
## @libraryclass Provides image decoding service.
|
||||
#
|
||||
ImageDecoderLib|Include/Library/ImageDecoderLib.h
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
|
||||
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
|
||||
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
|
||||
FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
|
||||
|
||||
[LibraryClasses.EBC.PEIM]
|
||||
IoLib|MdePkg/Library/PeiIoLibCpuIo/PeiIoLibCpuIo.inf
|
||||
|
@ -287,6 +288,7 @@
|
|||
MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiLib.inf
|
||||
MdeModulePkg/Library/VarCheckPcdLib/VarCheckPcdLib.inf
|
||||
MdeModulePkg/Library/PlatformVarCleanupLib/PlatformVarCleanupLib.inf
|
||||
MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
|
||||
|
||||
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
|
||||
MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf
|
||||
|
|
Loading…
Reference in New Issue