freebsd-skq/sys/dev/ow
Ian Lepore d35f6548e6 Add inline functions to convert between sbintime_t and decimal time units.
Use them in some existing code that is vulnerable to roundoff errors.

The existing constant SBT_1NS is a honeypot, luring unsuspecting folks into
writing code such as long_timeout_ns*SBT_1NS to generate the argument for a
sleep call.  The actual value of 1ns in sbt units is ~4.3, leading to a
large roundoff error giving a shorter sleep than expected when multiplying
by the trucated value of 4 in SBT_1NS.  (The evil honeypot aspect becomes
clear after you waste a whole day figuring out why your sleeps return early.)
2017-07-29 17:00:23 +00:00
..
ow_temp.c ow_temp: Update the temperature visible via the sysctl atomically, rather 2016-12-22 00:09:53 +00:00
ow.c
ow.h
owc_gpiobus.c Add inline functions to convert between sbintime_t and decimal time units. 2017-07-29 17:00:23 +00:00
owll_if.m
owll.h
own_if.m
own.h
README.txt

Quick Design Document for 1-wire bus

In new bus terms, 1-wire devices are attached to 1-wire buses (ow)
which are attached to a one wire bridge (owc).

The implementation follows the terminology used in the Maxim AN927
Application note which defines the 1-wire bus as implemented for the
iButton product. This is considered to be the canonical definition of
the 1-wire bus. This means that the 1-wire bridge will implement the
owll(9) interface. ow is one wire. ll is for Link Level to mirror the ISO
stack terminology used by AN927. The 1-wire bus is implemented in the ow(4)
device, which implements the own(9) interface (n for network, the layer
described in the AN927). The presentation layer and above is the
responsibility of the client device drivers to implement.

Client drivers may only call the own(9) interface. The ow(4) driver
calls the owll(9) interface and implements the own(9).

$FreeBSD$