1blockdiag download_procedure_diagram {
2    node_height = 40;
3    node_width = 150;
4    span_width = 40;
5    span_height = 45;
6    default_fontsize = 12
7    orientation = portrait;
8    edge_layout = flowchart;
9    default_group_color = none;
10
11    // nodes
12    start [label = "Start", shape = flowchart.terminator];
13    sync [label = "Synchronization", shape = box];
14    success_cond [label = "Success?", shape = flowchart.condition];
15    erase_data [label = "Erase data", shape = box];
16    transmit_data [label = "Transmit data", shape = box];
17    finish_cond [label = "Finish?", shape = flowchart.condition];
18    transmit_finish [label = "Transmit finish frame", shape = box];
19    finish [label = "Finish", shape = flowchart.terminator];
20    // fake nodes to adjust shape and edge label position
21    succ_fin [shape = none];
22    fincon_fin [shape = none];
23
24    // edges
25    start -> sync -> success_cond;
26    success_cond -> erase_data [label = "Yes"];
27    erase_data -> transmit_data;
28    transmit_data -> finish_cond;
29    success_cond -- succ_fin [label = "Timeout"];
30    finish_cond -> transmit_finish [label = "Yes"];
31    finish_cond -- fincon_fin [label = "Failure"];
32    succ_fin -- fincon_fin;
33    fincon_fin -> finish;
34    transmit_finish -> finish;
35
36    // group
37    group{transmit_finish, fincon_fin};
38    group{erase_data, succ_fin};
39}
40