Move
MOVE drives a relative Axis, picked by a motion byte: the cursor pair (X and Y together), the wheel, or AC Pan (horizontal scroll). It adds to native motion, so the emitted report carries both. Fire-and-forget.
The momentary inputs (buttons, keys, media) use INJECT.
MOVERelative axis injection
MOVE shifts an axis by a relative amount, not a screen position. Opcode 0x01.
MOVE 0x01 · cursor payload 6 bytes
Fire-and-forget
| Offset | Field | Type | Notes |
|---|---|---|---|
| 0 | motion | u8 | 0 = cursor |
| 1 | dx | i16 | horizontal step; +x = right, little-endian |
| 3 | dy | i16 | vertical step; +y = down, little-endian |
| 5 | flags | u8 | riding override, 0 for a plain move |
exact net move = the sum of every delta sent range full i16 per axis, no clamp signs +x right, +y down (screen-style), +z wheel up paced a large move drains across frames; nothing is dropped
The box carries any remainder in its accumulator. RESET zeroes it. Library binding: move_rel.
Cursor dx = 100, dy = 0 (motion = 0):
MOVE (wheel) Vertical scroll
With motion = 1, MOVE scrolls the wheel by a relative amount.
MOVE 0x01 · wheel payload 4 bytes
Fire-and-forget
| Offset | Field | Type | Notes |
|---|---|---|---|
| 0 | motion | u8 | 1 = wheel |
| 1 | dz | i16 | scroll steps; + = up, - = down, little-endian |
| 3 | flags | u8 | riding override, 0 for a plain move |
The box adds dz to its accumulator and drains it across frames with carry, no clamp. RESET clears it. Library binding: wheel.
Wheel dz = 1, one step up (motion = 1):
MOVE (pan) Horizontal scroll (AC Pan)
With motion = 2, MOVE drives AC Pan (horizontal scroll, Consumer usage 0x0238) by a relative amount.
MOVE 0x01 · pan payload 4 bytes
Fire-and-forget
| Offset | Field | Type | Notes |
|---|---|---|---|
| 0 | motion | u8 | 2 = pan |
| 1 | dpan | i16 | pan steps; + = right, - = left, little-endian |
| 3 | flags | u8 | riding override, 0 for a plain move |
The box adds dpan to its accumulator and drains it across frames with carry, no clamp, as for the wheel. RESET clears it. Pan is lockable in any direction and catchable as a motion event's fourth axis.
Pan dpan = 1, one step right (motion = 2):
MOVE flags Per-command movement-riding override
The flags byte overrides movement riding for this command only.
MOVE 0x01 · flags at offset 5 (cursor) / 3 (wheel)
| Bit | Name | Effect |
|---|---|---|
0x01 | NOW | The delta is emitted on the next mouse report, native or the box's, without waiting for a native cursor-motion report. |
0x02 | FLUSH | Emit the motion already held for a ride, ignoring the ride window. |
0x04 | DISCARD | Drop the motion already held for a ride. |
Order: discard, flush, then the delta. FLUSH and DISCARD together refuse the frame. Injected motion lands in one of two accumulators, so a NOW delta is emitted without the motion held for a ride. Library bindings: move_rel_now, flush_motion, discard_motion.
Flush held motion with no delta (flags = 0x02):