--- netbsd.c.old 2009-11-22 14:20:52.000000000 +0100 +++ netbsd.c 2009-11-22 14:37:08.000000000 +0100 @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -345,7 +346,44 @@ double get_acpi_temperature(int fd) { (void) fd; - return -1; + envsys_basic_info_t info; /* sensor misc. info */ + struct envsys_tre_data sen_data; + double temp; + + /* iterate through available sensors, until the first invalid */ + for (info.sensor=0; ; info.sensor++) { + + /* stop if we can't ioctl() */ + if (ioctl(fd, ENVSYS_GTREINFO, &info) < 0) + break; + /* stop if that sensor is not valid */ + if (!(info.validflags & ENVSYS_FVALID)) + break; + + if (info.units == ENVSYS_STEMP) + break; + } + + /* get data from sensor */ + sen_data.sensor=info.sensor; + + if (ioctl(fd, ENVSYS_GTREDATA, &sen_data) == -1) { + (void)warn("Can't get sensor data for sensor acpitz"); + + return -1; + } + + /* test validity of returned data */ + if (!(sen_data.validflags & (ENVSYS_FVALID|ENVSYS_FCURVALID))) { + (void)warn("Invalid datas received"); + + return -1; + } + + /*count temperature*/ + temp = ((sen_data.cur.data_us / 1000000.0)-273.15); + + return temp; } int open_i2c_sensor(const char *dev, const char *type, int n, int *div) @@ -356,7 +394,16 @@ int open_acpi_temperature(const char *name) { (void) name; - return -1; + int fd; + + /* Open /dev/sysmon device to connect with envsys API */ + if (name == NULL) + name = _PATH_SYSMON; + + if ((fd = open(name, O_RDONLY)) == -1) + (void)warnx("cannot open %s", name); + + return fd; } static char acpi_ac_str[64] = "N/A";