digraph G { compound=true; Initialized [label=<Initialized (0)
q is unknown>]; PreStandby [label=<PreStandby (8)
q < 2 mAh>]; Standby [label=<Standby (9)
q < 2 mAh (unless manually entered)>]; /* Charging flow */ subgraph cluster0 { {rank=same; FullPlugged [label=<FullPlugged (4)
q ~= 130mAh>, group="charging"]; O1[style=invis]; } {rank=same; HighCharging [label=<HighCharging (5)
25 mAh <= q < 130 mAh>, group="charging"]; O2[style=invis]; } {rank=same; LowCharging [label=<LowCharging (6)
5 mAh <= q < 25 mAh>, group="charging"]; O3[style=invis]; } {rank=same; CriticalCharging [label=<CriticalCharging (7)
q < 5 mAh>, group="charging"]; O4[style=invis]; } CriticalCharging -> LowCharging [label=">3.2V", constraint=false, weight=100]; LowCharging -> HighCharging [label=">3.8V", constraint=false, weight=100]; HighCharging -> FullPlugged [color=green, constraint=false, weight=100]; edge[style=invis]; O1->O2->O3->O4; color=blue; } subgraph cluster1 { FullDischarging [label=<FullDischarging (1)
q > 30mAh (~125h)>, group="discharging"]; LowDischarging [label=<LowDischarging (2)
5 mAh <= q < 30mAh (~31h)>, group="discharging"]; CriticalDischarging [label=<CriticalDischarging (3)
2 mAh <= q < 5 mAh (~3h)>, group="discharging"]; FullDischarging -> LowDischarging [label="<=3.7V"]; LowDischarging -> CriticalDischarging [label="<=3.3V"]; CriticalDischarging -> PreStandby [label="<=3.1V"]; color=red; } Initialized -> FullDischarging [color=red, lhead=cluster1]; Initialized -> FullPlugged [color=blue, lhead=cluster0, constraint=false]; FullPlugged -> FullDischarging [color=red] CriticalCharging -> PreStandby [color=red, weight=0.1]; HighCharging -> FullDischarging [color=red, constraint=false, weight=0.1]; LowCharging -> FullDischarging [color=red, constraint=false, weight=0.1]; FullDischarging -> LowCharging [color=blue, weight=0.01]; FullDischarging -> HighCharging [color=blue, constraint=false, weight=0.1]; LowDischarging -> LowCharging [color=blue, constraint=false, weight=0.1]; CriticalDischarging -> LowCharging [color=blue, constraint=false, weight=0.1]; PreStandby -> CriticalCharging [color=blue, weight=0.1]; PreStandby -> Standby [label="30s timeout", weight=0.1]; }