From 175cfef2e18f9271b6faa881eff5e91ad4bf9ae3 Mon Sep 17 00:00:00 2001 From: Omar Polo Date: Mon, 18 Feb 2019 10:54:17 +0100 Subject: [PATCH] implemented Temp.update for openbsd --- src/widgets/temp_openbsd.go | 76 +++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/widgets/temp_openbsd.go diff --git a/src/widgets/temp_openbsd.go b/src/widgets/temp_openbsd.go new file mode 100644 index 0000000..1267b98 --- /dev/null +++ b/src/widgets/temp_openbsd.go @@ -0,0 +1,76 @@ +package widgets + +// #include +// #include +// #include +import "C" + +import ( + "unsafe" + "syscall" + "strconv" + + "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 + for numt = 0; numt < snsrdev.maxnumt[k]; numt += 1 { + 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 + } + + if slen > 0 && (snsr.flags & C.SENSOR_FINVALID) == 0 { + 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 + for i = 0; ; i += 1 { + 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 { + break; + } + } + + gettemp(self, mib, 4, &snsrdev, 0) + } +}