Keyboard emulation on BIOS

I use the USBClient in a program of keyboard emulation,
(I am burning the program by serial)
when I am in the BIOS, the state of the USBClientController is ‘Address’ and the KB don’t run
( kb.KeyTap(USBC_Key.DownArrow) command)

Do there are a way to work with a keyboard emulation in BIOS?

I am interested in this myself. I have a Dell Optiplex 740 that dosen’t understand my EMX keyboard commands in the BIOS but just fine in Windows. My logitech wireless USB keyboard also dosen’t work in the BIOS so I figured it was a BIOS issue.

This is very interesting, why would BIOS see a USB keyboard different than windows. We can look into this in near future.

I am also interested in this it can serve me a lot.
I tries and a regular USB keyboard works fine. while the Key board emulator via gadgeteer (using spider) doesn’t.

can you please check this and see how is it possible to do this?

We have 3 users wanting to emulate a keyboard in bios?! Can you guys please explain what are you going? I am really curious.

I want a general solution for KBE the bios is essential since there are use cases, some scenarios which I would like to automated which includes modifying bios settings.
a solution which does not work in BIOS is a serious issue for my needs,
I’d appreciate if you can investigate this and let me know more details about why is this behavior and how to solve this.

@ Gus - I thought I could perhaps macro script things like BitLocker recovery keys or GRUB passwords. Not something of a priority for me. Mostly just playing around in NETMF. I had only mentioned the issue since @ Judith brought it up initially.

In order to work correctly in bios the keybaord must:

  • Report 1 (Boot Interface ) in the bInterfaceSublcass field of the Usb Interface Desctiptor
  • Report 1 (Keyboard) in the bInterfaceProtocol field of the Usb Interface Descriptor
  • Support SetProtocol request

I can send the USB traffic captured via USB analyzer.

@ pgierasi - This was fixed in the latest release. Have you tried the latest firmware?

This is my configuration (device capabilities response in MFDeploy tool):

HalSystemInfo.halVendorInfo: Microsoft Copyright © Microsoft Corporation. All rig
HalSystemInfo.oemCode: 255
HalSystemInfo.modelCode: 0
HalSystemInfo.skuCode: 65535
ClrInfo.clrVendorInfo: Microsoft Copyright © Microsoft Corporation. All rig
SolutionReleaseInfo.solutionVendorInfo: Copyright © GHI Electronics, LLC
SoftwareVersion.BuildDate: Nov 29 2012
SoftwareVersion.CompilerVersion: 410462
FloatingPoint: True
SourceLevelDebugging: True
ThreadCreateEx: True
LCD.Width: 320
LCD.Height: 240
LCD.BitsPerPixel: 16
AppDomains: True
ExceptionFilters: True
IncrementalDeployment: True
SoftReboot: True
Profiling: False
ProfilingAllocations: False
ProfilingCalls: False
IsUnknown: False

The current firmware in the SDK is at v4.2.9.0. Could you please try that and let us know if you still see the issue?

Ok, I will try. Is there any way to simulate also media keys like volume increment, volume decrement and mute?

There is not currently support for those keys. For a list of all supported keys, check out

Emulated keyboard responds with stall to SetAddres Usb Standard Request during platform restart. I am currently not able to enter Bios by pressing F2 via emulated keyboard, during platform boot.

To reproduce:

  • start Usb keyboard emulation
  • restart Windows

My current firmware version:

There is also another issue. I am trying to implement multimedia keyboard. According to Microsoft ( such device should contain two interfaces. First interface should declare Hid descriptor for a standard keyboard and the second interface should declare Hid descriptor for multimedia keys:

[quote] The following design guidelines are recommended for keyboard manufacturers developing new USB/HID keyboards with enhanced features:
-Implement at least two HID interfaces in a USB composite device fashion, where one interface is used for a standard QWERTY keyboard report that’s identical to the keyboard boot protocol report, and the other interface is used for the new, enhanced functionality. [/quote]

Currenty the Host PC receives STALL in reponse to GetReportDescriptor request with wIndex set to 1 (host tries to get the second report descriptor). Fez Fw responds correctly for a GetReportDescriptor request with wIndex set to 0. I have attached an image with the part of the USB traffic captured via beagle analyzer (

@ pgierasi - Media keyboard would not be supported by default.You can try to implement it directly or hire GHI to work on it.

This is a good example to start with C:\Users\Gus Issa\Documents\Microsoft .NET Micro Framework 4.2\Samples\Mouse

If interested in GHI’s consulting service then please contact us directly (phone/email) with your project details please.

I have already started to implement it but it seems that I can’t force the Fez Fw to respond to GetReportDescriptor when wIndex is set to 1. Is there any way to set the response for a request on Default Control Endpoint?

I am not exactly sure as those libs are part of the core NETMF, not GHI specific. The NETMF website/codeplex may have more info.

I am using the USBC_Device class from the GHI.Premium.USBClient.dll.