Belcarra EEM Configuration Extension Descriptor

The CDC-EEM protocol is capable of aggregating multiple network datagrams into a single Bulk Data transfer.

The standard does not implement a mechanism to allow the host and device to determine an appropriate size for Bulk transfers. While implementing EEM without this information is possible, it complicates the implementation. If the Host and Device know what the capabilities of the other end are (WRT to transfer size especially) then the driver implementations can be significantly simpler and easier to implement.

This has led to many implementations only allowing for a maximum of 1536 byte transfers (based on Ethernet MTU of 1510 bytes.) and a single datagram per transfer. Other implementations require administrative configuration to configure one or more of the operating parameters.

The result is that the only safe configuration that can support unknown hosts or devices is:
  •  CRC - disabled
  •  bMaxDatagrams - 1
  •  bMaxTransferSize - 1536
This extension described herein can be used by an EEM Class driver on the host to send configuration data to the device and receive configuration data from the device. The EEM Configuration Extension Descriptor is sent to the device as Echo Data command data.

If the device is non-conforming (does not support this extension), it will either ignore or send the command back unchanged (specifically the D0 flag of the bmFlags field will remain reset.) In this case the host will continue to use the default configuration.

Conforming devices will send the command back, but will fill in the configuration fields. If the device receives this command it can assume that the host will use the information to operate with. Otherwise they will operate with the default configuration. Conforming devices MUST SET the D0 bit of the bmFlags field to indicate that they have recognized this configuration request and are responding with valid values.

EEM Configuration Extension Descriptor
EEM Command
EEM Command specified ECHO DATA with payload of 20 bytes.
16 byte GUID
0x23, 0x57, 0x1b, 0x05, 0xfd, 0x18, 0x45, 0x81,0x93, 0x62, 0xa1, 0x6c, 0xee, 0xfc, 0xcc, 0xdf
D2: use CRC, D1: multi-datagrams supported, D0: confirmed
Maximum number of bytes per transfer, must be a multiple of of the endpoint packetsize.

EEM Command - this is an EEM Echo Data command with a payload length of 20 bytes.

bmFlags - if the host supports CRC it will set the D2 bit. The device can return the flag set if it wants to support CRC or reset it to tell the host not to use CRC. The D1 bit is set if the host supports receiving transfers with multiple datagrams. The device must set or reset the D1 bit to show its support for multiple datagrams. The host must send the D0 bit reset. The device will always set the D0 bit to indicate that it recognized and is using the configuration data.
  • D0 - Confirmed - set if device recognized this request and is responding with valid data
  • D1 - Multiple Datagrams Supported - multiple datagrams per EEM Bulk transfer allowed
  • D2 - CRC is supported
bMaxTransferSize - the host will send the maximum number of bytes (must be a multiple of the endpoint packet size) in any IN transfer. The device will send the size it will support for any OUT transfer.