Stock vs Medius
Stock MAKCU firmware V4.094 and Medius 3.4.6, tested the same way on two MAKCU boxes. The main results from each area are below, and each area's page has the rest.
DevicesAll results
| Test | Stock | Medius | Result |
|---|---|---|---|
| Native data reaching the PCWooting 60HE+ | An interface sends nothing | Not cloned | Medius |
| Interval the PC polls atFour mice with a 10 ms intervalIncluding a two-mouse device and a mouse with two configurations | 1 ms | Native interval | MediusStock defect |
| HID driver on the PC768-2,047 bytes | Doesn't load | Loads | MediusStock defect |
| Reply the PC getsHID class descriptor | STALL | Native reply | MediusStock defect |
PassthroughAll results
| Test | Stock | Medius | Result |
|---|---|---|---|
| Mouse reports reaching the PC1 kHz mouse | All, once, in order | All, once, in order | Equal |
| Report latency, p501 kHz mouse | 1.43-1.44 ms | 1.02-1.04 ms | Medius |
| Report latency, p50125 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 |
| Reports read from a 1 kHz mouse in about 15.5 sInjecting 1,000 moves/s | 7,133-7,201 | 15,540-15,584 | MediusStock defect |
| What reaches the real deviceSwitch to configuration 2, then back | Clone reconnects instead | Passed on | MediusStock defect |
| What reaches the PCA STALL on its interrupt endpoint | Reaches the PC | Reaches the PC | Equal |
Injected motion All results
| Test | Stock | Medius | Result |
|---|---|---|---|
| Default move latency, p50Still mouse, 1 count | 64.1 ms | 0.969-1.010 ms | Medius |
| Immediate move latency, p50Moving 125 Hz mouse, 1 count | 4.25-4.34 ms | 4.68-5.02 ms | StockStock defect |
| Default moves with their first count within 0.5 sMoving 125 Hz mouse, 1 count | 400/400 | 400/400 | Equal |
| Reports carrying only injected motionMoving 1 kHz mouse | 2,617-2,648 | 0 | Medius |
| Counts arriving within 1 s from three 10-count movesNo native report yet | 0/30 | 30/30 | MediusStock defect |
Control link All results
| Test | Stock | Medius | Result |
|---|---|---|---|
| Query round trip, p50Versionkm.version against QUERY(VERSION) | 177-184 µs | 219 µs | Stock |
| Query round trip, p50Statuskm.moving against QUERY(HEALTH) | 176-177 µs | 166 µs | Medius |
| Valid move after the malformed inputHalf a move, the valid move 100 ms later | Lost | Arrives | Medius |
| Counts moved by the malformed input5-count move with one bit flipped | 4 | 0 | Medius |
Buttons, keys and locks All results
| Test | Stock | Medius | Result |
|---|---|---|---|
| Native press after the injectionNative left held, box injects a left release | Still held | Still held | Equal |
| Native input reaching the PCX locked, box injecting Y at 1 kHz | None | None | Equal |
RecoveryAll results
| Test | Stock | Medius | Result |
|---|---|---|---|
| Left button 3 s after the program exitsPressed, then the port closed | Still held | Released | MediusStock defect |
| Replug timesUnplug to clone gone | 0.19 s | 0.45 s | Stock |
| First move after the clone is backPort off 3 s, then on | Sometimes held >1 s | Arrives at once | MediusStock defect |
| Real device while the PC sleepsMouse | Suspended | Suspended | Equal |
FeaturesAll results
| Test | Stock | Medius | Result |
|---|---|---|---|
| Absolute move on a virtual screenMoves | km.moveto | No | Stock |
| Drive the pad state the PC getsPad commands | km.controller_state | No | Stock |
| Scale motion, 0-255%Motion scaling | No | LOCK | Medius |
| Control transfer to the real deviceDevice commands | No | TRANSFER | Medius |
SoftwareAll results
| Test | Stock | Medius | Result |
|---|---|---|---|
| KMBox Net programsProgram supportMove, wheel, three buttons and keys only | Toolkit Forwarding mode | No | Stock |
| Downloads of each box's packagesPyPI, last 30 daysmakcu, pymakcu and makxd against medius | 3,854 | 1,106 | Stock |
| MembersDiscord | 28,413 | 600 | Stock |
| Previous build kept as a fallbackUpdates | No | Bootloader rollback | Medius |
Defects
| Box | Defect | Section |
|---|---|---|
| Stock | Report descriptors >512 bytes aren't served, so the PC's HID driver doesn't load for that interface. | Large report descriptors |
| Stock | The PC's request for the HID class descriptor gets a STALL instead of the native reply. | Endpoint 0 replies |
| Stock | While injecting, even at 10 moves/s, stock reads a 1 kHz mouse whose speed varies only ~430-500 times/s. | Reads while injecting |
| Stock | A move or click sent to a new clone is lost until the real device sends its first report (0/3 tries arrived within 1 s). | Move into a new clone |
| Stock | After the PC turns the clone's port off and on, the first injected move waits for the next native report: >1 s in 6/10 tries with a mouse reporting every 2 s. | PC restart |
| Stock | If a program closes the port while holding a button, the button stays held until another program releases it or the box restarts. | Program exit |
| Stock | Default moves at 1,000/s into a moving 1 kHz mouse lose counts: 10/15,000 and 13/15,000 in two runs. | Counts arriving |
| Stock | When the PC switches the clone's configuration, stock reconnects the clone instead of relaying the switch to the real device (3/3 tries). | PC to real device |
| Stock | Moves written in a burst (30 binary moves in one write, 32 per write every 16 ms, or back to back) lose commands, and every later command then runs one command late until a power cycle. | Moves in one write |
| Stock | Neither an injected move nor the real device's remote wakeup wakes a sleeping PC. | PC sleep |
| Stock | Mouse clones declare a 1 ms poll interval even when the mouse declares 2-10 ms (a 125 Hz mouse's clone is polled at 1 kHz). Stock's lower latency below 1 kHz comes from this. | Poll interval |
| Medius | None found |