2019-02-18 17:54:17 +08:00
|
|
|
package widgets
|
|
|
|
|
|
|
|
// #include <sys/time.h>
|
|
|
|
// #include <sys/sysctl.h>
|
|
|
|
// #include <sys/sensors.h>
|
|
|
|
import "C"
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strconv"
|
2019-02-18 21:09:36 +08:00
|
|
|
"syscall"
|
|
|
|
"unsafe"
|
2019-02-18 17:54:17 +08:00
|
|
|
|
|
|
|
"github.com/cjbassi/gotop/src/utils"
|
|
|
|
)
|
|
|
|
|
|
|
|
func gettemp(t *Temp, mib []C.int, mlen int, snsrdev *C.struct_sensordev, index int) {
|
|
|
|
if mlen == 4 {
|
|
|
|
k := mib[3]
|
|
|
|
var numt C.int
|
2019-02-18 21:09:36 +08:00
|
|
|
for numt = 0; numt < snsrdev.maxnumt[k]; numt++ {
|
2019-02-18 17:54:17 +08:00
|
|
|
mib[4] = numt
|
|
|
|
gettemp(t, mib, mlen+1, snsrdev, int(numt))
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if mlen == 5 {
|
|
|
|
var snsr C.struct_sensor
|
|
|
|
var slen C.size_t = C.sizeof_struct_sensor
|
|
|
|
|
|
|
|
if v, _ := C.sysctl(&mib[0], 5, unsafe.Pointer(&snsr), &slen, nil, 0); v == -1 {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2019-02-18 21:09:36 +08:00
|
|
|
if slen > 0 && (snsr.flags&C.SENSOR_FINVALID) == 0 {
|
2019-02-18 17:54:17 +08:00
|
|
|
key := C.GoString(&snsrdev.xname[0]) + ".temp" + strconv.Itoa(index)
|
|
|
|
temp := int((snsr.value - 273150000.0) / 1000000.0)
|
|
|
|
|
|
|
|
if t.Fahrenheit {
|
|
|
|
t.Data[key] = utils.CelsiusToFahrenheit(temp)
|
|
|
|
} else {
|
|
|
|
t.Data[key] = temp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (self *Temp) update() {
|
|
|
|
mib := []C.int{0, 1, 2, 3, 4}
|
|
|
|
|
|
|
|
var snsrdev C.struct_sensordev
|
|
|
|
var len C.ulong = C.sizeof_struct_sensordev
|
|
|
|
|
|
|
|
mib[0] = C.CTL_HW
|
|
|
|
mib[1] = C.HW_SENSORS
|
|
|
|
mib[3] = C.SENSOR_TEMP
|
|
|
|
|
|
|
|
var i C.int
|
2019-02-18 21:09:36 +08:00
|
|
|
for i = 0; ; i++ {
|
2019-02-18 17:54:17 +08:00
|
|
|
mib[2] = i
|
|
|
|
|
|
|
|
if v, e := C.sysctl(&mib[0], 3, unsafe.Pointer(&snsrdev), &len, nil, 0); v == -1 {
|
|
|
|
if e == syscall.ENXIO {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if e == syscall.ENOENT {
|
2019-02-18 21:09:36 +08:00
|
|
|
break
|
2019-02-18 17:54:17 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
gettemp(self, mib, 4, &snsrdev, 0)
|
|
|
|
}
|
|
|
|
}
|