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
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
Offset
|
Field
|
Size
|
Value
|
Description
|
0
| EEM Command |
2
|
8014
| EEM Command specified ECHO DATA with payload of 20 bytes. |
2
| bGUID |
16
|
16 byte GUID
| 0x23, 0x57, 0x1b, 0x05, 0xfd, 0x18, 0x45, 0x81,0x93, 0x62, 0xa1, 0x6c, 0xee, 0xfc, 0xcc, 0xdf |
18
| bmFlags |
2
|
bitmask
| D2: use CRC, D1: multi-datagrams supported, D0: confirmed |
20
| bMaxTransferSize |
2
|
integer
| Maximum number of bytes per transfer, must be a multiple of of the endpoint packetsize. |
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