<!-- Source: https://medius.k4tech.net/comparison/passthrough -->
# Passthrough

Native reports relayed through each box, and the traffic between the PC and the real device.

## Relayed reports

Each box relayed mice and keyboards at several report rates, 15 s each, with every report numbered.

#### Mouse reports reaching the PC

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz mouse | All, once, in order | All, once, in order | Equal |
| 500 Hz mouse | All, once, in order | All, once, in order | Equal |
| 250 Hz mouse | All, once, in order | All, once, in order | Equal |
| 125 Hz mouse | All, once, in order | All, once, in order | Equal |
| Mouse in bursts of 7 reports | All, once, in order | All, once, in order | Equal |
| 500 Hz mouse for 2 minutes | All, once, in order | All, once, in order | Equal |

#### Keyboard reports reaching the PC

| Keyboard | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz keyboard | All, once, in order | All, once, in order | Equal |
| 125 Hz keyboard | All, once, in order | All, once, in order | Equal |
| Keyboard in bursts of 7 reports | All, once, in order | All, once, in order | Equal |

#### Report bytes reaching the PC

| Device | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz mouse | Unchanged | Unchanged | Equal |
| 500 Hz mouse | Unchanged | Unchanged | Equal |
| 250 Hz mouse | Unchanged | Unchanged | Equal |
| 125 Hz mouse | Unchanged | Unchanged | Equal |
| Mouse in bursts of 7 reports | Unchanged | Unchanged | Equal |
| 1 kHz keyboard | Unchanged | Unchanged | Equal |
| 125 Hz keyboard | Unchanged | Unchanged | Equal |
| Keyboard in bursts of 7 reports | Unchanged | Unchanged | Equal |

## Report timing

The relay runs above, timed on the PC's USB bus.

#### Reports >10% early or late, in 15 s

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz mouse | 0 | 0 | Equal |
| 500 Hz mouse | 2-76 | 0 | Medius |
| 250 Hz mouse | 0-20 | 0 | Equal |
| 125 Hz mouse | 0-2 | 0 | Equal |

#### Gaps >1.5× the report interval, in 15 s

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz mouse | 0 | 0 | Equal |
| 500 Hz mouse | 1-24 | 0 | Medius |
| 250 Hz mouse | 0 | 0 | Equal |
| 125 Hz mouse | 0 | 0 | Equal |

#### Reports >10% early or late, in 2 minutes

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 500 Hz mouse | 287 | 2 | Medius |

#### Gaps >1.5× the report interval, in 2 minutes

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 500 Hz mouse | 105 | 0 | Medius |

#### Keyboard reports >10% early or late, in 15 s

| Keyboard | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz keyboard | 0 | 0-2 | Equal |
| 125 Hz keyboard | 0 | 0 | Equal |

## Report latency

Each native report is timed from the emulator queuing it to the PC receiving the clone's copy. The emulator runs 1,000 ppm slow, so its reports land at every point between polls. Plugged straight into a PC, a native report waits half the native interval on average (4 ms for a 125 Hz mouse).

#### Report latency, p50

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz mouse | 1.43-1.44 ms | 1.02-1.04 ms | Medius |
| 500 Hz mouse | 1.24-1.39 ms | 1.50-1.51 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| 250 Hz mouse | 1.22-1.35 ms | 2.52 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| 125 Hz mouseStock's clone declares 1 ms, the mouse 8 ms (see Poll interval) | 1.32-1.37 ms | 4.50-4.52 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |

#### Report latency, p95

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz mouse | 2.05-2.61 ms | 1.46-1.48 ms | Medius |
| 500 Hz mouse | 1.99-2.03 ms | 2.41 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| 250 Hz mouse | 1.90-2.03 ms | 4.31-4.32 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| 125 Hz mouse | 2.00-2.04 ms | 8.11-8.12 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |

#### Report latency, p99

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz mouse | 2.20-2.98 ms | 1.51-1.52 ms | Medius |
| 500 Hz mouse | 2.19-2.20 ms | 2.49 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| 250 Hz mouse | 2.15-2.18 ms | 4.48 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| 125 Hz mouse | 2.17-2.20 ms | 8.43 ms | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |

#### Report latency, fastest

| Mouse | Stock | Medius | Result |
| --- | --- | --- | --- |
| 1 kHz mouse | 370-381 µs | 501-502 µs | Stock |
| 500 Hz mouse | 335-340 µs | 487-504 µs | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| 250 Hz mouse | 318-326 µs | 502-514 µs | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |
| 125 Hz mouse | 328-492 µs | 499-510 µs | Stock[Stock defect](/comparison/defect-devices-stock-mouse-interval.md) |

## Reads while injecting

The emulated mouse sends its next report only after the box reads the last one, so the count is how often the box read the mouse. Read every millisecond, a 1 kHz mouse gives 15,500 reports in 15.5 s and 5,500 in 5.5 s.

#### Reports read from a 1 kHz mouse in about 15.5 s

Stock `km.move`Medius `MOVE`

| Load | Stock`km.move` | Medius`MOVE` | Result |
| --- | --- | --- | --- |
| Injecting 1,000 moves/s | 7,133-7,201 | 15,540-15,584 | Medius[Stock defect](/comparison/defect-pass-inject-reads.md) |

#### Reports read from a 1 kHz counting mouse in 15.5 s

Stock `km.move`Medius `MOVE`

| Moves sent | Stock`km.move` | Medius`MOVE` | Result |
| --- | --- | --- | --- |
| None | 15,500 | 15,500 | Equal |
| 1,000/s | 6,877 | 15,500 | Medius |
| 500/s | 5,238 | 15,500 | Medius |
| 125/s | 7,020 | 15,499 | Medius |

#### Reports read from a 1 kHz mouse moving at a varying speed, in 15.5 s

Stock `km.move`Medius `MOVE`

| Moves sent | Stock`km.move` | Medius`MOVE` | Result |
| --- | --- | --- | --- |
| 1,000/s | 7,180-7,227 | 15,500 | Medius |
| 500/s | 6,965-7,028 | 15,500 | Medius |
| 125/s | 7,190-7,287 | 15,500 | Medius |

#### Reports read from a 1 kHz mouse in 15.5 s, injecting 1,000 moves/s

Stock `km.move`Medius `MOVE`

| Mouse | Stock`km.move` | Medius`MOVE` | Result |
| --- | --- | --- | --- |
| Moving 1 count every report | 15,493 | 15,500 | Medius |
| Moving 100 counts every report | 15,495 | 15,500 | Medius |
| Moving 1 count, then -1, alternating | 15,496 | 15,500 | Medius |

#### Reports read from a 1 kHz mouse moving at a varying speed, in 5.5 s

| Commands sent | Stock | Medius | Result |
| --- | --- | --- | --- |
| 10 moves/s | 3,003 | 5,500 | Medius |
| 30 moves/s | 3,010 | 5,500 | Medius |
| 1,000 zero-count moves/s | 5,496 | 5,500 | Medius |
| 100 queries/s | 5,500 | 5,500 | Equal |

## PC to real device

Requests and reports the PC sent the real device, through its clone.

#### What reaches the real device

| PC sends | Stock | Medius | Result |
| --- | --- | --- | --- |
| SET\_PROTOCOL(boot) | Passed on | Passed on | Equal |
| Endpoint halt, then clear | Passed on | Passed on | Equal |
| Switch to alternate setting 1, then back | Passed on | Passed on | Equal |
| Switch to configuration 2, then back | Clone reconnects instead | Passed on | Medius[Stock defect](/comparison/defect-pass-stock-config-reconnect.md) |
| Keyboard LED report | Passed on | Passed on | Equal |
| 20 HID output reports | Passed on | Passed on | Equal |

#### Resets the real device gets

| PC sends | Stock | Medius | Result |
| --- | --- | --- | --- |
| One bus reset | Twice | Once | Differs |
| Hub port off for 1 s | Twice | Once | Differs |

## Real device to PC

A real device stalling its endpoint, one replying to polls with empty packets, and a vendor interface streaming a counter.

#### What reaches the PC

| Native traffic | Stock | Medius | Result |
| --- | --- | --- | --- |
| A STALL on its interrupt endpoint | Reaches the PC | Reaches the PC | Equal |
| Empty packets on idle polls | Reaches the PC | Reaches the PC | Equal |
| Vendor stream at 1,000 packets/s | Reaches the PC | Reaches the PC | Equal |

## Game pads

Three emulated pads, each moving its left stick through set values for 1.5 s.

#### Stick values on the PC

| Pad | Stock | Medius | Result |
| --- | --- | --- | --- |
| Xbox 360 pad (XInput) | Unchanged | Unchanged | Equal |
| Xbox One pad (GIP) | Unchanged | Unchanged | Equal |
| HID pad | Unchanged | Unchanged | Equal |

#### PC output reaching the pad

| Pad | Stock | Medius | Result |
| --- | --- | --- | --- |
| Xbox 360 pad, LED command | Reaches the pad | Reaches the pad | Equal |
| Xbox One pad, start-up packets | Reaches the pad | Reaches the pad | Equal |
