Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/modules/sht4xtemp A driver for the Sensirion SHT40/SHT41...
details: https://anonhg.NetBSD.org/src/rev/d6376985728e
branches: trunk
changeset: 988205:d6376985728e
user: brad <brad%NetBSD.org@localhost>
date: Sun Oct 03 17:27:02 2021 +0000
description:
A driver for the Sensirion SHT40/SHT41/SHT45 temperature and humidity
sensor. An example of this chip is:
https://www.adafruit.com/product/4885
This is a lower cost chip that provides higher then usual precision
according to the data sheet. This driver supports all of the published
functions that the chip has.
diffstat:
distrib/sets/lists/man/mi | 5 +-
distrib/sets/lists/modules/mi | 4 +-
share/man/man4/Makefile | 4 +-
share/man/man4/sht4xtemp.4 | 93 +++
sys/dev/i2c/files.i2c | 7 +-
sys/dev/i2c/sht4x.c | 886 +++++++++++++++++++++++++++++++++
sys/dev/i2c/sht4xreg.h | 44 +
sys/dev/i2c/sht4xvar.h | 72 ++
sys/modules/Makefile | 3 +-
sys/modules/sht4xtemp/Makefile | 11 +
sys/modules/sht4xtemp/sht4xtemp.ioconf | 7 +
11 files changed, 1130 insertions(+), 6 deletions(-)
diffs (truncated from 1244 to 300 lines):
diff -r ad8de5a679e2 -r d6376985728e distrib/sets/lists/man/mi
--- a/distrib/sets/lists/man/mi Sat Oct 02 22:14:32 2021 +0000
+++ b/distrib/sets/lists/man/mi Sun Oct 03 17:27:02 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1725 2021/08/01 21:56:26 andvar Exp $
+# $NetBSD: mi,v 1.1726 2021/10/03 17:27:02 brad Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -1723,6 +1723,7 @@
./usr/share/man/cat4/shb.0 man-sys-catman .cat
./usr/share/man/cat4/shmif.0 man-sys-catman .cat
./usr/share/man/cat4/shpcic.0 man-sys-catman .cat
+./usr/share/man/cat4/sht4xtemp.0 man-sys-catman .cat
./usr/share/man/cat4/si.0 man-sys-catman .cat
./usr/share/man/cat4/si70xxtemp.0 man-sys-catman .cat
./usr/share/man/cat4/siisata.0 man-sys-catman .cat
@@ -4896,6 +4897,7 @@
./usr/share/man/html4/shb.html man-sys-htmlman html
./usr/share/man/html4/shmif.html man-sys-htmlman html
./usr/share/man/html4/shpcic.html man-sys-htmlman html
+./usr/share/man/html4/sht4xtemp.html man-sys-htmlman html
./usr/share/man/html4/si.html man-sys-htmlman html
./usr/share/man/html4/si70xxtemp.html man-sys-htmlman html
./usr/share/man/html4/siisata.html man-sys-htmlman html
@@ -7975,6 +7977,7 @@
./usr/share/man/man4/shb.4 man-sys-man .man
./usr/share/man/man4/shmif.4 man-sys-man .man
./usr/share/man/man4/shpcic.4 man-sys-man .man
+./usr/share/man/man4/sht4xtemp.4 man-sys-man .man
./usr/share/man/man4/si.4 man-sys-man .man
./usr/share/man/man4/si70xxtemp.4 man-sys-man .man
./usr/share/man/man4/siisata.4 man-sys-man .man
diff -r ad8de5a679e2 -r d6376985728e distrib/sets/lists/modules/mi
--- a/distrib/sets/lists/modules/mi Sat Oct 02 22:14:32 2021 +0000
+++ b/distrib/sets/lists/modules/mi Sun Oct 03 17:27:02 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.146 2021/09/11 16:10:37 pgoyette Exp $
+# $NetBSD: mi,v 1.147 2021/10/03 17:27:02 brad Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -397,6 +397,8 @@
./@MODULEDIR@/securelevel/securelevel.kmod modules-base-kernel kmod
./@MODULEDIR@/sequencer modules-base-kernel kmod
./@MODULEDIR@/sequencer/sequencer.kmod modules-base-kernel kmod
+./@MODULEDIR@/sht4xtemp modules-base-kernel kmod
+./@MODULEDIR@/sht4xtemp/sht4xtemp.kmod modules-base-kernel kmod
./@MODULEDIR@/si70xxtemp modules-base-kernel kmod
./@MODULEDIR@/si70xxtemp/si70xxtemp.kmod modules-base-kernel kmod
./@MODULEDIR@/skipjack modules-base-kernel kmod
diff -r ad8de5a679e2 -r d6376985728e share/man/man4/Makefile
--- a/share/man/man4/Makefile Sat Oct 02 22:14:32 2021 +0000
+++ b/share/man/man4/Makefile Sun Oct 03 17:27:02 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.715 2021/08/01 21:56:27 andvar Exp $
+# $NetBSD: Makefile,v 1.716 2021/10/03 17:27:02 brad Exp $
# @(#)Makefile 8.1 (Berkeley) 6/18/93
MAN= aac.4 ac97.4 acardide.4 aceride.4 acphy.4 \
@@ -56,7 +56,7 @@
rnd.4 route.4 rs5c372rtc.4 rtk.4 rtsx.4 rtw.4 rtwn.4 rum.4 run.4 \
s390rtc.4 satalink.4 sbus.4 schide.4 \
scsi.4 sctp.4 sd.4 se.4 seeprom.4 sem.4 \
- ses.4 sf.4 sfb.4 sgsmix.4 shb.4 shmif.4 shpcic.4 si70xxtemp.4 \
+ ses.4 sf.4 sfb.4 sgsmix.4 shb.4 shmif.4 shpcic.4 sht4xtemp.4 si70xxtemp.4 \
siisata.4 siop.4 sip.4 siside.4 sk.4 sl.4 slide.4 \
sm.4 smscphy.4 smsh.4 sn.4 sony.4 spc.4 speaker.4 spif.4 sqphy.4 \
srt.4 ss.4 \
diff -r ad8de5a679e2 -r d6376985728e share/man/man4/sht4xtemp.4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/man/man4/sht4xtemp.4 Sun Oct 03 17:27:02 2021 +0000
@@ -0,0 +1,93 @@
+.\" $NetBSD: sht4xtemp.4,v 1.1 2021/10/03 17:27:02 brad Exp $
+.\"
+.\" Copyright (c) 2021 Brad Spencer <brad%anduin.eldar.org@localhost>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd September 28th, 2021
+.Dt SHT4XTEMP 4
+.Os
+.Sh NAME
+.Nm sht4xtemp
+.Nd Driver for Sensirion SHT40/SHT41/SHT45 sensor chip via I2C bus
+.Sh SYNOPSIS
+.Cd "sht4xtemp* at iic? addr 0x44"
+.Sh DESCRIPTION
+The
+.Nm
+driver provides measurements from the SHT40/SHT41/SHT45 humidity/temperature
+sensors via the
+.Xr envsys 4
+framework.
+The
+.Nm
+.Ar addr
+argument selects the address at the
+.Xr iic 4
+bus.
+The resolution, heater controls and crc validity can be changed through
+.Xr sysctl 8
+nodes.
+.Sh SYSCTL VARIABLES
+The following
+.Xr sysctl 3
+variables are provided:
+.Bl -tag -width indent
+.It hw.sht4xtemp0.resolutions
+Lists the resolutions supported by the driver and chip.
+.It hw.sht4xtemp0.resolution
+Set the resolution, or number of bits, used for %RH and temperature.
+Use one of the strings listed in hw.sht4xtemp.resolutions.
+.It hw.sht4xtemp0.ignorecrc
+If set, the crc calculation for %RH and temperature will be ignored.
+.It hw.sht4xtemp0.heateron
+Turn the heater on and off. Please note that the heater is turned on right
+before the measurement and runs for a pulse width of time. Then the measurement
+is taken and the heater is turned off. There is no way to keep the heater running
+with this chip.
+.It hw.sht4xtemp0.heaterstrength
+From 1 to 3, the amount of energy put into the heater.
+The higher the number, the more power used.
+.It hw.sht4xtemp0.heaterpulses
+Lists the valid heater pulses supported by the driver and chip.
+.It hw.sht4xtemp0.heaterpulse
+Set the heater pulse length. Use one of the strings listed in
+hw.sht4xtemp.heaterpulses
+.It hw.sht4xtemp0.debug
+If the driver is compiled with
+.Dv SI70XX_DEBUG ,
+this node will appear and can be used to set the debugging level.
+.It hw.sht4xtemp0.readattempts
+To read %RH or temperature the chip requires that the command be sent,
+then a delay must be observed before a read can be done to get the values
+back. The delays are documented in the datasheet for the chip.
+The driver will attempt to read back the values readattempts number of
+times.
+The default is 10 which should be more than enough for most purposes.
+.El
+.Sh SEE ALSO
+.Xr envsys 4 ,
+.Xr iic 4 ,
+.Xr envstat 8 ,
+.Xr sysctl 8
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Nx 10.0 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Brad Spencer Aq Mt brad%anduin.eldar.org@localhost .
diff -r ad8de5a679e2 -r d6376985728e sys/dev/i2c/files.i2c
--- a/sys/dev/i2c/files.i2c Sat Oct 02 22:14:32 2021 +0000
+++ b/sys/dev/i2c/files.i2c Sun Oct 03 17:27:02 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.i2c,v 1.116 2021/07/27 20:23:41 macallan Exp $
+# $NetBSD: files.i2c,v 1.117 2021/10/03 17:27:02 brad Exp $
obsolete defflag opt_i2cbus.h I2C_SCAN
define i2cbus { }
@@ -395,6 +395,11 @@
attach cwfg at iic
file dev/i2c/cwfg.c cwfg
+# Sensirion SHT40/SHT41/SHT45 Temperature and Humidity sensor
+device sht4xtemp
+attach sht4xtemp at iic
+file dev/i2c/sht4x.c sht4xtemp
+
# Philips PCA955x GPIO
device pcagpio: leds
attach pcagpio at iic
diff -r ad8de5a679e2 -r d6376985728e sys/dev/i2c/sht4x.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/dev/i2c/sht4x.c Sun Oct 03 17:27:02 2021 +0000
@@ -0,0 +1,886 @@
+/* $NetBSD: sht4x.c,v 1.1 2021/10/03 17:27:02 brad Exp $ */
+
+/*
+ * Copyright (c) 2021 Brad Spencer <brad%anduin.eldar.org@localhost>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: sht4x.c,v 1.1 2021/10/03 17:27:02 brad Exp $");
+
+/*
+ Driver for the Sensirion SHT40/SHT41/SHT45
+*/
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/device.h>
+#include <sys/module.h>
+#include <sys/sysctl.h>
+#include <sys/mutex.h>
+
+#include <dev/sysmon/sysmonvar.h>
+#include <dev/i2c/i2cvar.h>
+#include <dev/i2c/sht4xreg.h>
+#include <dev/i2c/sht4xvar.h>
+
+
+static uint8_t sht4x_crc(uint8_t *, size_t);
+static int sht4x_poke(i2c_tag_t, i2c_addr_t, bool);
+static int sht4x_match(device_t, cfdata_t, void *);
+static void sht4x_attach(device_t, device_t, void *);
+static int sht4x_detach(device_t, int);
+static void sht4x_refresh(struct sysmon_envsys *, envsys_data_t *);
+static int sht4x_verify_sysctl(SYSCTLFN_ARGS);
+static int sht4x_verify_sysctl_resolution(SYSCTLFN_ARGS);
+static int sht4x_verify_sysctl_heateron(SYSCTLFN_ARGS);
+static int sht4x_verify_sysctl_heatervalue(SYSCTLFN_ARGS);
+static int sht4x_verify_sysctl_heaterpulse(SYSCTLFN_ARGS);
+
+#define SHT4X_DEBUG
+#ifdef SHT4X_DEBUG
+#define DPRINTF(s, l, x) \
+ do { \
+ if (l <= s->sc_sht4xdebug) \
+ printf x; \
+ } while (/*CONSTCOND*/0)
+#else
+#define DPRINTF(s, l, x)
+#endif
+
+CFATTACH_DECL_NEW(sht4xtemp, sizeof(struct sht4x_sc),
+ sht4x_match, sht4x_attach, sht4x_detach, NULL);
+
+static struct sht4x_sensor sht4x_sensors[] = {
+ {
+ .desc = "humidity",
+ .type = ENVSYS_SRELHUMIDITY,
+ },
+ {
+ .desc = "temperature",
+ .type = ENVSYS_STEMP,
+ }
+};
+
+/* The typical delays are documented in the datasheet for the chip.
+ There is no need to be very accurate with these, just rough estimates
+ will work fine.
+*/
+
+static struct sht4x_timing sht4x_timings[] = {
+ {
+ .cmd = SHT4X_READ_SERIAL,
+ .typicaldelay = 5000,
+ },
+ {
+ .cmd = SHT4X_SOFT_RESET,
+ .typicaldelay = 1000,
+ },
+ {
+ .cmd = SHT4X_MEASURE_HIGH_PRECISION,
+ .typicaldelay = 8000,
+ },
+ {
+ .cmd = SHT4X_MEASURE_MEDIUM_PRECISION,
+ .typicaldelay = 4000,
+ },
+ {
+ .cmd = SHT4X_MEASURE_LOW_PRECISION,
+ .typicaldelay = 2000,
+ },
+ {
+ .cmd = SHT4X_MEASURE_HIGH_PRECISION_HIGH_HEAT_1_S,
+ .typicaldelay = 1000000,
+ },
+ {
+ .cmd = SHT4X_MEASURE_HIGH_PRECISION_MEDIUM_HEAT_1_S,
+ .typicaldelay = 1000000,
Home |
Main Index |
Thread Index |
Old Index