99 lines
2.7 KiB
Markdown
99 lines
2.7 KiB
Markdown
# 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| |