Cloned devices

Both boxes got the same 57 emulated devices, one box at a time behind one hub. Medius had imperfect clones off, as it ships.

Native data reaching the PC
DeviceStockMediusResult
Three mice with a 1 ms interval8-bit and 16-bit axes, and a mouse and keyboard in oneAll data arrivesAll data arrivesEqual
Boot keyboardAll data arrivesAll data arrivesEqual
Mouse with a second, streaming HID interfaceAll data arrivesAll data arrivesEqual
Three unusual HID interfacesAlternate settings, a 64-byte endpoint, the HID descriptor after the endpointAll data arrivesAll data arrivesEqual
Two unusual interface layoutsA gap in the interface numbers, numbering from 1All data arrivesAll data arrivesEqual
Four devices slow to give their report descriptor450 or 700 ms late, or refusedAll data arrivesAll data arrivesEqual
Two mice, with and without a device qualifierAll data arrivesAll data arrivesEqual
Five mice with an 8 or 10 ms intervalIncluding a two-mouse device and a mouse with two configurationsAll data arrivesAll data arrivesEqual
Mouse with a 1,500-byte report descriptorAn interface sends nothingAll data arrivesMedius
Wooting 60HE+An interface sends nothingNot clonedMedius
Mouse with a vendor interface, six IN endpointsAn interface sends nothingNot clonedMedius
Mouse claiming a 3,000-byte report descriptorIt sends 50 bytes, which the PC pads to 3,000 with zerosAll data arrivesNot clonedStock
Mouse with an unused second configurationAll data arrivesNot clonedStock
Mouse with a vendor interface of nine settingsAll data arrivesAll data arrivesEqual
Mouse with an 8-byte endpoint 0All data arrivesAll data arrivesEqual
Mouse with a 16-byte endpoint 0All data arrivesAll data arrivesEqual
Mouse with a 32-byte endpoint 0All data arrivesAll data arrivesEqual
Mouse with name and serial stringsAll data arrivesAll data arrivesEqual
HID interface numbered 200 beside a vendor one numbered 60All data arrivesAll data arrivesEqual
Gaming mouseAll data arrivesAll data arrivesEqual
KeyboardAll data arrivesAll data arrivesEqual
High-speed mouseAll data arrivesAll data arrivesEqual
Mouse that stalls its endpoint after 200 reportsAll data arrivesAll data arrivesEqual
Clone faithfulness
DeviceStockMediusResult
Three mice with a 1 ms interval8-bit and 16-bit axes, and a mouse and keyboard in oneFaithfulFaithfulEqual
Boot keyboardFaithfulFaithfulEqual
Mouse with a second, streaming HID interfaceFaithfulFaithfulEqual
Five mice with a streaming vendor interfaceFaithfulFaithfulEqual
Six unusual HID interfacesAlternate settings, a 64-byte endpoint, two IN endpoints, OUT only, the HID descriptor after the endpoint, a physical descriptor firstFaithfulFaithfulEqual
Four unusual interface layoutsAn alternate setting, a gap in the interface numbers, numbering from 1, ten interfacesFaithfulFaithfulEqual
Four devices slow to give their report descriptor450 or 700 ms late, or refusedFaithfulFaithfulEqual
XInput pad and a USB serial deviceFaithfulFaithfulEqual
Two mice, with and without a device qualifierFaithfulFaithfulEqual
Five mice with an 8 or 10 ms intervalIncluding a two-mouse device and a mouse with two configurationsImperfectFaithfulMediusStock defect
Device with a second control endpointImperfectFaithfulMedius
Mouse with a 1,500-byte report descriptorImperfectFaithfulMedius
Mouse with an 8-byte endpoint 0FaithfulFaithfulEqual
Mouse with a 16-byte endpoint 0FaithfulFaithfulEqual
Mouse with a 32-byte endpoint 0FaithfulFaithfulEqual
Mouse with name and serial stringsFaithfulFaithfulEqual
Mouse with a vendor interface of nine settingsFaithfulFaithfulEqual
Vendor interface numbered 12FaithfulFaithfulEqual
HID interface numbered 200 beside a vendor one numbered 60FaithfulFaithfulEqual
Time from device appearing to clone configured, min to max
DevicesStockMediusResult
The 44 devices both boxes clone0.68-1.50 s0.78-2.40 sEqual

Poll interval

How often the PC polls each clone, against the native interval.

Interval the PC polls at
DeviceStockMediusResult
Four mice with a 10 ms intervalIncluding a two-mouse device and a mouse with two configurations1 msNative intervalMediusStock defect
Mouse with an 8 ms interval1 msNative intervalMediusStock defect
Mouse with a 4 ms interval1 msNative intervalMediusStock defect
Mouse with a 2 ms interval1 msNative intervalMediusStock defect
Mouse with a 10 ms interval and a 1,500-byte report descriptorNative intervalNative intervalEqual
Vendor HID interface with a 4 ms intervalNative intervalNative intervalEqual
XInput pad with 2-64 ms intervalsNative intervalNative intervalEqual
Reports/s reaching the PC
DeviceStockMediusResult
Mouse reporting every 1 ms with a 10 ms intervalNative rate: 125/sAbove native rateNative rateMediusStock defect
Mouse reporting every 8 ms with an 8 ms intervalNative rateNative rateEqual
Interval the clone declares for a high-speed mouse
DeviceStockMediusResult
High-speed mouse declaring bInterval 4 (1 ms at high speed)Both clones run at full speed, where the PC reads bInterval 4 as 4 ms1 msNative bInterval 4Differs

Medius with imperfect clones on

The devices Medius refuses as it ships, given to it again with imperfect clones on. Stock has no such setting, so its column repeats the results above.

Native data reaching the PC
DeviceStockMediusResult
Wooting 60HE+An interface sends nothingAll data arrivesMedius
Mouse claiming a 3,000-byte report descriptorIt sends 50 bytes, which the PC pads to 3,000 with zerosAll data arrivesAll data arrivesEqual
Mouse with an unused second configurationAll data arrivesAll data arrivesEqual
Clone faithfulness
DeviceStockMediusResult
Vendor interface with an isochronous endpointFaithfulFaithfulEqual
Two devices with a bulk endpointFaithfulFaithfulEqual
Mouse with a vendor interface, five IN endpointsFaithfulFaithfulEqual
Mouse with a vendor interface, six IN endpointsImperfectFaithfulMedius
Wooting 60HE+FaithfulFaithfulEqual
Mouse claiming a 3,000-byte report descriptorIt sends 50 bytes, which the PC pads to 3,000 with zerosFaithfulFaithfulEqual
Mouse with an unused second configurationImperfectFaithfulMedius

Data through every endpoint

Each device streams a counter on every IN endpoint in turn, at its declared rate. The PC reads each endpoint through usbfs with eight transfers queued. A cloned endpoint delivering <95% of the native rate counts as sending nothing. Medius as it ships, imperfect clones off.

Endpoints delivering
DeviceStockMediusResult
Vendor interrupt INEvery endpoint at the native rateEvery endpoint at the native rateEqual
Vendor IN numbered 0x84Every endpoint at the native rateEvery endpoint at the native rateEqual
Vendor IN numbered 0x85Every endpoint at the native rateEvery endpoint at the native rateEqual
Vendor IN numbered 0x86Every endpoint at the native rateEvery endpoint at the native rateEqual
Vendor IN numbered 0x87An endpoint sends nothingNot clonedMedius
Vendor IN in an alternate settingEvery endpoint at the native rateEvery endpoint at the native rateEqual
CDC notification endpointEvery endpoint at the native rateEvery endpoint at the native rateEqual
HID interface with two INsEvery endpoint at the native rateEvery endpoint at the native rateEqual
Vendor bulk IN numbered 0x85Every endpoint at the native rateNot clonedStock
HID interface with a bulk INEvery endpoint at the native rateNot clonedStock
Vendor bulk pairEvery endpoint at the native rateNot clonedStock
HID IN declaring 65 bytesAn endpoint sends nothingNot clonedMedius
Two high-numbered INs beside a mouseEvery endpoint at the native rateEvery endpoint at the native rateEqual
Mouse with a vendor interface, five INsAn endpoint sends nothingNot clonedMedius
Mouse with a vendor interface, six INsAn endpoint sends nothingNot clonedMedius
Ten interfacesEvery endpoint at the native rateEvery endpoint at the native rateEqual
Vendor interface numbered 12Every endpoint at the native rateEvery endpoint at the native rateEqual
XInput pad, four INsEvery endpoint at the native rateEvery endpoint at the native rateEqual
Wooting 60HE+, five INsAn endpoint sends nothingNot clonedMedius
Endpoints delivering, Medius with imperfect clones on
DeviceStockMediusResult
Vendor interrupt INEvery endpoint at the native rateEvery endpoint at the native rateEqual
Vendor IN numbered 0x84Every endpoint at the native rateEvery endpoint at the native rateEqual
Vendor IN numbered 0x85Every endpoint at the native rateEvery endpoint at the native rateEqual
Vendor IN numbered 0x86Every endpoint at the native rateEvery endpoint at the native rateEqual
Vendor IN numbered 0x87An endpoint sends nothingNot clonedMedius
Vendor IN in an alternate settingEvery endpoint at the native rateEvery endpoint at the native rateEqual
CDC notification endpointEvery endpoint at the native rateEvery endpoint at the native rateEqual
HID interface with two INsEvery endpoint at the native rateEvery endpoint at the native rateEqual
Vendor bulk IN numbered 0x85Every endpoint at the native rateEvery endpoint at the native rateEqual
HID interface with a bulk INEvery endpoint at the native rateEvery endpoint at the native rateEqual
Vendor bulk pairEvery endpoint at the native rateEvery endpoint at the native rateEqual
HID IN declaring 65 bytesAn endpoint sends nothingNot clonedMedius
Two high-numbered INs beside a mouseEvery endpoint at the native rateEvery endpoint at the native rateEqual
Mouse with a vendor interface, five INsAn endpoint sends nothingEvery endpoint at the native rateMedius
Mouse with a vendor interface, six INsAn endpoint sends nothingEvery endpoint at the native rateMedius
Ten interfacesEvery endpoint at the native rateEvery endpoint at the native rateEqual
Vendor interface numbered 12Every endpoint at the native rateEvery endpoint at the native rateEqual
XInput pad, four INsEvery endpoint at the native rateEvery endpoint at the native rateEqual
Wooting 60HE+, five INsAn endpoint sends nothingEvery endpoint at the native rateMedius

Large report descriptors

A mouse with its report descriptor padded to 256-2,047 bytes.

HID driver on the PC
Report descriptorStockMediusResult
256 or 512 bytesLoadsLoadsEqual
513-700 bytesDoesn't loadLoadsMedius
768-2,047 bytesDoesn't loadLoadsMediusStock defect

Endpoint 0 replies

The PC sent standard, class and vendor requests to each clone, and each reply was checked against the native reply. Reply times aren't ranked: a faithful clone matches the native reply time, which isn't measured.

Reply the PC gets
RequestStockMediusResult
Device descriptorNative replyNative replyEqual
Configuration descriptorNative replyNative replyEqual
String descriptorsNative replyNative replyEqual
Descriptors the real device doesn't haveNative replyNative replyEqual
HID report descriptorNative replyNative replyEqual
HID class descriptorSTALLNative replyMediusStock defect
GET_STATUS, GET_CONFIGURATION and GET_INTERFACENative replyNative replyEqual
Feature report 3Native replyNative replyEqual
Vendor requestsNative replyNative replyEqual
Reply time on the bus
RequestStockMedius
Device descriptor597-610 µs123 µs
Configuration descriptorAll 34 bytes772-787 µs160 µs
Product string634-636 µs161-162 µs
HID report descriptor794 µs208-210 µs
String the real device doesn't have556-570 µs378-381 µs
GET_STATUS574 µs122-123 µs
Feature report 3575-577 µs344-345 µs
Vendor request 0x42598-599 µs462-464 µs