-
Notifications
You must be signed in to change notification settings - Fork 0
/
battery.go
54 lines (50 loc) · 1.38 KB
/
battery.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package main
import (
"fmt"
"io/ioutil"
"strconv"
"strings"
"time"
)
func IsBatteryCharging(path, battery, property string) int64 {
asBytes, err := ioutil.ReadFile(
fmt.Sprintf(path, battery, property),
)
checkErr(err)
asString := strings.TrimSpace(string(asBytes))
if asString == "Discharging" {
return 0
} else {
return 1
}
}
func ReadBatteryValueAsInt(path, battery, property string) int64 {
asBytes, err := ioutil.ReadFile(
fmt.Sprintf(path, battery, property),
)
checkErr(err)
asString := strings.TrimSpace(string(asBytes))
asInt, err := strconv.ParseInt(asString, 10, 64)
checkErr(err)
return asInt
}
func CreateBatteryData(batteryDevice *string) *BatteryDataRow {
var batteryPath string = "/sys/class/power_supply/%s/%s"
return &BatteryDataRow{
ChargeNow: ReadBatteryValueAsInt(
batteryPath, *batteryDevice, "charge_now"),
ChargeFull: ReadBatteryValueAsInt(
batteryPath, *batteryDevice, "charge_full"),
ChargeFullDesign: ReadBatteryValueAsInt(
batteryPath, *batteryDevice, "charge_full_design"),
CurrentNow: ReadBatteryValueAsInt(
batteryPath, *batteryDevice, "current_now"),
VoltageNow: ReadBatteryValueAsInt(
batteryPath, *batteryDevice, "voltage_now"),
Charging: IsBatteryCharging(
batteryPath, *batteryDevice, "status"),
Timestamp: time.Now().Unix(),
Cycles: ReadBatteryValueAsInt(
batteryPath, *batteryDevice, "cycle_count"),
}
}