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 | 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 | 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 |
| 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.
| 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 |
| 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 |
| Mouse | Stock | Medius | Result |
|---|---|---|---|
| 500 Hz mouse | 287 | 2 | Medius |
| Mouse | Stock | Medius | Result |
|---|---|---|---|
| 500 Hz mouse | 105 | 0 | Medius |
| 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).
| 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 | StockStock defect |
| 250 Hz mouse | 1.22-1.35 ms | 2.52 ms | StockStock defect |
| 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 | StockStock defect |
| 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 | StockStock defect |
| 250 Hz mouse | 1.90-2.03 ms | 4.31-4.32 ms | StockStock defect |
| 125 Hz mouse | 2.00-2.04 ms | 8.11-8.12 ms | StockStock defect |
| 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 | StockStock defect |
| 250 Hz mouse | 2.15-2.18 ms | 4.48 ms | StockStock defect |
| 125 Hz mouse | 2.17-2.20 ms | 8.43 ms | StockStock defect |
| Mouse | Stock | Medius | Result |
|---|---|---|---|
| 1 kHz mouse | 370-381 µs | 501-502 µs | Stock |
| 500 Hz mouse | 335-340 µs | 487-504 µs | StockStock defect |
| 250 Hz mouse | 318-326 µs | 502-514 µs | StockStock defect |
| 125 Hz mouse | 328-492 µs | 499-510 µs | StockStock defect |
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.
Stock km.moveMedius MOVE
| Load | Stockkm.move | MediusMOVE | Result |
|---|---|---|---|
| Injecting 1,000 moves/s | 7,133-7,201 | 15,540-15,584 | MediusStock defect |
Stock km.moveMedius MOVE
| Moves sent | Stockkm.move | MediusMOVE | 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 |
Stock km.moveMedius MOVE
| Moves sent | Stockkm.move | MediusMOVE | 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 |
Stock km.moveMedius MOVE
| Mouse | Stockkm.move | MediusMOVE | 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 |
| 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.
| 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 | MediusStock defect |
| Keyboard LED report | Passed on | Passed on | Equal |
| 20 HID output reports | Passed on | Passed on | Equal |
| 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.
| 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.
| Pad | Stock | Medius | Result |
|---|---|---|---|
| Xbox 360 pad (XInput) | Unchanged | Unchanged | Equal |
| Xbox One pad (GIP) | Unchanged | Unchanged | Equal |
| HID pad | Unchanged | Unchanged | Equal |
| 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 |