Connor Wolf

# The *Really* Simple Serial interface (rawserial)

This section talks about using LCDproc with custom hardware.

This driver is intended for using LCDproc with custom hardware. In the original implementation, this was for a PFsense router with a homemade arduino-style circuit that controlled analog panel meters to display network traffic. It is intended for this sort of application, where the LCD control characters emitted normally, as well as the partial screen drawing, make parsing the serial stream a considerably complex affair, particularly on small (generally 8 bit) microprocessors.

## Features

The driver emulates a 40x4 display, and simply dumps the entire framebuffer out the serial port at a rate configured in the config file (default of 1 Hz), post-pended with a single "\n" character. At 1 Hz, it therefore generates 161 serial characters per second.

The maximum update-rate is limited by the internal update-rate of LCDproc, which is currently 8 Hz, so speeds greater then 8 Hz will be simply limited to 8 Hz. The update-rate is also granular at 1 second/8 time-intervals (125 ms), so interesting fractional update-rates will behave oddly. The event-loop is rigidly deterministic, so fractional rates will *average* out to the desired rate, but that will be achieved by dithering between nearby available intervals.

The baud rate is configurable, with a default of 9600 baud. Baud rate will have to be chosen with the required data-per-second in mind, since at 1 Hz, there are 161 characters (40x4+1) per second, which requires that's a theoretical minimum baud of 161*10 = 1610 baud. Higher frame-rates will require higher baud rates.

## Requirements

None. The only requirement is a serial port of some sort.

## Configuration in LCDd.conf

### [rawserial]

`Device` = ``DEVICE``

- Serial port to use. Default: `/dev/cuaU0`

`Speed` = ``NUMBER``

- Desired baud-rate. Possible values: `1200`, `2400`, `9600` (default), `19200`, and `115200`.

`Size` = ¶meters.size;

- Specifies the size of the LCD. If this driver is loaded as a secondary driver it always adopts to the size of the primary driver. If loaded as the only (or primary) driver, the size can be set. Default: `40x4`.

`UpdateRate` = ``NUMBER``

- Desired update-rate in Hertz (e.g. updates per second). Fractional values and values less than one are valid (e.g. 0.5). Legal values are `0.0005` (equals 2000 seconds) - `10`, with `1.0` being the default.