documentation/graphs/fsm_eoe.dot
author Knud Baastrup <kba@deif.com>
Tue, 14 Apr 2015 10:12:55 -0400
changeset 2625 e25af8bd3957
parent 2589 2b9c78543663
permissions -rw-r--r--
Eoe mac address now derived from unique mac.
The EoE MAC address is now derived from the NIC part of the first global
unique MAC address of the linked list of available network interfaces or
otherwise the MAC address used by the EtherCAT master. The EoE MAC address
will get the format 02:NIC:NIC:NIC:RP:RP where NIC comes from the unique MAC
address (if available) and RP is the ring position of the EoE slave.

/* $Id$ */

digraph eoe {
    node [fontname="Helvetica"]
    edge [fontname="Helvetica",fontsize=12]

    start [shape=point]
    start -> query

    query [label="Query all Mailboxes"]
    query -> check_read

    check_read [shape=diamond,label="Frames to read?"]
    check_read -> unset_idle_read [label="yes"]
    check_read -> check_idle_read [label="no"]

    unset_idle_read [label="Reset idle flag"]
    unset_idle_read -> read

    read [label="Read next segment"]
    read -> check_read_finished

    check_read_finished [shape=diamond,label="Frame complete?"]
    check_read_finished -> read [label="no"]
    check_read_finished -> check_write [label="yes"]

    check_idle_read [shape=diamond,label="Idle flag set?"]
    check_idle_read -> set_idle_read [label="no"]
    check_idle_read -> sleep_read [label="yes"]

    set_idle_read [label="Set idle flag"]
    set_idle_read -> check_write

    sleep_read [label="Sleep"]
    sleep_read -> check_write

    check_write [shape=diamond,label="Frames to write?"]
    check_write -> unset_idle_write [label="yes"]
    check_write -> check_idle_write [label="no"]

    unset_idle_write [label="Reset idle flag"]
    unset_idle_write -> write

    write [label="Write next segment"]
    write -> check_write_finished

    check_write_finished [shape=diamond,label="Frame complete?"]
    check_write_finished -> check_read_remaining [label="yes"]
    check_write_finished -> write [label="no"]

    check_read_remaining [shape=diamond,label="Remaining segments to read?"]
    check_read_remaining -> query [label="no"]
    check_read_remaining -> read [label="yes"]

    check_idle_write [shape=diamond,label="Idle flag set?"]
    check_idle_write -> set_idle_write [label="no"]
    check_idle_write -> sleep_write [label="yes"]

    set_idle_write [label="Set idle flag"]
    set_idle_write -> check_read_remaining

    sleep_write [label="Sleep"]
    sleep_write -> query

    /*{rank=same; check_read; check_idle_read}
    {rank=same; unset_idle_read; set_idle_read; sleep_read}
    {rank=same; check_write; check_idle_write}
    {rank=same; unset_idle_write; set_idle_write; sleep_write}*/
}