Control Channel Characteristics

The Control channel for the device is its USB Control endpoint. A control message from the host to the device is sent as a SEND_ENCAPSULATED_COMMAND transfer. This transfer is defined in the following table.

BmRequestType bRequest wValue wIndex wLength Data

0x21

0x00

0x0000

bInterfaceNumber field of Communication Class interface descriptor

Byte length of control message block

Control message block

The host does not continuously poll the USB Control endpoint for input control messages. Upon placing a control message on its Control endpoint, the device must return a notification on the Communication Class interface's Interrupt IN endpoint, which is polled by the host whenever the device can return control messages. The transfer from the device's interrupt IN endpoint to the host is a standard USB Interrupt IN transfer. The only defined device notification is the RESPONSE_AVAILABLE notification, defined in the following table.

Offset (bytes) Length (bytes) Field Data

0

4

Notification

RESPONSE_AVAILABLE (0x00000001)

4

4

Reserved

0

Upon receiving the RESPONSE_AVAILABLE notification, the host reads the control message from the Control endpoint using a GET_ENCAPSULATED_RESPONSE transfer, defined in the following table.

bmRequestType bRequest wValue wIndex wLength Data

0xA1

0x01

0x0000

bInterfaceNumber field of Communication Class interface descriptor

0x0400 (this is the minimum byte length of the buffer posted by host)

Control message block

If for some reason the device receives a GET_ENCAPSULATED_RESPONSE and is unable to respond with a valid data on the Control endpoint, then it should return a one-byte packet set to 0x00, rather than stalling the Control endpoint.