# Touchscreen/remote interface for various PP machines ## Communication Host (currently RPI4) connects via serial (USB) to Arduino, also to enable remote firmware updates. The host connects to the Arduino will share the device through other protocols, MQTT,... ## Protocols ### Serial #### Request Since it's serial, we receive for each command a reply matching an issue id as well a payload with the requested data or command replies. **Command construction** : The string is composed as follows = 'START + VALUE + END', where - START: ```<<``` - END: ```>>``` - VALUE: 1;2;0;1;Power:off:1 Send Data/Command Syntax : ```ID ; VERB ; FLAGS ; VERSION ; PAYLOAD``` **ID** : queued/issued command id, used to confirm command on sender side **VERB** : COMMAND,STATUS,DATA **FLAGS** : ```c++ enum MessageFlags { NEW = 1 << 1, // set on target when inbound // set on target PROCESSING = 1 << 2, // set on target when inbound PROCESSED = 1 << 3, // set on host, turn on debugging through the entire processing chain DEBUG = 1 << 4, RECEIPT = 1 << 5 // set on host, this will return the new state }; ``` **PAYLOAD**: String, this string depends on the verb (see *ECALLS*). ```c++ enum ECALLS { // global function EC_COMMAND = 1, // addon method EC_METHOD = 2, // external function EC_FUNC = 3, // user space EC_USER = 10 }; ``` **Format for Verb EC_METHOD** : Addon-Class-Name:Addon-Class-MemberFunction-Name:Argument #### Response Response construction via delimitter : 10|x0A - line by line Response syntax : ```ID ; STATUS ; PAYLOAD``` **ID**: queued/issued command id, used to confirm command on sender side **STATUS** : Error code, OK=0, SERVERITY Mask (syslog) **PAYLOAD** : String - this string contains all enabled module states. The payload depends upon the sent query type (see **ECALLS**). **Format for Verb EC_METHOD**, ie: ````Power:off:1```` = NEW_VALUE (the new state) ------------------------------------------------------------ #### boot 1. Addon::setup -> Plunger::home -> power(second) -> home 2. PI:handshake -> state #### cycle - HopperLoaded? -> |Func|State / flag| |-----|-----------------| |1. Plunger::home(safe=on)| AF_INIT_HOMING | |-- 1.1 Plunger::homed? | AF_INIT_HOMED \|\| AF_ERROR | |2. Power:on(primary & second)| AF_INIT_POWERED | | |3. VFD:fwd| AF_INIT_SHREDDING | |4. Plunger::plunge| AF_SHREDDING |-- 4.1. Plunger::check| AF_SHREDDING |-- 4.1.1 AutoReverse? stop : plunge | AF_AUTO_REVERSING \| AF_SHREDDING |-- 4.1.2. Current = Shredding? stop(delay=3) : plunge | AF_FINISHING \| AF_SHREDDING | |5. Plunger::LowLimit?| |-- 1. Current=Idle? -> home|