180 lines
5.6 KiB
C
180 lines
5.6 KiB
C
/* $OpenBSD: sensors.h,v 1.37 2020/07/15 07:13:57 kettenis Exp $ */
|
|
|
|
/*
|
|
* Copyright (c) 2003, 2004 Alexander Yurchenko <grange@openbsd.org>
|
|
* Copyright (c) 2006 Constantine A. Murenin <cnst+openbsd@bugmail.mojo.ru>
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef _SYS_SENSORS_H_
|
|
#define _SYS_SENSORS_H_
|
|
|
|
/* Sensor types */
|
|
enum sensor_type {
|
|
SENSOR_TEMP, /* temperature (uK) */
|
|
SENSOR_FANRPM, /* fan revolution speed */
|
|
SENSOR_VOLTS_DC, /* voltage (uV DC) */
|
|
SENSOR_VOLTS_AC, /* voltage (uV AC) */
|
|
SENSOR_OHMS, /* resistance */
|
|
SENSOR_WATTS, /* power (uW) */
|
|
SENSOR_AMPS, /* current (uA) */
|
|
SENSOR_WATTHOUR, /* power capacity (uWh) */
|
|
SENSOR_AMPHOUR, /* power capacity (uAh) */
|
|
SENSOR_INDICATOR, /* boolean indicator */
|
|
SENSOR_INTEGER, /* generic integer value */
|
|
SENSOR_PERCENT, /* percent (m%) */
|
|
SENSOR_LUX, /* illuminance (ulx) */
|
|
SENSOR_DRIVE, /* disk */
|
|
SENSOR_TIMEDELTA, /* system time error (nSec) */
|
|
SENSOR_HUMIDITY, /* humidity (m%RH) */
|
|
SENSOR_FREQ, /* frequency (uHz) */
|
|
SENSOR_ANGLE, /* angle (uDegrees) */
|
|
SENSOR_DISTANCE, /* distance (uMeter) */
|
|
SENSOR_PRESSURE, /* pressure (mPa) */
|
|
SENSOR_ACCEL, /* acceleration (u m/s^2) */
|
|
SENSOR_VELOCITY, /* velocity (u m/s) */
|
|
SENSOR_ENERGY, /* energy (uJ) */
|
|
SENSOR_MAX_TYPES
|
|
};
|
|
|
|
#ifndef _KERNEL
|
|
static const char * const sensor_type_s[SENSOR_MAX_TYPES + 1] = {
|
|
"temp",
|
|
"fan",
|
|
"volt",
|
|
"acvolt",
|
|
"resistance",
|
|
"power",
|
|
"current",
|
|
"watthour",
|
|
"amphour",
|
|
"indicator",
|
|
"raw",
|
|
"percent",
|
|
"illuminance",
|
|
"drive",
|
|
"timedelta",
|
|
"humidity",
|
|
"frequency",
|
|
"angle",
|
|
"distance",
|
|
"pressure",
|
|
"acceleration",
|
|
"velocity",
|
|
"energy",
|
|
"undefined"
|
|
};
|
|
#endif /* !_KERNEL */
|
|
|
|
#define SENSOR_DRIVE_EMPTY 1
|
|
#define SENSOR_DRIVE_READY 2
|
|
#define SENSOR_DRIVE_POWERUP 3
|
|
#define SENSOR_DRIVE_ONLINE 4
|
|
#define SENSOR_DRIVE_IDLE 5
|
|
#define SENSOR_DRIVE_ACTIVE 6
|
|
#define SENSOR_DRIVE_REBUILD 7
|
|
#define SENSOR_DRIVE_POWERDOWN 8
|
|
#define SENSOR_DRIVE_FAIL 9
|
|
#define SENSOR_DRIVE_PFAIL 10
|
|
|
|
/* Sensor states */
|
|
enum sensor_status {
|
|
SENSOR_S_UNSPEC, /* status is unspecified */
|
|
SENSOR_S_OK, /* status is ok */
|
|
SENSOR_S_WARN, /* status is warning */
|
|
SENSOR_S_CRIT, /* status is critical */
|
|
SENSOR_S_UNKNOWN /* status is unknown */
|
|
};
|
|
|
|
/* Sensor data:
|
|
* New fields should be added at the end to encourage backwards compat
|
|
*/
|
|
struct sensor {
|
|
char desc[32]; /* sensor description, may be empty */
|
|
struct timeval tv; /* sensor value last change time */
|
|
int64_t value; /* current value */
|
|
enum sensor_type type; /* sensor type */
|
|
enum sensor_status status; /* sensor status */
|
|
int numt; /* sensor number of .type type */
|
|
int flags; /* sensor flags */
|
|
#define SENSOR_FINVALID 0x0001 /* sensor is invalid */
|
|
#define SENSOR_FUNKNOWN 0x0002 /* sensor value is unknown */
|
|
};
|
|
|
|
/* Sensor device data:
|
|
* New fields should be added at the end to encourage backwards compat
|
|
*/
|
|
struct sensordev {
|
|
int num; /* sensordev number */
|
|
char xname[16]; /* unix device name */
|
|
int maxnumt[SENSOR_MAX_TYPES];
|
|
int sensors_count;
|
|
};
|
|
|
|
#ifdef _KERNEL
|
|
|
|
/* Sensor data */
|
|
struct ksensor {
|
|
SLIST_ENTRY(ksensor) list; /* device-scope list */
|
|
char desc[32]; /* sensor description, may be empty */
|
|
struct timeval tv; /* sensor value last change time */
|
|
int64_t value; /* current value */
|
|
enum sensor_type type; /* sensor type */
|
|
enum sensor_status status; /* sensor status */
|
|
int numt; /* sensor number of .type type */
|
|
int flags; /* sensor flags, ie. SENSOR_FINVALID */
|
|
};
|
|
SLIST_HEAD(ksensors_head, ksensor);
|
|
|
|
/* Sensor device data */
|
|
struct ksensordev {
|
|
SLIST_ENTRY(ksensordev) list;
|
|
int num; /* sensordev number */
|
|
char xname[16]; /* unix device name */
|
|
int maxnumt[SENSOR_MAX_TYPES];
|
|
int sensors_count;
|
|
struct ksensors_head sensors_list;
|
|
};
|
|
|
|
/* struct ksensordev */
|
|
void sensordev_install(struct ksensordev *);
|
|
void sensordev_deinstall(struct ksensordev *);
|
|
int sensordev_get(int, struct ksensordev **);
|
|
|
|
/* struct ksensor */
|
|
void sensor_attach(struct ksensordev *, struct ksensor *);
|
|
void sensor_detach(struct ksensordev *, struct ksensor *);
|
|
int sensor_find(int, enum sensor_type, int, struct ksensor **);
|
|
|
|
/* task scheduling */
|
|
struct sensor_task;
|
|
struct sensor_task *sensor_task_register(void *, void (*)(void *),
|
|
unsigned int);
|
|
void sensor_task_unregister(struct sensor_task *);
|
|
void sensor_quiesce(void);
|
|
void sensor_restart(void);
|
|
|
|
#endif /* _KERNEL */
|
|
|
|
#endif /* !_SYS_SENSORS_H_ */
|