digraph G {
rankdir=LR;
subgraph cluster0 {
Start;
node [shape=box,style=filled,color=red];
label = "EIC";
subgraph cluster1{
node [shape=box,style=filled,color=blue];
style=filled;
label = "Token";
token;
}
subgraph cluster_sync {
label = "EIController<WithClock>";
sync_new_sync;
sync_new_async;
}
subgraph cluster_async {
label = "EIController<NoClockOnlyAsync>";
node [shape=box,style=filled,color=blue];
async_new_async;
}
subgraph cluster_extint {
label = "ExtInt";
subgraph cluster_sense_debounce {
label = "Sense = None, Rise, Fall, Both, High, Low";
subgraph cluster_sense_debounce {
label = "Sense = Rise, Fall, Both";
Debouncing;
}
subgraph cluster_sense_nodebounce {
label = "Sense = None, High, Low";
}
Filtering;
}
subgraph cluster2 {
style=filled;
label = "WithClock";
WithClock;
subgraph withclock {
node [style=filled,color=gray];
NMIEdgeDetect;
NMIFiltering;
SyncEdgeDetect;
}
WithClock -> Filtering;
WithClock -> SyncEdgeDetect;
WithClock -> NMIEdgeDetect;
WithClock -> NMIFiltering;
WithClock -> Debouncing;
}
subgraph cluster3{
node [shape=box,style=filled,color=blue];
style=filled;
label = "NoClockonlyAsync";
NoClockOnlyAsync;
subgraph noclockonlyasync {
node [style=filled,color=gray];
AsyncEdgeDetect;
}
NoClockOnlyAsync -> AsyncEdgeDetect;
}
}
Start -> token;
token -> sync_new_sync;
token -> sync_new_async;
token -> async_new_async;
async_new_async -> NoClockOnlyAsync;
sync_new_sync -> WithClock;
sync_new_async -> NoClockOnlyAsync;
}
}