1
0
Files
BasaltMeter/Document/PROTOCOL.md
2026-01-10 16:17:13 +08:00

3.6 KiB

Protocol

This document introduce the protocol used between Basalt Presenter and Basalt Trainer.

Data Format

If there is no specific description, the endian of data is native endian. Because all data are transmitted in local machine, so we use native endian.

During the transmission, you may faced with some weired types which is obviously don't have fixed size or not common. I will introduce them in there about how to transmit them.

String

When transmitting string, it will transmit an usize at first to indicate the length of string in character, NOT in byte. Then we transmit the string itself without NULL terminator. All transmitted string is UTF-8.

BSString

Transmitting BSString is similar with String. The only difference between String and BSString is that the char type of BSString is platform-dependent. In Windows, it is wchar_t (aka. u16), and in POSIX, it is char (aka. u8). So the encoding of BSString is UTF-16 on Windows and UTF-8 on POSIX.

Command Protocol

Before introducing command protocol, it would be better to the priniciple, that Presenter is the slave application, and Trainer is the master application.

Command protocol is tramsmitted by system named pipe. The name of pipe is \\.\pipe\ed0e3f1f-d214-4880-9562-640bce15e72e on Windows or /tmp/ed0e3f1f-d214-4880-9562-640bce15e72e on POSIX.

Code Mnemonic Direction Comment
0x61 HANDSHAKE_REQUEST Presenter<--Trainer Handshake code (Are Presenter ready?)
0x62 HANDSHAKE_RESPONSE Presenter-->Trainer Handshake code (Presenter is ready).
0x01 DATA_READY Presenter-->Trainer Data was ready by Presenter. Trainer please receive it.
0x02 DATA_RECEIVED Presenter<--Trainer Data has been received by Trainer. Please go into next loop.
0x21 ACTIVELY_STOP Presenter-->Trainer Something was happened in Presenter and it want to stop.
0x71 STOP_REQUEST Presenter<--Trainer Trainer order Presenter to stop and quit.
0x72 STOP_RESPONSE Presenter-->Trainer Presenster is stopped.

Handshake

At the beginning of execution, Trainer send handshake code to Presenter first and then Presenter send another handshake code to Trainer back. After this, both 2 applications start running.

When Trainer send handshake code, Trainer should attach some values following it to indicate some essential properties of data which instruct Representer how to generate data. There is a table introduce these properties:

Data Type Mnemonic Comment
u8 HEADLESS True for headless mode. 0 for false and any other value for true.
u8 PIXEL_KIND The pixel kind of image
u32 WIDTH The width of image
u32 HEIGHT The height of image
BSString ENGINE_NAME The name of used engine.
u32 ENGINE_DEVICE The index of device used by engine.
BSString DELIVER_NAME The name of used deliver.
u32 DELIVER_DEVICE The index of device used by deliver.
BSString OBJECT_LOADER_NAME The name of used object loader.
BSString OBJECT_LOADER_FILE The path to file loaded by object loader.
BSString ANIME_LOADER_NAME The name of used anime loader.
BSString ANIME_LOADER_FILE The path to file loaded by anime loader.

For the all possible values of "PIXEL_KIND" in above table, there is also a table:

Value Comment
0x01 Grayscale represented by one float32
0x02 Grayscale represented by one u8
0x03 RGB represented by three float32
0x04 RGB represented by three u8

Data Protocol

Pipe

For this kind deliver, it is tramsmitted by system named pipe. The name of pipe is \\.\pipe\ebe2a39d-75de-4cf4-933f-c50284149d63 on Windows or /tmp/ebe2a39d-75de-4cf4-933f-c50284149d63 on POSIX.