13#ifndef ZEPHYR_INCLUDE_DRIVERS_W1_H_ 
   14#define ZEPHYR_INCLUDE_DRIVERS_W1_H_ 
   43#define W1_SLAVE_COUNT(node_id) \ 
   44                (FOR_EACH(F1, (+), DT_SUPPORTS_DEP_ORDS(node_id)) - 1) 
   45#define W1_INST_SLAVE_COUNT(inst)  \ 
   46                (W1_SLAVE_COUNT(DT_DRV_INST(inst))) 
   73struct w1_master_config {
 
   79struct w1_master_data {
 
   84typedef int (*w1_reset_bus_t)(
const struct device *dev);
 
   85typedef int (*w1_read_bit_t)(
const struct device *dev);
 
   86typedef int (*w1_write_bit_t)(
const struct device *dev, 
bool bit);
 
   87typedef int (*w1_read_byte_t)(
const struct device *dev);
 
   88typedef int (*w1_write_byte_t)(
const struct device *dev, 
const uint8_t byte);
 
   93typedef size_t (*w1_get_slave_count_t)(
const struct device *dev);
 
   94typedef int (*w1_configure_t)(
const struct device *dev,
 
   97__subsystem 
struct w1_driver_api {
 
   98        w1_reset_bus_t reset_bus;
 
   99        w1_read_bit_t read_bit;
 
  100        w1_write_bit_t write_bit;
 
  101        w1_read_byte_t read_byte;
 
  102        w1_write_byte_t write_byte;
 
  103        w1_read_block_t read_block;
 
  104        w1_write_block_t write_block;
 
  105        w1_configure_t configure;
 
  110__syscall 
int w1_change_bus_lock(
const struct device *dev, 
bool lock);
 
  112static inline int z_impl_w1_change_bus_lock(
const struct device *dev, 
bool lock)
 
  114        struct w1_master_data *ctrl_data = (
struct w1_master_data *)dev->
data;
 
  138        return w1_change_bus_lock(dev, 
true);
 
  153        return w1_change_bus_lock(dev, 
false);
 
  184static inline int z_impl_w1_reset_bus(
const struct device *dev)
 
  186        const struct w1_driver_api *api = (
const struct w1_driver_api *)dev->
api;
 
  188        return api->reset_bus(dev);
 
  201static inline int z_impl_w1_read_bit(
const struct device *dev)
 
  203        const struct w1_driver_api *api = (
const struct w1_driver_api *)dev->
api;
 
  205        return api->read_bit(dev);
 
  219static inline int z_impl_w1_write_bit(
const struct device *dev, 
bool bit)
 
  221        const struct w1_driver_api *api = (
const struct w1_driver_api *)dev->
api;
 
  223        return api->write_bit(dev, bit);
 
  236static inline int z_impl_w1_read_byte(
const struct device *dev)
 
  238        const struct w1_driver_api *api = (
const struct w1_driver_api *)dev->
api;
 
  240        return api->read_byte(dev);
 
  254static inline int z_impl_w1_write_byte(
const struct device *dev, 
uint8_t byte)
 
  256        const struct w1_driver_api *api = (
const struct w1_driver_api *)dev->
api;
 
  258        return api->write_byte(dev, 
byte);
 
  296static inline size_t z_impl_w1_get_slave_count(
const struct device *dev)
 
  298        const struct w1_master_config *ctrl_cfg =
 
  299                (
const struct w1_master_config *)dev->
config;
 
  301        return ctrl_cfg->slave_count;
 
  321static inline int z_impl_w1_configure(
const struct device *dev,
 
  324        const struct w1_driver_api *api = (
const struct w1_driver_api *)dev->
api;
 
  326        return api->configure(dev, type, value);
 
  344#define W1_CMD_SKIP_ROM                 0xCC 
  345#define W1_CMD_MATCH_ROM                0x55 
  346#define W1_CMD_RESUME                   0xA5 
  347#define W1_CMD_READ_ROM                 0x33 
  348#define W1_CMD_SEARCH_ROM               0xF0 
  349#define W1_CMD_SEARCH_ALARM             0xEC 
  350#define W1_CMD_OVERDRIVE_SKIP_ROM       0x3C 
  351#define W1_CMD_OVERDRIVE_MATCH_ROM      0x69 
  361#define W1_CRC8_SEED            0x00 
  363#define W1_CRC8_POLYNOMIAL      0x8C 
  365#define W1_CRC16_SEED           0x0000 
  367#define W1_CRC16_POLYNOMIAL     0xa001 
  372#define W1_SEARCH_ALL_FAMILIES          0x00 
  375#define W1_ROM_INIT_ZERO                                        \ 
  377                .family = 0, .serial = { 0 }, .crc = 0,         \ 
  525                  const uint8_t *write_buf, 
size_t write_len,
 
  526                  uint8_t *read_buf, 
size_t read_len);
 
  672#include <syscalls/w1.h> 
static void sys_put_be64(uint64_t val, uint8_t dst[8])
Put a 64-bit integer as big-endian to arbitrary location.
Definition: byteorder.h:284
 
static uint64_t sys_get_be64(const uint8_t src[8])
Get a 64-bit integer stored in big-endian format.
Definition: byteorder.h:435
 
CRC computation function.
 
#define K_FOREVER
Generate infinite timeout delay.
Definition: kernel.h:1267
 
uint8_t crc8(const uint8_t *src, size_t len, uint8_t polynomial, uint8_t initial_value, bool reversed)
Generic function for computing CRC 8.
 
uint16_t crc16_reflect(uint16_t poly, uint16_t seed, const uint8_t *src, size_t len)
Generic function for computing a CRC-16 with input and output reflection.
 
int k_mutex_unlock(struct k_mutex *mutex)
Unlock a mutex.
 
int k_mutex_lock(struct k_mutex *mutex, k_timeout_t timeout)
Lock a mutex.
 
int w1_read_bit(const struct device *dev)
Read a single bit from the 1-Wire bus.
 
int w1_read_block(const struct device *dev, uint8_t *buffer, size_t len)
Read a block of data from the 1-Wire bus.
 
int w1_write_bit(const struct device *dev, const bool bit)
Write a single bit to the 1-Wire bus.
 
size_t w1_get_slave_count(const struct device *dev)
Get the number of slaves on the bus.
 
int w1_read_byte(const struct device *dev)
Read a single byte from the 1-Wire bus.
 
int w1_write_byte(const struct device *dev, uint8_t byte)
Write a single byte to the 1-Wire bus.
 
int w1_write_block(const struct device *dev, const uint8_t *buffer, size_t len)
Write a block of data from the 1-Wire bus.
 
int w1_reset_bus(const struct device *dev)
Reset the 1-Wire bus to prepare slaves for communication.
 
int w1_configure(const struct device *dev, enum w1_settings_type type, uint32_t value)
Configure parameters of the 1-Wire master.
 
w1_settings_type
Defines the 1-Wire master settings types, which are runtime configurable.
Definition: w1.h:53
 
static int w1_unlock_bus(const struct device *dev)
Unlock the 1-wire bus.
Definition: w1.h:151
 
static int w1_lock_bus(const struct device *dev)
Lock the 1-wire bus to prevent simultaneous access.
Definition: w1.h:136
 
@ W1_SETTING_SPEED
Definition: w1.h:57
 
@ W1_SETINGS_TYPE_COUNT
Definition: w1.h:67
 
@ W1_SETTING_STRONG_PULLUP
Definition: w1.h:62
 
static int w1_search_rom(const struct device *dev, w1_search_callback_t callback, void *user_data)
Search for 1-Wire slave on bus.
Definition: w1.h:571
 
static int w1_search_alarm(const struct device *dev, w1_search_callback_t callback, void *user_data)
Search for 1-Wire slaves with an active alarm.
Definition: w1.h:593
 
static uint64_t w1_rom_to_uint64(const struct w1_rom *rom)
Function to convert a w1_rom struct to an uint64_t.
Definition: w1.h:607
 
int w1_search_bus(const struct device *dev, uint8_t command, uint8_t family, w1_search_callback_t callback, void *user_data)
Search 1-wire slaves on the bus.
 
int w1_write_read(const struct device *dev, const struct w1_slave_config *config, const uint8_t *write_buf, size_t write_len, uint8_t *read_buf, size_t read_len)
Write then read data from the 1-Wire slave with matching ROM.
 
void(* w1_search_callback_t)(struct w1_rom rom, void *user_data)
Define the application callback handler function signature for searches.
Definition: w1.h:420
 
static uint8_t w1_crc8(const uint8_t *src, size_t len)
Compute CRC-8 chacksum as defined in the 1-Wire specification.
Definition: w1.h:635
 
int w1_match_rom(const struct device *dev, const struct w1_slave_config *config)
Select a specific slave by broadcasting a selected ROM.
 
static uint16_t w1_crc16(const uint16_t seed, const uint8_t *src, const size_t len)
Compute 1-Wire variant of CRC 16.
Definition: w1.h:655
 
#define W1_CMD_SEARCH_ROM
Definition: w1.h:348
 
int w1_resume_command(const struct device *dev)
Select the slave last addressed with a Match ROM or Search ROM commnad.
 
static void w1_uint64_to_rom(const uint64_t rom64, struct w1_rom *rom)
Function to write an uint64_t to struct w1_rom pointer.
Definition: w1.h:618
 
#define W1_SEARCH_ALL_FAMILIES
Definition: w1.h:372
 
int w1_read_rom(const struct device *dev, struct w1_rom *rom)
Read Peripheral 64-bit ROM.
 
int w1_reset_select(const struct device *dev, const struct w1_slave_config *config)
In single drop configurations use Skip Select command, otherweise use Match ROM command.
 
#define W1_CRC8_SEED
Definition: w1.h:361
 
#define W1_CRC16_POLYNOMIAL
Definition: w1.h:367
 
int w1_skip_rom(const struct device *dev, const struct w1_slave_config *config)
Select all slaves regardless of ROM.
 
#define W1_CRC8_POLYNOMIAL
Definition: w1.h:363
 
#define W1_CMD_SEARCH_ALARM
Definition: w1.h:349
 
static struct k_spinlock lock
Definition: spinlock_error_case.c:13
 
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
 
__UINT64_TYPE__ uint64_t
Definition: stdint.h:91
 
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
 
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
 
Runtime device structure (in ROM) per driver instance.
Definition: device.h:378
 
void * data
Definition: device.h:388
 
const void * api
Definition: device.h:384
 
const void * config
Definition: device.h:382
 
Definition: kernel.h:2764
 
w1_rom struct.
Definition: w1.h:383
 
uint8_t serial[6]
Definition: w1.h:392
 
uint8_t crc
Definition: w1.h:394
 
uint8_t family
The 1-Wire family code identifying the slave device type.
Definition: w1.h:390
 
Node specific 1-wire configuration struct.
Definition: w1.h:403
 
struct w1_rom rom
Definition: w1.h:405
 
uint32_t overdrive
Definition: w1.h:407
 
static ZTEST_BMEM char buffer[8]
Definition: test_mbox_api.c:551
 
static const intptr_t user_data[5]
Definition: main.c:588