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