# Ratdeck — Quick Start

## Hardware Required

- **LilyGo T-Deck Plus** (ESP32-S3, 16MB flash, 8MB PSRAM, integrated SX1262 LoRa)
- **microSD card** (optional, recommended — FAT32, any size)
- **USB-C cable** (data-capable)

## Build & Flash

```bash
# Install PlatformIO
pip install platformio

# Clone and build
git clone https://github.com/ratspeak/ratdeck.git
cd Ratdeck
python3 -m platformio run

# Flash
python3 -m platformio run --target upload
```

> If `pio` is not on your PATH, use `python3 -m platformio` instead. See [BUILDING.md](BUILDING.md) for esptool instructions and troubleshooting.

### Web Flash (No Build Required)

Visit [ratspeak.org/download](https://ratspeak.org/download.html) to flash directly from your browser using WebSerial.

### USB Port

The T-Deck Plus uses USB-Serial/JTAG — port appears as `/dev/cu.usbmodem*` (macOS) or `/dev/ttyACM*` (Linux).

## First Boot

1. Power on the T-Deck Plus
2. Boot animation plays with progress bar
3. SX1262 radio initializes (915 MHz, Balanced preset)
4. SD card checked — auto-creates `/ratputer/` directories
5. Reticulum identity generated (Ed25519 keypair, saved to flash + SD + NVS)
6. Name input screen — type a display name or press Enter to auto-generate one
7. Home screen shows your name, LXMF address, connection status, and online node count

## Navigation

The T-Deck Plus has a QWERTY keyboard, trackball, and touchscreen (touch currently disabled):

| Input | Action |
|-------|--------|
| Trackball up/down | Scroll lists |
| Trackball left/right | Cycle tabs |
| Trackball click | Select / confirm |
| Trackball long-press (1.2s) | Context menu |
| `,` / `/` | Previous / next tab |
| Enter | Select / send message |
| Esc or Backspace | Back / cancel |
| Ctrl+H | Show hotkey help overlay |

### Tabs

| Tab | Name | Contents |
|-----|------|----------|
| 1 | Home | Your name, LXMF address, connection status, online nodes |
| 2 | Friends | Saved contacts with display names |
| 3 | Msgs | Conversations sorted by most recent, with preview and unread dots |
| 4 | Peers | All discovered nodes — contacts section + online section |
| 5 | Setup | Device, Display, Radio, Network, Audio, Info, System |

## Sending Your First Message

1. Wait for another node to appear in the **Peers** tab (or connect via WiFi)
2. Navigate to the node and press **Enter** to open a chat
3. Type your message on the keyboard
4. Press **Enter** to send
5. Message status: yellow (sending) -> green (delivered) or red (failed)

## Connecting Two Ratdecks Over LoRa

1. Power on both devices
2. Ensure both use the same radio settings (defaults work out of the box)
3. Wait ~30 seconds for announces to propagate
4. The other device appears in the **Peers** tab with RSSI and SNR
5. Select the node and press Enter to start chatting

Both devices must use the same frequency, spreading factor, bandwidth, and coding rate. Default: 915 MHz, SF9, BW 250 kHz, CR 4/5 (Balanced preset).

## WiFi Setup

Default WiFi mode is **STA** (client). Change in Settings -> Network.

### STA Mode (Connect to Your WiFi)

1. Go to Setup -> Network
2. Enter your WiFi SSID and password
3. Add a TCP endpoint (e.g., `rns.beleth.net:4242`)
4. Ratdeck connects and bridges LoRa <-> TCP automatically

### AP Mode (Ratdeck as Hotspot)

1. Set WiFi Mode to AP in Settings -> Network
2. Connect your laptop to `ratdeck-XXXX` (password: `ratspeak`)
3. Add to `~/.reticulum/config`:
   ```ini
   [[ratdeck]]
     type = TCPClientInterface
     target_host = 192.168.4.1
     target_port = 4242
   ```
4. Your desktop is now bridged to the LoRa mesh

### WiFi OFF

Select OFF in Settings -> Network to disable WiFi entirely (saves power).

## SD Card

Insert a microSD card (FAT32) before powering on. The firmware auto-creates:

```
/ratputer/
  config/           Settings backup
  messages/         Message archives (up to 100 per conversation)
  contacts/         Saved friends
  identity/         Identity key backup
  transport/        Routing table backup
```

## Managing Friends

- **Peers tab**: Navigate to a node, press `s` to toggle friend status, or long-press to add/delete
- **Messages tab**: Long-press a conversation for context menu (Add Friend / Delete Chat / Cancel)
- Friends are saved to flash + SD and persist across reboots
- Friends are never auto-evicted from the node list

## Radio Presets

Three presets available in Setup -> Radio:

| Preset | SF | BW | CR | TX | Use Case |
|--------|----|----|----|----|----------|
| **Balanced** (default) | 9 | 250 kHz | 4/5 | 14 dBm | General use |
| Long Range | 12 | 125 kHz | 4/8 | 17 dBm | Maximum range, slow |
| Fast | 7 | 500 kHz | 4/5 | 10 dBm | Short range, fast |

All parameters are individually configurable. Changes apply immediately.

## Serial Diagnostics

Connect at 115200 baud for debug output:

```bash
python3 -m platformio device monitor -b 115200
```

- **Ctrl+D** on device: full diagnostics dump (identity, radio, heap, uptime)
- **Ctrl+T** on device: send radio test packet
- **Ctrl+R** on device: 5-second RSSI sampling

## Transport Mode

By default, Ratdeck runs as an **Endpoint** (handles its own traffic only). Enable **Transport Node** in Setup -> Network to relay packets for other nodes in the mesh. Requires reboot.
