zephyr/drivers/sensor/shtcx/shtcx.h

83 lines
1.7 KiB
C

/*
* Copyright (c) 2021 Thomas Stranger
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_DRIVERS_SENSOR_SHTCX_SHTCX_H_
#define ZEPHYR_DRIVERS_SENSOR_SHTCX_SHTCX_H_
#include <device.h>
#include <devicetree.h>
#include <kernel.h>
#include <drivers/gpio.h>
/* common cmds */
#define SHTCX_CMD_READ_ID 0xEFC8
#define SHTCX_CMD_SOFT_RESET 0x805D
/* shtc3 only: */
#define SHTCX_CMD_SLEEP 0xB098
#define SHTCX_CMD_WAKEUP 0x3517
#define SHTCX_POWER_UP_TIME_US 240U
/* Soft reset time is 230us for shtc1 and 240us for shtc3 */
#define SHTCX_SOFT_RESET_TIME_US 240U
#define SHTCX_MAX_READ_LEN 6
#define SHTCX_WORD_LEN 2
#define SHTCX_CRC8_LEN 1
#define SHTC3_ID_MASK 0x083F
#define SHTC3_ID_VALUE 0x0807
#define SHTC1_ID_MASK 0x083F
#define SHTC1_ID_VALUE 0x0007
/* defines matching the related enums DT_ENUM_IDX: */
#define CHIP_SHTC1 0
#define CHIP_SHTC3 1
#define MEASURE_MODE_NORMAL 0
#define MEASURE_MODE_LOW_POWER 1
enum shtcx_chip {
SHTC1 = CHIP_SHTC1,
SHTC3 = CHIP_SHTC3,
};
enum shtcx_measure_mode {
NORMAL = MEASURE_MODE_NORMAL,
LOW_POWER = MEASURE_MODE_LOW_POWER,
};
struct shtcx_sample {
uint16_t temp;
uint16_t humidity;
} __packed __aligned(2);
struct shtcx_config {
const struct device *bus;
uint8_t base_address;
enum shtcx_chip chip;
enum shtcx_measure_mode measure_mode;
bool clock_stretching;
};
struct shtcx_data {
struct shtcx_sample sample;
};
static inline uint8_t shtcx_i2c_address(const struct device *dev)
{
const struct shtcx_config *dcp = dev->config;
return dcp->base_address;
}
static inline const struct device *shtcx_i2c_bus(const struct device *dev)
{
const struct shtcx_config *dcp = dev->config;
return dcp->bus;
}
#endif /* ZEPHYR_DRIVERS_SENSOR_SHTCX_SHTCX_H_ */