From 6f4984e5e7f75c1a236de2c98a9a0482697913e8 Mon Sep 17 00:00:00 2001 From: Caleb Bassi Date: Tue, 15 May 2018 13:48:26 -0700 Subject: [PATCH] Separate temp widget by platform --- src/widgets/temp.go | 15 ---------- src/widgets/temp_darwin.go | 57 +++++++++++++++++++++++++++++++++++++ src/widgets/temp_linux.go | 19 +++++++++++++ src/widgets/temp_windows.go | 12 ++++++++ 4 files changed, 88 insertions(+), 15 deletions(-) create mode 100644 src/widgets/temp_darwin.go create mode 100644 src/widgets/temp_linux.go create mode 100644 src/widgets/temp_windows.go diff --git a/src/widgets/temp.go b/src/widgets/temp.go index 2759c1a..c366cb2 100644 --- a/src/widgets/temp.go +++ b/src/widgets/temp.go @@ -6,11 +6,9 @@ package widgets import ( "fmt" "sort" - "strings" "time" ui "github.com/cjbassi/termui" - psHost "github.com/shirou/gopsutil/host" ) type Temp struct { @@ -43,18 +41,6 @@ func NewTemp() *Temp { return self } -func (self *Temp) update() { - sensors, _ := psHost.SensorsTemperatures() - for _, sensor := range sensors { - // only sensors with input in their name are giving us live temp info - if strings.Contains(sensor.SensorKey, "input") { - // removes '_input' from the end of the sensor name - label := sensor.SensorKey[:strings.Index(sensor.SensorKey, "_input")] - self.Data[label] = int(sensor.Temperature) - } - } -} - // Buffer implements ui.Bufferer interface and renders the widget. func (self *Temp) Buffer() *ui.Buffer { buf := self.Block.Buffer() @@ -78,7 +64,6 @@ func (self *Temp) Buffer() *ui.Buffer { s := ui.MaxString(key, (self.X - 4)) buf.SetString(1, y+1, s, self.Fg, self.Bg) buf.SetString(self.X-2, y+1, fmt.Sprintf("%2dC", self.Data[key]), fg, self.Bg) - } return buf diff --git a/src/widgets/temp_darwin.go b/src/widgets/temp_darwin.go new file mode 100644 index 0000000..910cfed --- /dev/null +++ b/src/widgets/temp_darwin.go @@ -0,0 +1,57 @@ +// TODO do we need to add '+build cgo'? + +package widgets + +// #cgo LDFLAGS: -framework IOKit +// #include "include/smc.c" +import "C" + +type TemperatureStat struct { + SensorKey string `json:"sensorKey"` + Temperature float64 `json:"sensorTemperature"` +} + +func SensorsTempatures() ([]TemperatureStat, error) { + temperatureKeys := []string{ + C.AMBIENT_AIR_0, + C.AMBIENT_AIR_1, + C.CPU_0_DIODE, + C.CPU_0_HEATSINK, + C.CPU_0_PROXIMITY, + C.ENCLOSURE_BASE_0, + C.ENCLOSURE_BASE_1, + C.ENCLOSURE_BASE_2, + C.ENCLOSURE_BASE_3, + C.GPU_0_DIODE, + C.GPU_0_HEATSINK, + C.GPU_0_PROXIMITY, + C.HARD_DRIVE_BAY, + C.MEMORY_SLOT_0, + C.MEMORY_SLOTS_PROXIMITY, + C.NORTHBRIDGE, + C.NORTHBRIDGE_DIODE, + C.NORTHBRIDGE_PROXIMITY, + C.THUNDERBOLT_0, + C.THUNDERBOLT_1, + C.WIRELESS_MODULE, + } + var temperatures []TemperatureStat + + C.open_smc() + defer C.close_smc() + + for _, key := range temperatureKeys { + temperatures = append(temperatures, TemperatureStat{ + SensorKey: key, + Temperature: float64(C.get_tmp(C.CString(key), C.CELSIUS)), + }) + } + return temperatures, nil +} + +func (self *Temp) update() { + sensors, _ := SensorsTemperatures() + for _, sensor := range sensors { + self.Data[sensor.SensorKey] = int(sensor.Temperature) + } +} diff --git a/src/widgets/temp_linux.go b/src/widgets/temp_linux.go new file mode 100644 index 0000000..e818863 --- /dev/null +++ b/src/widgets/temp_linux.go @@ -0,0 +1,19 @@ +package widgets + +import ( + "strings" + + psHost "github.com/shirou/gopsutil/host" +) + +func (self *Temp) update() { + sensors, _ := psHost.SensorsTemperatures() + for _, sensor := range sensors { + // only sensors with input in their name are giving us live temp info + if strings.Contains(sensor.SensorKey, "input") { + // removes '_input' from the end of the sensor name + label := sensor.SensorKey[:strings.Index(sensor.SensorKey, "_input")] + self.Data[label] = int(sensor.Temperature) + } + } +} diff --git a/src/widgets/temp_windows.go b/src/widgets/temp_windows.go new file mode 100644 index 0000000..99c2a87 --- /dev/null +++ b/src/widgets/temp_windows.go @@ -0,0 +1,12 @@ +package widgets + +import ( + psHost "github.com/shirou/gopsutil/host" +) + +func (self *Temp) update() { + sensors, _ := psHost.SensorsTemperatures() + for _, sensor := range sensors { + self.Data[sensor.SensorKey] = int(sensor.Temperature) + } +}