| digraph p2p { |
| ranksep=.75; |
| size = "8.5,7.5"; |
| |
| start -> IDLE; |
| start [label="Init",shape=none]; |
| |
| /* Discovery: Scan followed by Find(SEARCH,LISTEN) */ |
| subgraph cluster_0 { |
| label="Discovery"; |
| color=lightgrey; |
| node [color=blue]; |
| /* SCAN and LISTEN currently not used in the implementation */ |
| SCAN [style=dotted]; |
| LISTEN [style=dotted]; |
| |
| SCAN -> LISTEN; |
| LISTEN -> SEARCH -> LISTEN [style=dotted]; |
| SEARCH -> SD_DURING_FIND [label="Peer SD capab\nand no info", weight=100]; |
| SD_DURING_FIND -> SEARCH [label="RX SD Resp\nor timeout", weight=100]; |
| SEARCH -> PROV_DISC_DURING_FIND [label="Prov Disc cmd\nand no Resp", weight=100]; |
| PROV_DISC_DURING_FIND -> SEARCH [label="RX Prov Disc Resp\nor timeout", weight=100]; |
| } |
| |
| /* Group Formation */ |
| subgraph cluster_1 { |
| label="Group Formation"; |
| color=lightgrey; |
| node [color=green]; |
| |
| CONNECT -> CONNECT_LISTEN [style=dotted,weight=100]; |
| CONNECT_LISTEN -> CONNECT [style=dotted,weight=100]; |
| CONNECT -> WAIT_PEER_IDLE [label="RX GO Neg Resp\n(info unavail)"]; |
| WAIT_PEER_IDLE -> WAIT_PEER_CONNECT [style=dotted,weight=100]; |
| WAIT_PEER_CONNECT -> WAIT_PEER_IDLE [style=dotted,weight=100]; |
| |
| CONNECT -> GO_NEG [label="RX GO Neg Resp\n(success)", weight=10]; |
| CONNECT_LISTEN -> GO_NEG [label="RX GO Neg Req or\nTX GO Neg Resp"]; |
| WAIT_PEER_CONNECT -> GO_NEG [label="RX GO Neg Req"]; |
| GO_NEG -> PROVISIONING [label="TX/RX GO Neg Conf"]; |
| } |
| |
| PROVISIONING -> IDLE [label="WPS\nsuccess"]; |
| |
| /* External triggers */ |
| IDLE -> SCAN [label="Find cmd",weight=20]; |
| IDLE -> CONNECT [label="Connect cmd",weight=20]; |
| IDLE -> LISTEN_ONLY [label="Listen cmd"]; |
| |
| /* Timeouts */ |
| /* |
| edge [color=red]; |
| WAIT_PEER_IDLE -> IDLE [label="timeout", weight=0]; |
| WAIT_PEER_CONNECT -> IDLE [label="timeout", weight=0]; |
| CONNECT -> IDLE [label="timeout", weight=0]; |
| CONNECT_LISTEN -> IDLE [label="timeout", weight=0]; |
| GO_NEG -> IDLE [label="timeout", weight=0]; |
| PROVISIONING -> IDLE [label="timeout", weight=0]; |
| LISTEN_ONLY -> IDLE [label="timeout", weight=0]; |
| SEARCH -> IDLE [label="timeout", weight=0]; |
| */ |
| } |