Teensy keyboard not working in WinPE

Greetings,
I've attempted to make a HID automation device using a Teensy 3.2. It is aimed to be used in the Microsoft WinPE OS. This would allow myself to automate keyboard presses there. However, it is not working. I find this confusing as I've made another HID device using the Teensy LC which works great in the BIOS with lesser supoort on the computing side of things... I'm surprised to find both don't work in WinPE.

I was curious if anyone else has had success or any advice in regards?
 
Maybe try editing usb_desc.h. Look for this:

Code:
#elif defined(USB_KEYBOARDONLY)
  #define VENDOR_ID             0x16C0
  #define PRODUCT_ID            0x04D0
  #define MANUFACTURER_NAME     {'T','e','e','n','s','y','d','u','i','n','o'}
  #define MANUFACTURER_NAME_LEN 11
  #define PRODUCT_NAME          {'K','e','y','b','o','a','r','d'}
  #define PRODUCT_NAME_LEN      8
  #define EP0_SIZE              64
  #define NUM_ENDPOINTS         4
  #define NUM_USB_BUFFERS       14
  #define NUM_INTERFACE         3
  #define SEREMU_INTERFACE      1       // Serial emulation
  #define SEREMU_TX_ENDPOINT    1
  #define SEREMU_TX_SIZE        64
  #define SEREMU_TX_INTERVAL    1
  #define SEREMU_RX_ENDPOINT    2
  #define SEREMU_RX_SIZE        32
  #define SEREMU_RX_INTERVAL    2
  #define KEYBOARD_INTERFACE    0       // Keyboard
  #define KEYBOARD_ENDPOINT     3
  #define KEYBOARD_SIZE         8
  #define KEYBOARD_INTERVAL     1
  #define KEYMEDIA_INTERFACE    2       // Keyboard Media Keys
  #define KEYMEDIA_ENDPOINT     4
  #define KEYMEDIA_SIZE         8
  #define KEYMEDIA_INTERVAL     4
  #define ENDPOINT1_CONFIG      ENDPOINT_TRANSIMIT_ONLY
  #define ENDPOINT2_CONFIG      ENDPOINT_RECEIVE_ONLY
  #define ENDPOINT3_CONFIG      ENDPOINT_TRANSIMIT_ONLY
  #define ENDPOINT4_CONFIG      ENDPOINT_TRANSIMIT_ONLY
  #define ENDPOINT5_CONFIG      ENDPOINT_TRANSIMIT_ONLY
  #define ENDPOINT6_CONFIG      ENDPOINT_TRANSIMIT_ONLY

Maybe delete all the SEREMU stuff and change NUM_INTERFACE from 3 to only 2. Also renumber KEYMEDIA_INTERFACE from 2 to 1.

That should give you a USB device that looks exactly like a "normal" USB keyboard. Yes, they do all have a separate interface & endpoint for media keys, do to other silly Microsoft limitations...
 
Maybe try editing usb_desc.h. Look for this:

Maybe delete all the SEREMU stuff and change NUM_INTERFACE from 3 to only 2. Also renumber KEYMEDIA_INTERFACE from 2 to 1.

That should give you a USB device that looks exactly like a "normal" USB keyboard. Yes, they do all have a separate interface & endpoint for media keys, do to other silly Microsoft limitations...

Sounds like a plan. But deleting the SEREMU stuff causes an error. Copy paste failed me. But it referenced Serial.available() in yield.cpp.
 
Back
Top