This is a read-only mirror for now.
Find a file
2024-08-29 23:22:52 +02:00
.github/workflows additional test runs with all features 2024-06-23 13:51:09 +02:00
crates wip connection trait 2024-08-29 23:22:52 +02:00
.envrc add .envrc 2024-05-26 16:17:18 +02:00
.gitignore rename to servicepoint, new dir structure, WIP build.rs 2024-05-25 11:16:37 +02:00
Cargo.lock cargo update 2024-08-29 20:08:46 +02:00
Cargo.toml set version to 0.7.0 2024-06-27 19:41:13 +02:00
LICENSE Create LICENSE 2024-05-12 00:10:34 +02:00
README.md update README 2024-05-26 15:15:31 +02:00
rustfmt.toml reformat with max width 2024-05-11 23:28:08 +02:00
shell.nix include rust tools in shell instead of rustup 2024-06-25 22:18:57 +02:00

servicepoint

In CCCB, there is a big pixel matrix hanging on the wall. It is called "Service Point Display" or "Airport Display". This repository contains a library for parsing, encoding and sending packets to this display via UDP in multiple programming languages.

Take a look at the contained crates for language specific information:

Language Readme
Rust servicepoint
C / C++ servicepoint_binding_c
C# / F# servicepoint_binding_cs

Projects using the library

To add yourself to the list, open a pull request.

About the display

  • Resolution: 352x160=56,320 pixels
  • Pixels are grouped into 44x20=880 tiles (8x8=64 pixels each)
  • Smallest addressable unit: row of pixels inside of a tile (8 pixels = 1 byte)
  • The brightness can only be set per tile
  • Screen content can be changed using a simple UDP protocol
  • Between each row of tiles, there is a gap of around 4 pixels size. This gap changes the aspect ratio of the display.

Binary format

A UDP package sent to the display has a header size of 10 bytes. Each header value has a size of two bytes (unsigned 16 bit integer). Depending on the command, there can be a payload following the header.

The commands are implemented in DisplayCommands.

To change screen contents, these commands are the most relevant:

  1. Clear screen
    • command: 0x0002
    • (rest does not matter)
  2. Send CP437 data: render specified text into rectangular region
    • command: 0x0003
    • top left tile x
    • top left tile y
    • width in tiles
    • height in tiles
    • payload: (width in tiles * height in tiles) bytes
      • 1 byte = 1 character
      • each character is rendered into one tile (mono-spaced)
      • characters are encoded using code page 437
  3. Send bitmap window: set pixel states for a rectangular region
    • command: 0x0013
    • top left tile x
    • top left pixel y
    • width in tiles
    • height in pixels
    • payload: (width in tiles * height in pixels) bytes
      • network byte order
      • 1 bit = 1 pixel

There are other commands implemented as well, e.g. for changing the brightness.

What happened to servicepoint2?

After servicepoint2 has been merged into servicepoint, servicepoint2 will not continue to get any updates.

Contributing

Contributions are accepted in any form (issues, documentation, feature requests, code, review, ...).

All creatures welcome.