# Protocol This document introduce the protocol used between Basalt Presenter and Basalt Trainer. If there is no specific description, the endian of data is **native endian**, and the alignment also is native. Because all data are transmitted in local machine, so we use native layout. ## 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|Direction|Comment| |:---|:---|:---| |`0x61`|Presenter<--Trainer|Handshake code (Are Presenter ready?)| |`0x62`|Presenter-->Trainer|Handshake code (Presenter is ready).| |`0x01`|Presenter-->Trainer|Data was ready. Please Trainer receive it.| |`0x02`|Presenter<--Trainer|Data has been received. Please go into next loop.| |`0x71`|Presenter-->Trainer|Actively Stop (Presenter request stop).| |`0x71`|Presenter<--Trainer|Stop (Trainer agree the stop request, or trainer actively stop).| ### 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 Presenter send handshake code back, Presenter should attach some values following it to indicate some essential properties of data which will be passed to Trainer in future. There is a table introduce these properties: |Data Type|Comment| |:---|:---| |u8|The pixel kind of image| |u32|The width of image| |u32|The height of image| 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.