+ 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;
+ }
+ }