-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgetBatteriesDevices.go
84 lines (81 loc) · 3.09 KB
/
getBatteriesDevices.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package main
import (
"fmt"
"github.com/StackExchange/wmi"
)
type Win32_BatteryDevice struct {
BatteryRechargeTime uint32
BatteryStatus uint16
Chemistry uint16
ConfigManagerErrorCode uint32
Description string
DesignCapacity uint32
DesignVoltage uint64
DeviceID string
EstimatedChargeRemaining uint16
EstimatedRunTime uint32
ExpectedBatteryLife uint32
ExpectedLife uint32
FullChargeCapacity uint32
MaxRechargeTime uint32
Name string
PNPDeviceID string
SmartBatteryVersion string
Status string
TimeOnBattery uint32
TimeToFullCharge uint32
}
func GetBatteriesDevices() []Device {
var batteriesDevicesWin32Battery []Win32_BatteryDevice
var devicesWin32PnP []Win32_PNPDevice
var batteriesDevicesWin32 []Win32_BatteryDevice
var batteriesDevices []Device
err := wmi.Query("SELECT * FROM Win32_Battery", &batteriesDevicesWin32Battery)
err = wmi.Query("SELECT * FROM Win32_PnPEntity", &devicesWin32PnP)
if err != nil {
fmt.Println("Error querying batteries devices:", err)
return nil
}
for _, pnpDevice := range devicesWin32PnP {
if pnpDevice.PNPClass == "Battery" {
batteriesDevicesWin32 = append(batteriesDevicesWin32, Win32_BatteryDevice{
Name: pnpDevice.Name,
ConfigManagerErrorCode: pnpDevice.ConfigManagerErrorCode,
Status: pnpDevice.Status,
Description: pnpDevice.Description,
DeviceID: pnpDevice.DeviceID,
PNPDeviceID: pnpDevice.PNPDeviceID,
})
}
}
batteriesDevicesWin32 = append(batteriesDevicesWin32, batteriesDevicesWin32Battery...)
for _, batteryDevice := range batteriesDevicesWin32 {
batteriesDevices = append(batteriesDevices, Device{
Name: batteryDevice.Name,
BatteryRechargeTime: batteryDevice.BatteryRechargeTime,
BatteryStatus: batteryDevice.BatteryStatus,
Chemistry: batteryDevice.Chemistry,
ConfigManagerErrorCode: batteryDevice.ConfigManagerErrorCode,
DesignCapacity: batteryDevice.DesignCapacity,
DesignVoltage: batteryDevice.DesignVoltage,
EstimatedChargeRemaining: batteryDevice.EstimatedChargeRemaining,
EstimatedRunTime: batteryDevice.EstimatedRunTime,
ExpectedBatteryLife: batteryDevice.ExpectedBatteryLife,
ExpectedLife: batteryDevice.ExpectedLife,
FullChargeCapacity: batteryDevice.FullChargeCapacity,
MaxRechargeTime: batteryDevice.MaxRechargeTime,
SmartBatteryVersion: batteryDevice.SmartBatteryVersion,
TimeOnBattery: batteryDevice.TimeOnBattery,
TimeToFullCharge: batteryDevice.TimeToFullCharge,
Status: batteryDevice.Status,
Description: batteryDevice.Description,
DeviceID: batteryDevice.DeviceID,
PNPDeviceID: batteryDevice.PNPDeviceID,
})
}
if len(batteriesDevices) < 1 {
return []Device{}
} else {
return batteriesDevices
}
}