Fix "no batt" case, when one of the batteries have dodgy driver
This commit is contained in:
1
Makefile
1
Makefile
@@ -13,6 +13,7 @@ build:
|
|||||||
go build ${BUILDOPTS} -o ${BINARY} ./cmd/${BINARY}
|
go build ${BUILDOPTS} -o ${BINARY} ./cmd/${BINARY}
|
||||||
|
|
||||||
battery-test:
|
battery-test:
|
||||||
|
rm -rf ${TEST1}
|
||||||
go build ${BUILDOPTS} -o ${TEST1} ./cmd/${TEST1}
|
go build ${BUILDOPTS} -o ${TEST1} ./cmd/${TEST1}
|
||||||
|
|
||||||
## Remove binary with golang compiler' means
|
## Remove binary with golang compiler' means
|
||||||
|
|||||||
@@ -11,13 +11,12 @@ import (
|
|||||||
// Program entry point.
|
// Program entry point.
|
||||||
func main() {
|
func main() {
|
||||||
for {
|
for {
|
||||||
batteries, err := battery.GetAll()
|
batteries, _ := battery.GetAll()
|
||||||
|
|
||||||
if err != nil {
|
for index, battery := range batteries {
|
||||||
fmt.Printf("Unable to get battery info: %w", err)
|
fmt.Printf("Battery %s: %s\n", index, spew.Sdump(battery))
|
||||||
}
|
}
|
||||||
|
|
||||||
spew.Dump(batteries)
|
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,152 +14,156 @@ func (c *MyConfig) UpdateBatteryInfo() {
|
|||||||
ch int
|
ch int
|
||||||
status string
|
status string
|
||||||
Batts string
|
Batts string
|
||||||
|
InitialDelay time.Duration = 100 * time.Millisecond
|
||||||
|
LoopIterationDelay time.Duration = 5 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
for {
|
Delay := InitialDelay
|
||||||
batteries, err := battery.GetAll()
|
ticker := time.NewTicker(Delay)
|
||||||
|
|
||||||
if err != nil {
|
for range ticker.C {
|
||||||
Batts = fmt.Sprintf(
|
if Delay == InitialDelay {
|
||||||
"<span font='%s' size='%s'>%s</span><span font='%s' size='%s'> no batt</span>",
|
Delay = LoopIterationDelay
|
||||||
|
ticker.Reset(Delay)
|
||||||
|
}
|
||||||
|
|
||||||
|
batteries, _ := battery.GetAll()
|
||||||
|
// In theory, this module should give for each entry its separate err, but in practice it gives
|
||||||
|
// one single err for all entries, so we cannot detemine whist exatly entry errored.
|
||||||
|
|
||||||
|
var (
|
||||||
|
battsInfo string
|
||||||
|
chStr string
|
||||||
|
)
|
||||||
|
|
||||||
|
for i, b := range batteries {
|
||||||
|
switch b.State.Raw {
|
||||||
|
case battery.Charging:
|
||||||
|
status = `▲`
|
||||||
|
case battery.Discharging:
|
||||||
|
status = `▼`
|
||||||
|
case battery.Empty:
|
||||||
|
status = `✘`
|
||||||
|
default:
|
||||||
|
status = `•`
|
||||||
|
}
|
||||||
|
|
||||||
|
// N.B. there can be case when battery is overcharged and shows >100%. It also can indicate that
|
||||||
|
// calibration data is out of date and battery should be re-calibrated.
|
||||||
|
ch = int(math.Round((b.Full - (b.Full - b.Current)) * (100 / b.Full)))
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case ch <= 500 && ch >= 84:
|
||||||
|
if c.Battery.ChargeColor.Full == "" {
|
||||||
|
chStr = fmt.Sprintf(
|
||||||
|
"<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>",
|
||||||
|
c.Battery.Color,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
ch,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
chStr = fmt.Sprintf(
|
||||||
|
`<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>`,
|
||||||
|
c.Battery.ChargeColor.Full,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
ch,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
case ch < 85 && ch > 40:
|
||||||
|
if c.Battery.ChargeColor.AlmostFull == "" {
|
||||||
|
chStr = fmt.Sprintf(
|
||||||
|
"<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>",
|
||||||
|
c.Battery.Color,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
ch,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
chStr = fmt.Sprintf(
|
||||||
|
`<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>`,
|
||||||
|
c.Battery.ChargeColor.AlmostFull,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
ch,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
case ch <= 40 && ch >= 10:
|
||||||
|
if c.Battery.ChargeColor.AlmostEmpty == "" {
|
||||||
|
chStr = fmt.Sprintf(
|
||||||
|
"<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>",
|
||||||
|
c.Battery.Color,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
ch,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
chStr = fmt.Sprintf(
|
||||||
|
`<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>`,
|
||||||
|
c.Battery.ChargeColor.AlmostEmpty,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
ch,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
case ch < 10 && ch >= 0:
|
||||||
|
if c.Battery.ChargeColor.Empty == "" {
|
||||||
|
chStr = fmt.Sprintf(
|
||||||
|
"<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>",
|
||||||
|
c.Battery.Color,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
ch,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
chStr = fmt.Sprintf(
|
||||||
|
`<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>`,
|
||||||
|
c.Battery.ChargeColor.Empty,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
ch,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
battsInfo += fmt.Sprintf(
|
||||||
|
"<span color='%s' background='%s' font='%s' size='%s'>%s</span><span color='%s' background='%s' font='%s' size='%s'>B%d </span>%s<span color='%s' background='%s' font='%s' size='%s'> %s</span>",
|
||||||
|
c.Battery.Color,
|
||||||
|
c.Battery.Background,
|
||||||
c.Battery.SymbolFont,
|
c.Battery.SymbolFont,
|
||||||
c.Battery.SymbolFontSize,
|
c.Battery.SymbolFontSize,
|
||||||
c.Battery.Symbol,
|
c.Battery.Symbol,
|
||||||
|
c.Battery.Color,
|
||||||
|
c.Battery.Background,
|
||||||
c.Battery.Font,
|
c.Battery.Font,
|
||||||
c.Battery.FontSize,
|
c.Battery.FontSize,
|
||||||
|
i,
|
||||||
|
chStr,
|
||||||
|
c.Battery.Color,
|
||||||
|
c.Battery.Background,
|
||||||
|
c.Battery.Font,
|
||||||
|
c.Battery.FontSize,
|
||||||
|
status,
|
||||||
)
|
)
|
||||||
} else {
|
}
|
||||||
var (
|
|
||||||
battsInfo string
|
|
||||||
chStr string
|
|
||||||
)
|
|
||||||
|
|
||||||
for i, b := range batteries {
|
if battsInfo != "" {
|
||||||
switch b.State.Raw {
|
Batts = battsInfo
|
||||||
case battery.Charging:
|
|
||||||
status = `▲`
|
|
||||||
case battery.Discharging:
|
|
||||||
status = `▼`
|
|
||||||
case battery.Empty:
|
|
||||||
status = `✘`
|
|
||||||
default:
|
|
||||||
status = `•`
|
|
||||||
}
|
|
||||||
|
|
||||||
// N.B. there can be case when battery is overcharged and shows >100%. It also can indicate that
|
|
||||||
// calibration data is out of date and battery should be re-calibrated.
|
|
||||||
ch = int(math.Round((b.Full - (b.Full - b.Current)) * (100 / b.Full)))
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case ch > 85:
|
|
||||||
if c.Battery.ChargeColor.Full == "" {
|
|
||||||
chStr = fmt.Sprintf(
|
|
||||||
"<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>",
|
|
||||||
c.Battery.Color,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
ch,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
chStr = fmt.Sprintf(
|
|
||||||
`<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>`,
|
|
||||||
c.Battery.ChargeColor.Full,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
ch,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
case ch < 85 && ch > 40:
|
|
||||||
if c.Battery.ChargeColor.AlmostFull == "" {
|
|
||||||
chStr = fmt.Sprintf(
|
|
||||||
"<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>",
|
|
||||||
c.Battery.Color,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
ch,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
chStr = fmt.Sprintf(
|
|
||||||
`<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>`,
|
|
||||||
c.Battery.ChargeColor.AlmostFull,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
ch,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
case ch <= 40 && ch >= 10:
|
|
||||||
if c.Battery.ChargeColor.AlmostEmpty == "" {
|
|
||||||
chStr = fmt.Sprintf(
|
|
||||||
"<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>",
|
|
||||||
c.Battery.Color,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
ch,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
chStr = fmt.Sprintf(
|
|
||||||
`<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>`,
|
|
||||||
c.Battery.ChargeColor.AlmostEmpty,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
ch,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
case ch < 10:
|
|
||||||
if c.Battery.ChargeColor.Empty == "" {
|
|
||||||
chStr = fmt.Sprintf(
|
|
||||||
"<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>",
|
|
||||||
c.Battery.Color,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
ch,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
chStr = fmt.Sprintf(
|
|
||||||
`<span color='%s' background='%s' font='%s' size='%s'>% 3d%%</span>`,
|
|
||||||
c.Battery.ChargeColor.Empty,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
ch,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
battsInfo += fmt.Sprintf(
|
|
||||||
"<span color='%s' background='%s' font='%s' size='%s'>%s</span><span color='%s' background='%s' font='%s' size='%s'>B%d </span>%s<span color='%s' background='%s' font='%s' size='%s'> %s</span>",
|
|
||||||
c.Battery.Color,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.SymbolFont,
|
|
||||||
c.Battery.SymbolFontSize,
|
|
||||||
c.Battery.Symbol,
|
|
||||||
c.Battery.Color,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
i,
|
|
||||||
chStr,
|
|
||||||
c.Battery.Color,
|
|
||||||
c.Battery.Background,
|
|
||||||
c.Battery.Font,
|
|
||||||
c.Battery.FontSize,
|
|
||||||
status,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if battsInfo != "" {
|
|
||||||
Batts = battsInfo
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Values.BatteryString != Batts {
|
if c.Values.BatteryString != Batts {
|
||||||
|
|||||||
Reference in New Issue
Block a user