Want Message

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