1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2019, Joyent, Inc. 14 */ 15 16 #ifndef _SYS_SENSORS_H 17 #define _SYS_SENSORS_H 18 19 /* 20 * Consolidated sensor ioctls for various parts of the operating system. These 21 * interfaces should not be relied on at all. They are evolving and will change 22 * as we add more to the system for this. This may eventually become a larger 23 * framework, though it's more likely we'll consolidate that in userland. 24 */ 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 /* 31 * List of different possible kinds of sensors. 32 */ 33 #define SENSOR_KIND_UNKNOWN 0x00 34 #define SENSOR_KIND_TEMPERATURE 0x01 35 36 /* 37 * Lists of units that senors may have. 38 */ 39 #define SENSOR_UNIT_UNKNOWN 0x00 40 #define SENSOR_UNIT_CELSIUS 0x01 41 #define SENSOR_UNIT_FAHRENHEIT 0x02 42 #define SENSOR_UNIT_KELVIN 0x03 43 44 #define SENSOR_IOCTL (('s' << 24) | ('e' << 16) | ('n' << 8)) 45 46 /* 47 * Ask the sensor what kind of sensor it is. 48 */ 49 #define SENSOR_IOCTL_TYPE (SENSOR_IOCTL | 0x01) 50 51 typedef struct sensor_ioctl_kind { 52 uint64_t sik_kind; 53 } sensor_ioctl_kind_t; 54 55 /* 56 * Ask the sensor for a temperature measurement. The sensor is responsible for 57 * returning the units it's in. A temperature measurement is broken down into a 58 * signed value and a notion of its granularity. The sit_gran member indicates 59 * the granularity: the number of increments per degree in the temperature 60 * measurement (the sit_temp member). sit_gran is signed and the sign indicates 61 * whether one needs to multiply or divide the granularity. For example, a 62 * value that set sit_gran to 10 would mean that the value in sit_temp was in 63 * 10ths of a degree and that to get the actual value in degrees, one would 64 * divide by 10. On the other hand, a negative value means that we effectively 65 * have to multiply to get there. For example, a value of -2 would indicate that 66 * each value in sit_temp indicated two degrees and to get the temperature in 67 * degrees you would multiply sit_temp by two. 68 */ 69 #define SENSOR_IOCTL_TEMPERATURE (SENSOR_IOCTL | 0x02) 70 71 typedef struct sensor_ioctl_temperature { 72 uint32_t sit_unit; 73 int32_t sit_gran; 74 int64_t sit_temp; 75 } sensor_ioctl_temperature_t; 76 77 #ifdef __cplusplus 78 } 79 #endif 80 81 #endif /* _SYS_SENSORS_H */ 82