Benshi Dash

Tech Stack: Flutter

What is BenshiDash?

BenshiDash is a sophisticated Android application designed to function as a full-featured head unit for specific amateur and GMRS radios that use the proprietary Benshi protocol for Bluetooth communication.

Built with Flutter, it transforms a standard Android tablet into a powerful, touch-friendly interface for controlling the radio, visualizing data, and managing its programming.

The application goes beyond simple remote control by integrating:

Together, these features create a centralized command center for in-vehicle radio operations.


How It Works: Core Architecture

BenshiDash is built around a central controller that manages the state of the connected radio.
The UI is composed of several specialized screens that interact with this controller to display data and send commands.


1. Radio Communication (radio_controller.dart)

This class is the heart of the application, handling all communication and state management.


2. The Benshi Protocol Implementation (benshi/protocol/)

BenshiDash includes a from-scratch implementation of the Benshi protocol to construct and parse the binary messages used by the radio.


3. Key Functionalities

APRS Decoding and Mapping

BenshiDash can function as a TNC (Terminal Node Controller) for APRS without extra hardware.

  1. Radio receives an APRS packet and sends it as a DATA_RXD event.
  2. The RadioController reassembles fragmented TncDataFragment pieces.
  3. Once complete, raw AX.25 frame bytes are passed to AprsPacket.fromAX25Frame.
  4. The packet is decoded into source, destination, path, GPS coordinates, comments, and symbols.
  5. The AprsPacket is added to the controller’s list, updating the APRS map (flutter_map) with a new station marker.

RepeaterBook Integration

The app integrates with the RepeaterBook.com API for easy travel programming.

  1. From the Channels Screen, user triggers GPS Import.
  2. RepeaterBookService fetches the current location (from the radio or tablet GPS).
  3. Location is reverse-geocoded to determine the current state (e.g., Ohio).
  4. The RepeaterBook API is queried for repeaters in that state.
  5. Results are filtered to 2m and 70cm bands, then the closest 32 repeaters are selected.
  6. Each Repeater object is converted to a Channel object and written into the radio’s memory.

Like What You See?

I'm available for similar projects. Let's discuss how I can help you achieve your goals.

View My Services