In UEFI Spec., locate protocl with following declaration.
typedef
EFI_STATUS
(EFIAPI *EFI_LOCATE_PROTOCOL)(
IN EFI_GUID *Protocol,
IN VOID *Registration, OPTIONAL
OUT VOID **Interface
);
In EfiPy, it has this mapping declaration.
EFI_LOCATE_PROTOCOL = CFUNCTYPE (
EFI_STATUS,
POINTER(EFI_GUID), # IN *Protocol
PVOID, # IN *Registration, OPTIONAL
POINTER(PVOID) # OUT **Interface
)
Above, First argument (EFI_STATUS) is function return type.
By ctypes implementation, C language data structure is strong type.
Define PVOID object before locate protocol and transfer it to wanted protocol data object by ctypes cast() function after locate protocol success.
Sample Code
import EfiPy2 as EfiPy
Interface = EfiPy.PVOID ()
Status = EfiPy.gBS.LocateProtocol (
EfiPy.byref (gEfiSimpleTextOutProtocolGuid),
None,
EfiPy.byref (Interface)
)
TestConOut = EfiPy.cast (
Interface,
EfiPy.POINTER(EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL)
)
screenshot
sample source code can be download from Github EfiPy2ProtocolSample1.py
No comments:
Post a Comment