回复: [edk2-discuss] Refresh currently displayed form


gaoliming
 

VFR question has attribute refresh interval (Refresh interval in seconds). It will trig call back regularly.
There is one example is in edk2\MdeModulePkg\Universal\DriverSampleDxe\Vfr.vfr

You can add the logic in this question callback function to refresh the boot option. If so, the boot option can be updated.

Thanks
Liming

-----邮件原件-----
发件人: bounce+34241+421+4905953+8764802@groups.io
<bounce+34241+421+4905953+8764802@groups.io> 代表 Tomas Pilar
(tpilar)
发送时间: 2020年10月28日 22:01
收件人: discuss@edk2.groups.io; crawfxrd@gmail.com
主题: Re: [edk2-discuss] Refresh currently displayed form

Okay, I actually read the rest of your question and your problem is deeper
than that. What you need is for the device to be connected to a driver
(driver which might need to be loaded from the device option ROM), boot
manager to re-enumerate boot options, and then the page can be reloaded.
This is more difficult than what I originally thought you were trying to do.

Cheers,
Tom

On Wed, Oct 28, 2020 at 1:58 PM Tomas Pilar <tomas@nuviainc.com> wrote:

Hi,

You can add a 'refreshguid' property to a number of VFR objects. Then,
whenever you signal the event group with that guid, the object should be
refreshed by the HII Browser.

Cheers,
Tom

On Wed, Oct 28, 2020 at 1:04 PM Tim Crawford <crawfxrd@gmail.com>
wrote:

Hi all,

How can I refresh the currently displayed form?

The problem I'm trying to solve is that when on the BootManager page,
insertion or removal of a device does not update the form, leaving the list
of boot options in an invalid state.

Right now I'm trying to hack in an event to accomplish this, but someone
said there may be a mechanism to do this.

Thanks,
Tim








Tim Crawford
 

BootManager elements are generated dynamically. There are no questions or actions to attach a refresh interval or refreshguid to. I don't believe a refresh interval would produce the behavior I want; that is, to update *as soon as* an event (plugging/pulling a USB drive) happens.

But after looking at ANTLR syntax (BaseTools/Source/C/VfrCompile/VfrSyntax.g) I found that refreshguid can be used at the form level. This was added some time ago [1], but is not in the VFR specification [2]. Using this with CreateEventEx(), with refreshguid and EventGroup being the same GUID, produces the behavior I want.

[1] https://github.com/tianocore/edk2/commit/e2a5feb9d6c468c0ddb0caed2581d10585819db5
[2] https://edk2-docs.gitbook.io/edk-ii-vfr-specification/2_vfr_description_in_bnf/211_vfr_form_definition

Thanks,
Tim