<!-- Source: https://medius.k4tech.net/comparison/devices -->
# Devices

Which devices each box clones, how faithful each clone is, and whether native data reaches the PC.

## 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

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| Three mice with a 1 ms interval8-bit and 16-bit axes, and a mouse and keyboard in one | All data arrives | All data arrives | Equal |
| Boot keyboard | All data arrives | All data arrives | Equal |
| Mouse with a second, streaming HID interface | All data arrives | All data arrives | Equal |
| Three unusual HID interfacesAlternate settings, a 64-byte endpoint, the HID descriptor after the endpoint | All data arrives | All data arrives | Equal |
| Two unusual interface layoutsA gap in the interface numbers, numbering from 1 | All data arrives | All data arrives | Equal |
| Four devices slow to give their report descriptor450 or 700 ms late, or refused | All data arrives | All data arrives | Equal |
| Two mice, with and without a device qualifier | All data arrives | All data arrives | Equal |
| Five mice with an 8 or 10 ms intervalIncluding a two-mouse device and a mouse with two configurations | All data arrives | All data arrives | Equal |
| Mouse with a 1,500-byte report descriptor | An interface sends nothing | All data arrives | Medius |
| Wooting 60HE+ | An interface sends nothing | Not cloned | Medius |
| Mouse with a vendor interface, six IN endpoints | An interface sends nothing | Not cloned | Medius |
| Mouse claiming a 3,000-byte report descriptorIt sends 50 bytes, which the PC pads to 3,000 with zeros | All data arrives | Not cloned | Stock |
| Mouse with an unused second configuration | All data arrives | Not cloned | Stock |
| Mouse with a vendor interface of nine settings | All data arrives | All data arrives | Equal |
| Mouse with an 8-byte endpoint 0 | All data arrives | All data arrives | Equal |
| Mouse with a 16-byte endpoint 0 | All data arrives | All data arrives | Equal |
| Mouse with a 32-byte endpoint 0 | All data arrives | All data arrives | Equal |
| Mouse with name and serial strings | All data arrives | All data arrives | Equal |
| HID interface numbered 200 beside a vendor one numbered 60 | All data arrives | All data arrives | Equal |
| Gaming mouse | All data arrives | All data arrives | Equal |
| Keyboard | All data arrives | All data arrives | Equal |
| High-speed mouse | All data arrives | All data arrives | Equal |
| Mouse that stalls its endpoint after 200 reports | All data arrives | All data arrives | Equal |

#### Clone faithfulness

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| Three mice with a 1 ms interval8-bit and 16-bit axes, and a mouse and keyboard in one | Faithful | Faithful | Equal |
| Boot keyboard | Faithful | Faithful | Equal |
| Mouse with a second, streaming HID interface | Faithful | Faithful | Equal |
| Five mice with a streaming vendor interface | Faithful | Faithful | Equal |
| Six unusual HID interfacesAlternate settings, a 64-byte endpoint, two IN endpoints, OUT only, the HID descriptor after the endpoint, a physical descriptor first | Faithful | Faithful | Equal |
| Four unusual interface layoutsAn alternate setting, a gap in the interface numbers, numbering from 1, ten interfaces | Faithful | Faithful | Equal |
| Four devices slow to give their report descriptor450 or 700 ms late, or refused | Faithful | Faithful | Equal |
| XInput pad and a USB serial device | Faithful | Faithful | Equal |
| Two mice, with and without a device qualifier | Faithful | Faithful | Equal |
| Five mice with an 8 or 10 ms intervalIncluding a two-mouse device and a mouse with two configurations | Imperfect | Faithful | Medius[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| Device with a second control endpoint | Imperfect | Faithful | Medius |
| Mouse with a 1,500-byte report descriptor | Imperfect | Faithful | Medius |
| Mouse with an 8-byte endpoint 0 | Faithful | Faithful | Equal |
| Mouse with a 16-byte endpoint 0 | Faithful | Faithful | Equal |
| Mouse with a 32-byte endpoint 0 | Faithful | Faithful | Equal |
| Mouse with name and serial strings | Faithful | Faithful | Equal |
| Mouse with a vendor interface of nine settings | Faithful | Faithful | Equal |
| Vendor interface numbered 12 | Faithful | Faithful | Equal |
| HID interface numbered 200 beside a vendor one numbered 60 | Faithful | Faithful | Equal |

#### Time from device appearing to clone configured, min to max

| Devices | Stock | Medius | Result |
| --- | --- | --- | --- |
| The 44 devices both boxes clone | 0.68-1.50 s | 0.78-2.40 s | Equal |

## Poll interval

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

#### Interval the PC polls at

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| Four mice with a 10 ms intervalIncluding a two-mouse device and a mouse with two configurations | 1 ms | Native interval | Medius[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| Mouse with an 8 ms interval | 1 ms | Native interval | Medius[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| Mouse with a 4 ms interval | 1 ms | Native interval | Medius[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| Mouse with a 2 ms interval | 1 ms | Native interval | Medius[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| Mouse with a 10 ms interval and a 1,500-byte report descriptor | Native interval | Native interval | Equal |
| Vendor HID interface with a 4 ms interval | Native interval | Native interval | Equal |
| XInput pad with 2-64 ms intervals | Native interval | Native interval | Equal |

#### Reports/s reaching the PC

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| Mouse reporting every 1 ms with a 10 ms intervalNative rate: 125/s | Above native rate | Native rate | Medius[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| Mouse reporting every 8 ms with an 8 ms interval | Native rate | Native rate | Equal |

#### Interval the clone declares for a high-speed mouse

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| 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 ms | 1 ms | Native bInterval 4 | Differs |

## 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

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| Wooting 60HE+ | An interface sends nothing | All data arrives | Medius |
| Mouse claiming a 3,000-byte report descriptorIt sends 50 bytes, which the PC pads to 3,000 with zeros | All data arrives | All data arrives | Equal |
| Mouse with an unused second configuration | All data arrives | All data arrives | Equal |

#### Clone faithfulness

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| Vendor interface with an isochronous endpoint | Faithful | Faithful | Equal |
| Two devices with a bulk endpoint | Faithful | Faithful | Equal |
| Mouse with a vendor interface, five IN endpoints | Faithful | Faithful | Equal |
| Mouse with a vendor interface, six IN endpoints | Imperfect | Faithful | Medius |
| Wooting 60HE+ | Faithful | Faithful | Equal |
| Mouse claiming a 3,000-byte report descriptorIt sends 50 bytes, which the PC pads to 3,000 with zeros | Faithful | Faithful | Equal |
| Mouse with an unused second configuration | Imperfect | Faithful | Medius |

## 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

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| Vendor interrupt IN | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor IN numbered 0x84 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor IN numbered 0x85 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor IN numbered 0x86 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor IN numbered 0x87 | An endpoint sends nothing | Not cloned | Medius |
| Vendor IN in an alternate setting | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| CDC notification endpoint | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| HID interface with two INs | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor bulk IN numbered 0x85 | Every endpoint at the native rate | Not cloned | Stock |
| HID interface with a bulk IN | Every endpoint at the native rate | Not cloned | Stock |
| Vendor bulk pair | Every endpoint at the native rate | Not cloned | Stock |
| HID IN declaring 65 bytes | An endpoint sends nothing | Not cloned | Medius |
| Two high-numbered INs beside a mouse | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Mouse with a vendor interface, five INs | An endpoint sends nothing | Not cloned | Medius |
| Mouse with a vendor interface, six INs | An endpoint sends nothing | Not cloned | Medius |
| Ten interfaces | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor interface numbered 12 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| XInput pad, four INs | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Wooting 60HE+, five INs | An endpoint sends nothing | Not cloned | Medius |

#### Endpoints delivering, Medius with imperfect clones on

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| Vendor interrupt IN | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor IN numbered 0x84 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor IN numbered 0x85 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor IN numbered 0x86 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor IN numbered 0x87 | An endpoint sends nothing | Not cloned | Medius |
| Vendor IN in an alternate setting | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| CDC notification endpoint | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| HID interface with two INs | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor bulk IN numbered 0x85 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| HID interface with a bulk IN | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor bulk pair | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| HID IN declaring 65 bytes | An endpoint sends nothing | Not cloned | Medius |
| Two high-numbered INs beside a mouse | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Mouse with a vendor interface, five INs | An endpoint sends nothing | Every endpoint at the native rate | Medius |
| Mouse with a vendor interface, six INs | An endpoint sends nothing | Every endpoint at the native rate | Medius |
| Ten interfaces | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Vendor interface numbered 12 | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| XInput pad, four INs | Every endpoint at the native rate | Every endpoint at the native rate | Equal |
| Wooting 60HE+, five INs | An endpoint sends nothing | Every endpoint at the native rate | Medius |

## Large report descriptors

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

#### HID driver on the PC

| Report descriptor | Stock | Medius | Result |
| --- | --- | --- | --- |
| 256 or 512 bytes | Loads | Loads | Equal |
| 513-700 bytes | Doesn't load | Loads | Medius |
| 768-2,047 bytes | Doesn't load | Loads | Medius[Stock defect](/comparison/defect-devices-stock-report-over-512.md) |

## 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

| Request | Stock | Medius | Result |
| --- | --- | --- | --- |
| Device descriptor | Native reply | Native reply | Equal |
| Configuration descriptor | Native reply | Native reply | Equal |
| String descriptors | Native reply | Native reply | Equal |
| Descriptors the real device doesn't have | Native reply | Native reply | Equal |
| HID report descriptor | Native reply | Native reply | Equal |
| HID class descriptor | STALL | Native reply | Medius[Stock defect](/comparison/defect-devices-stock-hid-descriptor-stall.md) |
| GET\_STATUS, GET\_CONFIGURATION and GET\_INTERFACE | Native reply | Native reply | Equal |
| Feature report 3 | Native reply | Native reply | Equal |
| Vendor requests | Native reply | Native reply | Equal |

#### Reply time on the bus

| Request | Stock | Medius |
| --- | --- | --- |
| Device descriptor | 597-610 µs | 123 µs |
| Configuration descriptorAll 34 bytes | 772-787 µs | 160 µs |
| Product string | 634-636 µs | 161-162 µs |
| HID report descriptor | 794 µs | 208-210 µs |
| String the real device doesn't have | 556-570 µs | 378-381 µs |
| GET\_STATUS | 574 µs | 122-123 µs |
| Feature report 3 | 575-577 µs | 344-345 µs |
| Vendor request 0x42 | 598-599 µs | 462-464 µs |
