Introduce an interface to set and get temperature from devices. A device can have multiple temperature sensors. Each sensor might have a custom name.
Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- include/hw/misc/temp-sensor.h | 69 +++++++++++++++++++++++++++++++++++ hw/misc/temp-sensor.c | 25 +++++++++++++ MAINTAINERS | 6 +++ hw/misc/Makefile.objs | 1 + 4 files changed, 101 insertions(+) create mode 100644 include/hw/misc/temp-sensor.h create mode 100644 hw/misc/temp-sensor.c diff --git a/include/hw/misc/temp-sensor.h b/include/hw/misc/temp-sensor.h new file mode 100644 index 0000000000..3067b1dd2e --- /dev/null +++ b/include/hw/misc/temp-sensor.h @@ -0,0 +1,69 @@ +/* + * Generic interface for temperature sensors + * + * Copyright (c) 2020 Philippe Mathieu-Daudé + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef HW_MISC_TEMP_SENSOR_H +#define HW_MISC_TEMP_SENSOR_H + +#include "qom/object.h" + +#define TYPE_TEMPSENSOR_INTERFACE "temp-sensor-interface" +#define TEMPSENSOR_INTERFACE(obj) \ + INTERFACE_CHECK(TempSensor, (obj), TYPE_TEMPSENSOR_INTERFACE) +#define TEMPSENSOR_INTERFACE_CLASS(class) \ + OBJECT_CLASS_CHECK(TempSensorClass, (class), TYPE_TEMPSENSOR_INTERFACE) +#define TEMPSENSOR_INTERFACE_GET_CLASS(class) \ + OBJECT_GET_CLASS(TempSensorClass, (class), TYPE_TEMPSENSOR_INTERFACE) + +typedef struct TempSensor TempSensor; + +typedef struct TempSensorClass { + /* <private> */ + InterfaceClass parent; + /* <public> */ + + /** Number of temperature sensors */ + size_t sensor_count; + + /** + * get_name: + * @obj: opaque pointer to Object + * @sensor_id: sensor index + * + * Returns: name of a temperature sensor. + */ + const char *(*get_name)(TempSensor *obj, unsigned sensor_id); + + /** + * set_temperature: + * @obj: opaque pointer to Object + * @sensor_id: sensor index + * @temp_C: sensor temperature, in degree Celsius + * @errp: pointer to a NULL-initialized error object + * + * Set a sensor temperature. + * + * If an error occurs @errp will contain the details + * (likely temperature out of range). + */ + void (*set_temperature)(TempSensor *obj, + unsigned sensor_id, float temp_C, Error **errp); + + /** + * get_temperature: + * @obj: opaque pointer to Object + * @sensor_id: sensor index + * + * Get a sensor temperature. + * + * Returns: sensor temperature in °C. + */ + float (*get_temperature)(TempSensor *obj, unsigned sensor_id); +} TempSensorClass; + +#endif /* HW_MISC_TEMP_SENSOR_H */ diff --git a/hw/misc/temp-sensor.c b/hw/misc/temp-sensor.c new file mode 100644 index 0000000000..b7c1eb2d87 --- /dev/null +++ b/hw/misc/temp-sensor.c @@ -0,0 +1,25 @@ +/* + * Generic interface for temperature sensors + * + * Copyright (c) 2020 Philippe Mathieu-Daudé + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/misc/temp-sensor.h" + +static TypeInfo tempsensor_interface_type_info = { + .name = TYPE_TEMPSENSOR_INTERFACE, + .parent = TYPE_INTERFACE, + .class_size = sizeof(TempSensorClass), +}; + +static void tempsensor_register_types(void) +{ + type_register_static(&tempsensor_interface_type_info); +} + +type_init(tempsensor_register_types) diff --git a/MAINTAINERS b/MAINTAINERS index 8cbc1fac2b..5559110c56 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1575,6 +1575,12 @@ F: hw/sd/sd* F: hw/sd/ssi-sd.c F: tests/qtest/sd* +Temperature Sensors +M: Philippe Mathieu-Daudé <f4...@amsat.org> +S: Odd Fixes +F: hw/misc/temp-sensor.c +F: include/hw/misc/temp-sensor.h + USB M: Gerd Hoffmann <kra...@redhat.com> S: Maintained diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs index 68aae2eabb..4f90efb06d 100644 --- a/hw/misc/Makefile.objs +++ b/hw/misc/Makefile.objs @@ -90,3 +90,4 @@ common-obj-$(CONFIG_NRF51_SOC) += nrf51_rng.o obj-$(CONFIG_MAC_VIA) += mac_via.o common-obj-$(CONFIG_GRLIB) += grlib_ahb_apb_pnp.o +common-obj-y += temp-sensor.o -- 2.21.1