elbus protocol specification
****************************
Greetings
=========
server: EB 01 00
client: EB 01 00
server: 01 or 75 if not supported and closes
client: XX XX (len) ID (string-utf8-bytes)
server: 01 (OK) or XX (error code) and closes the connection
Outgoing frames
===============
client: XX XX XX XX (OP-ID-CUSTOM) FLAGS XX XX XX XX (frame len) TARGET 00 PAYLOAD
FLAGS = u8, first 6 bits - op, last 2 bits = QoS (0 - no confirm, 1 - confirm
processed)
Operations:
* 0 - NOP (ping)
* 1 - publish to topic, target = topic
* 2 - subscribe to topic(s), no target required
* 3 - unsubscribe from topic(s), no target required
* 0x12 - direct message
* 0x13 - broadcast message
Pings (keep-alive frames)
=========================
client: XX XX XX XX 00 XX XX XX XX
where XX - any bytes (so 0x00 * 9 is fine)
the client should ping the server to make sure the connection is alive. the
server may ping the client, no reply is required.
Incoming frames
===============
first 6 bytes:
* 0 - frame type
* 1-4 - frame len or op id
* 5 - reserved or ack result
Acknowledgements
----------------
The server sends acks for all operations with QoS > 0
server: FE XX XX XX XX (OP-ID-CUSTOM) 01 (OK) or error code
Messages
--------
server: 0x12/0x13 XX XX XX XX 00 (frame len) SENDER 00 PAYLOAD
Topic publications
------------------
server: 01 XX XX XX XX 00 (frame len) SENDER 00 TOPIC 00 PAYLOAD