graph
BUS[Bus] --> Bi[Bifrost: raw]
Bi --> W[Want -> msg_type: int]
W --> A[0: BROADCAST] --> I[iris.ib.append -> msg_type, pid, buf]
W --> B[1: WRITE - crud change mostly for debugging] --> I
W --> C[2: REMOTE CALL - packet resp_id, payload] --> I
W --> D[3: REPLY - similar to broadcast but uses foreign adr] --> I
W --> E[4: INFO - eg deprication warnings etc.] --> I
the Stack
graph
B[Business services] --> IDE([IDE Programming Environment])
IDE --> P[Production Management] --> A([Awesome Dashboards])
A --> R[Robots]
R --> D([Devices])
the Stack
graph
B[Business services] <--> N
IDE[IDE] <--> Data
IDE <--> N
P[Production Management] <--> N[networks]
N <--> D[Devices]
D --> Data[Data]
Data <--> AI
Data <--> B
Data <--> P
AI[AI] <--> B
AI --> P
AI --> D
Gene - Saga
graph
load[Load] --> N[Next]
N --> _N[_Next]
_N --> AA[AutoAdvancer]
AA --> _N
_N --> E[Execute]
E --> N
Send & Recv
graph
I[iris] --> P[Parameter]
P --> |iris.send| H[header]
H --> |head pack| M[message]
M --> |msg bundle| OB[outbox]
OB --> |send| B[bus]
B[bus] --> |bus.recv| H[header]
H --> |header. want/ channel| IB
IB[inbox] --> M[message]
M --> |unbundle| P[Parameter]
P --> |pub/ call/ log/ etc... | I[iris]
Send
graph LR
I[iris] <--> P[Parameter]
P --> |iris.send| H[header]
H --> |head pack| M[message]
M --> |msg bundle| OB[outbox]
OB --> |send| B[bus]
Recv
graph LR
B[bus] --> |bus.recv| H[header]
H --> |header. want/ channel| IB
IB[inbox] --> M[message]
M --> |unbundle| P[Parameter]
P --> |pub/ call/ log/ etc... | I[iris]
Busses Topology
graph
I{iris} <--> C([CAN])
I <--> M([MQTT])
I <--> G[Postgres LISTEN/NOTIFY]
I <--> R([Reddis-PUB/SUB])
W[Websocket\nTerminal\nUX] --> |UX Outputs| F[functions] --> I
I <--> K([KAFKA])
C --> |Terminal| B((bifrost)) --> W
M --> |Terminal| B
K --> |Terminal| B
R --> |Terminal| B
G --> |Terminal| B
I --> P{Http Post}
I --> H[websocket\npacker] --> |UX inputs| B
Bifrost and Websocket
graph
D[Div object\nParameter] --> |type: bool, pid, msg| B[[bifrost]] --> |websocket send| W((websocket))
P -.- |contained| D
Button -.- |contained| P
Slider -.- |contained| P
T -.- |contained| P
D o==o |div object has\n mating code on page| J[javascript]
J <==> W
W --> |websocket recv\niris.p lookup| P[iris.p]
P --> |pid, val| Button
P --> |pid, the input| T[Terminal input]
P --> |pid, val| Slider
Button --> |pid, constant\n*hot-injected*| D
T --> C[/complex type\n unknown charactoristics\]
Parameter.send()
graph
P(Parameter) --> |put message in \n internal inbox| I(I Inbox)
P --> |send message out to bus| OB
P --> |stringified state| D(Debug)
P --> |call_directly| H(hot)
P --> |hot route\n injected state| Part(Partial)
P --> |hot route\n injected\n foreign state| Alias(Alias)
P --> |hot route\n injected\n foreign state| Log
Log(Logging) --> File
Part --> |pid, const| S[Subscribing\nParameter]
Alias --> |pid, alias.state| S
H --> |pid, self.state| S
OB(OUTBOX) --> Bus1
OB --> |TODO: allow for \nmultiple busses| Bus2
OB --> Bus3
I --> |this is like await\nIris will _call_ on \nnext loop| S
D --> |should we just hijack\nstdout when bifrost is active?| BA{Bifrost\nactive?}
BA --> |yes| BS(bifrost.send)
BA --> |no| SO(stdout)
Programming Paradigm
graph
M(Manifest) --> |manifest used to\nhave boards to drop on canvas| IDE(IDE)
M --> |manifests are not contained in map, \nbut are needed for transposing| T(Transposer)
IDE --> |IDE exports map specifying\n relations between manifests| Map
Map --> |map is used in conjuntion \nwith manifests to output\n zorg friendly documents| T
MM(mani_maker) --> |mani maker aids creation of initial manifests \nwith hardware definitions| M
T --> |zorg friendly document| Z(Zorg)
Z --> I(Iris)
T --> |transposer can also export manifests,\n think of this like a subclass| M