Input Connection - Robot {robot.id} Configure how this robot receives commands. Choose between direct hardware control or remote collaboration.
{#if error} Connection Error {error} {/if} {#if showUSBCalibration}
Hardware Calibration Required
Before connecting to the physical robot, calibration is required to map the servo positions to software values. This ensures accurate control. {#each robot.getUncalibratedUSBDrivers() as usbDriver} {:else}
No USB drivers require calibration
{/each}
{:else}
Current Input Source
{#if robot.hasConsumer} {robot.consumer?.name || "Connected"} {:else} No Input Connected {/if}
{#if robot.hasConsumer}
Status: {robot.consumer?.status.isConnected ? "Connected" : "Disconnected"}
{/if}
Local Hardware (USB) Read physical robot movements in real-time {#if robot.hasConsumer && robot.consumer?.name === "USB Consumer"}

Hardware Connected

Reading physical servo positions

{:else} {#if robot.hasConsumer}

Disconnect current input to connect USB hardware

{/if} {/if}
Remote Collaboration (Rooms) Receive commands from AI systems, remote users, or other software
{#if robot.hasConsumer && robot.consumer?.name?.includes("Remote Consumer")}

Room Connected

Receiving remote commands

{:else}

Create New Room

Create a room where others can send commands to this robot

Join Existing Room: {robotManager.rooms.length} room{robotManager.rooms.length !== 1 ? "s" : ""} available
{#if robotManager.rooms.length === 0}
{robotManager.roomsLoading ? "Loading rooms..." : "No rooms available. Create one to get started."}
{:else} {#each robotManager.rooms as room}

{room.id}

{room.has_producer ? "📤 Has Output" : "📥 No Output"} 👥 {room.participants?.total || 0} users
{/each} {/if}
{#if robot.hasConsumer}

Disconnect current input to join a room

{/if} {/if}
Input Sources USB: Read physical movements • Remote: Receive network commands • Only one active at a time {/if}