<!-- Source: https://medius.k4tech.net/native/architecture -->
# How it fits together

_Mouse, box, and PC_

The box has two chips joined by an internal link, plus a third port for your program. The clone is a copy of the real mouse's USB identity.

| Part | Role |
| --- | --- |
| Host chip | Reads the real mouse. |
| Device chip | Presents the clone to the PC and merges your input into what it reports. |
| Link | Passes data between the two chips. |

```
   real mouse                     game PC
        |                            ^
        | USB3                       | USB1
        v                            |
  +-----------+                +-----------+
  | host chip | ---- link ---> |device chip|
  +-----------+                +-----------+
                                     ^
                                     | USB2 (CH343 serial)
                                     |
                                control PC
```

Three connections:

| Port | Connects to |
| --- | --- |
| [`USB3`](/native/hardware.md) | The real mouse. |
| [`USB1`](/native/hardware.md) | The PC receiving the mouse. |
| [`USB2`](/native/transport.md) | The program driving the box, over a [CH343 serial link](/native/transport.md). |

That program speaks the [binary protocol](/native/frame.md), sending [movement](/native/commands/move.md), [button](/native/commands/inject.md), and [scroll](/native/commands/move.md#wheel) commands.

## What the PC sees

_A real mouse, plus your input_

To the PC the clone is the same model of mouse, with the same buttons and capabilities. Your input adds to the real mouse's input rather than replacing it ([Injection Model](/native/injection.md)), so the physical mouse keeps working either way.

| When your program | The box |
| --- | --- |
| Sends input | Layers your movement, scroll, and button state onto the real mouse. |
| Goes quiet | Returns to plain passthrough, just a wire, per the [safety rule](/native/injection.md#safety). |

## Two computers

_A separate driver host_

Your program on [`USB2`](/native/transport.md) runs on a different computer from the one receiving the mouse on [`USB1`](/native/hardware.md).

> **Note**
>
> See [Hardware](/native/hardware.md) for the ports and how to wire them, including the one pairing to avoid.
