# CATS Radio Node This project contains a web user interface for controlling a [CATS Radio](https://cats.radio) device, consisting of a Raspberry Pi with a [RF4463 hat](https://gitlab.scd31.com/cats/pi-hardware). ## Goals 1. Show incoming packets, and store them in the sqlite database `cats-radio-node.db` 1. Allow the user to send custom packets 1. Configure igate and other settings, stored in `node-config.toml` ## Installation To get cats-radio-node running on your raspberry pi 1. Prepare an SD card with latest Raspberry Pi OS, and boot your pi with it 1. using `raspi-config`, enable the SPI Interface 1. `mkdir cats-radio-node` and `cd cats-radio-node` 1. `wget https://mpb.li/pv/cats-radio-node-20240128.tar.gz` 1. `tar -xf cats-radio-node-20240128.tar.gz` 1. `sudo ./cats-radio-node` 1. And connect to it through HTTP on port 3000 If you want to compile it yourself: 1. Do `sudo apt update`, install `git` 1. Install most recent rust compiler with rustup: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` * Careful when installing Rust on a Raspberry Pi with a 64-bit kernel running a 32-bit userland: `rustup` will want to install the aarch64 toolchain, but that one doesn't work! * If that happens, be sure to install the `stable-arm-unknown-linux-gnueabihf` toolchain. * You either have to log out and log in again or source the env as instructed by `rustup` to have the Rust compiler in your $PATH 1. `git clone https://mpb.li/git/cats-radio-node/` 1. `cd cats-radio-node` 1. `cargo build --bin cats-radio-node` 1. `sudo target/debug/cats-radio-node` ## Current state of the project Configuration read/write through UI is done. RF4463 integration, message decoding and presentation, UI to send messages. Tunnel IP packets through Arbitrary whiskers, using TUN. Live update of incoming packets using WebSocket, in the 'Chat' window. ### TODO: * Nicer UI for presenting incoming packets. For now it just shows the Comment whisker. * igate integration * Regular beacon transmission ## Additional tools ### fake-radio If no radio is available, frames can be sent and received over UDP for debugging. cats-radio-node receives on 127.0.0.1:9073, and transmits to 127.0.0.1:9074. The `fake-radio` binary can be used to inject frames for that, and decodes those sent by cats-radio-node. Build with `cargo build --bin fake-radio`