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

    start
    start -> enter_init [weight=10]

    enter_init [shape=point, label=""]
    enter_init -> init [weight=10]

    reconfigure [shape=point, label=""]
    reconfigure -> enter_init [label="Config\ndetached"]

    init [style="bold"]
    init -> enter_clear_sync [label="No FMMUs"]
    init -> clear_fmmus [weight=10]

    clear_fmmus
    clear_fmmus -> enter_clear_sync [weight=10]

    enter_clear_sync [shape=point, label=""]
    enter_clear_sync -> enter_dc_clear_assign [label="No SMs"]
    enter_clear_sync -> clear_sync [weight=10]

    clear_sync
    clear_sync -> enter_dc_clear_assign [weight=10]

    enter_dc_clear_assign [shape=point, label=""]
    enter_dc_clear_assign -> enter_mbox_sync [label="No DC\nsupport"]
    enter_dc_clear_assign -> dc_clear_assign [weight=10]

    dc_clear_assign
    dc_clear_assign -> dc_read_offset [weight=10]

    dc_read_offset
    dc_read_offset -> dc_write_offset [weight=10]

    dc_write_offset
    dc_write_offset -> enter_mbox_sync [weight=10]

    enter_mbox_sync [shape=point, label=""]
    enter_mbox_sync -> end [label="INIT\nrequested"]
    enter_mbox_sync -> enter_boot_preop [label="No mailboxes"]
    enter_mbox_sync -> mbox_sync [weight=10]

    mbox_sync
    mbox_sync -> enter_boot_preop [weight=10]

    enter_boot_preop [shape=point, label=""]
    enter_boot_preop -> boot_preop [weight=10]

    boot_preop [style="bold"]
    boot_preop -> end [label="PREOP\nor BOOT\nrequested"]
    boot_preop -> enter_sdo_conf [weight=10]

    enter_sdo_conf [shape=point, label=""]
    enter_sdo_conf -> enter_pdo_sync [label="No config\nattached"]
    enter_sdo_conf -> enter_soe_conf_preop [label="No SDOs\nconfigured"]
    enter_sdo_conf -> sdo_conf [weight=10]

    sdo_conf
    sdo_conf -> reconfigure
    sdo_conf -> enter_soe_conf_preop [weight=10]

    enter_soe_conf_preop [shape=point, label=""]
    enter_soe_conf_preop -> enter_pdo_sync [label="No config\nattached"]
    enter_soe_conf_preop -> enter_eoe_ip_param [label="No IDNs\nconfigured"]
    enter_soe_conf_preop -> soe_conf_preop [weight=10]

    soe_conf_preop
    soe_conf_preop -> reconfigure
    soe_conf_preop -> enter_eoe_ip_param [weight=10]

    enter_eoe_ip_param [shape=point, label=""]
    enter_eoe_ip_param -> enter_pdo_conf [label="No IP parameters"]
    enter_eoe_ip_param -> eoe_ip_param [weight=10]

    eoe_ip_param
    eoe_ip_param -> enter_pdo_conf [weight=10]

    enter_pdo_conf [shape=point, label=""]
    enter_pdo_conf -> pdo_conf [weight=10]

    pdo_conf
    pdo_conf -> reconfigure
    pdo_conf -> enter_pdo_sync [weight=10]

    enter_pdo_sync [shape=point, label=""]
    enter_pdo_sync -> enter_fmmu [label="No PDO SMs"]
    enter_pdo_sync -> pdo_sync [weight=10]

    pdo_sync
    pdo_sync -> enter_fmmu [weight=10]

    enter_fmmu [shape=point,label=""]
    enter_fmmu -> enter_safeop [label="No config\nattached"]
    enter_fmmu -> enter_dc_cycle [label="No FMMUs\nconfigured"]
    enter_fmmu -> fmmu [weight=10]

    fmmu
    fmmu -> enter_dc_cycle [weight=10]

    enter_dc_cycle [shape=point,label=""]
    enter_dc_cycle -> reconfigure
    enter_dc_cycle -> dc_cycle [weight=10]
    enter_dc_cycle -> enter_safeop [label="DC not\nconfigured"]

    dc_cycle
    dc_cycle -> reconfigure
    dc_cycle -> dc_start [weight=10]

    dc_start
    dc_start -> reconfigure
    dc_start -> dc_assign [weight=10]

    dc_assign
    dc_assign -> enter_safeop [weight=10]

    enter_safeop [shape=point,label=""]
    enter_safeop -> safeop [weight=10]

    safeop [style="bold"]
    safeop -> end [label="SAFEOP\nrequested"]
    safeop -> op [weight=10]

    op [style="bold"]
    op -> end

    end
}
