sermonizer 0.2.0

A simple, clean serial monitor with a clean terminal UI for embedded development
# 🔌 Sermonizer

[![CI](https://github.com/systemscape/sermonizer/actions/workflows/ci.yml/badge.svg)](https://github.com/systemscape/sermonizer/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Rust](https://img.shields.io/badge/rust-1.70%2B-brightgreen.svg)](https://www.rust-lang.org)

A simple, clean serial monitor with a clean terminal UI for embedded development.

Most terminal-based serial monitors are annoying to use - they have clunky interfaces and no sane defaults. We wanted something that could be quickly spun up to interact with embedded devices during firmware development without any hassle.

![Screenshot](./docs/screenshot.png)

## Features

- **Smart auto-scroll**: Follows new data, easy to switch to manual scrolling
- **Auto-reconnect**: Keeps watching the port and resumes when the device comes back
- **Clean TUI**: Split view with input at bottom, output on top, status bar with connection state
- **Auto-detect ports**: Just run `sermonizer` and it finds your device
- **Sane defaults**: 115200 baud, 8 data bits, no parity, 1 stop bit
- **Hex mode**: View binary data as hex bytes
- **Logging**: Save RX/TX data with timestamps
- **Fast**: Built in Rust, handles high baud rates smoothly

## Quick Start

```bash
# Install from crates.io
cargo install sermonizer

# Install from source
git clone https://github.com/systemscape/sermonizer.git
cd sermonizer
cargo install --path .

# Or run locally
cargo run --release

# Connect to first available port
sermonizer

# Or specify port and baud
sermonizer --port /dev/ttyUSB0 --baud 115200
# Or with cargo run
cargo run --release -- --port /dev/ttyUSB0 --baud 115200

# List available ports
sermonizer --list
# Or with cargo run
cargo run --release -- --list
```

## Usage

```bash
sermonizer [OPTIONS]

Options:
  -p, --port <PORT>        Serial port path
  -b, --baud <BAUD>        Baud rate (default: 115200)
      --line-ending <E>    Line ending: none|nl|cr|crlf (default: nl)
      --data-bits <N>      Data bits: 5|6|7|8 (default: 8)
      --parity <P>         Parity: none|odd|even (default: none)
      --stop-bits <N>      Stop bits: 1|2 (default: 1)
      --flow-control <F>   Flow control: none|software|hardware (default: none)
      --dtr <on|off>       Set the DTR line after opening
      --rts <on|off>       Set the RTS line after opening
      --hex                Display data as hex
      --log <FILE>         Log received data
      --tx-log <FILE>      Log transmitted data
      --log-ts             Add timestamps to logs and display
      --list               List available ports
```

## Controls

- **Type and press Enter**: Send data to device
- **↑↓**: Browse send history
- **Shift+↑↓ / Page Up/Down**: Scroll through output
- **Home / End**: Jump to top / bottom (End resumes auto-scroll)
- **Ctrl+L**: Clear output
- **Ctrl+V, then a key**: Send that key as a raw control byte (e.g. Ctrl+V Ctrl+C sends 0x03)
- **Esc**: Clear input line
- **Ctrl+C / Ctrl+D**: Exit

## Why?

Perfect for:
- Arduino/ESP32 debugging
- Firmware development workflows
- Quick embedded device interaction
- Protocol testing and development

## License

MIT - see [LICENSE](LICENSE) file.