83 lines
1.7 KiB
C
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_ */
|