/** @file | |
Instance of file explorer Library based on gEfiFileExplorerProtocolGuid. | |
Implement the file explorer library instance by wrap the interface | |
provided in the file explorer protocol. This protocol is defined as the internal | |
protocol related to this implementation, not in the public spec. So, this | |
library instance is only for this code base. | |
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include <Uefi.h> | |
#include <Base.h> | |
#include <Protocol/FileExplorer.h> | |
#include <Library/FileExplorerLib.h> | |
#include <Library/BaseLib.h> | |
#include <Library/DebugLib.h> | |
EFI_FILE_EXPLORER_PROTOCOL *mProtocol = NULL; | |
/** | |
The constructor function caches the pointer to file explorer protocol. | |
The constructor function locates Print2 protocol from protocol database. | |
It will ASSERT() if that operation fails and it will always return EFI_SUCCESS. | |
@param ImageHandle The firmware allocated handle for the EFI image. | |
@param SystemTable A pointer to the EFI System Table. | |
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
FileExplorerConstructor ( | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_SYSTEM_TABLE *SystemTable | |
) | |
{ | |
EFI_STATUS Status; | |
Status = SystemTable->BootServices->LocateProtocol ( | |
&gEfiFileExplorerProtocolGuid, | |
NULL, | |
(VOID **)&mProtocol | |
); | |
ASSERT_EFI_ERROR (Status); | |
ASSERT (mProtocol != NULL); | |
return Status; | |
} | |
/** | |
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 file success. | |
@retval EFI_INVALID_PARAMETER Both ChooseHandler and return device path are NULL | |
One of them must not NULL. | |
@retval Other errors Choose 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 | |
) | |
{ | |
return mProtocol->ChooseFile (RootDirectory, FileType, ChooseHandler, File); | |
} |