aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/nRF5_SDK_15.0.0_a53641a/components/drivers_ext/hts221/hts221_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/components/drivers_ext/hts221/hts221_internal.h')
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/drivers_ext/hts221/hts221_internal.h235
1 files changed, 235 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/drivers_ext/hts221/hts221_internal.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/drivers_ext/hts221/hts221_internal.h
new file mode 100644
index 0000000..c4e538f
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/drivers_ext/hts221/hts221_internal.h
@@ -0,0 +1,235 @@
+/**
+ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#ifndef HTS221_INTERNAL_H
+#define HTS221_INTERNAL_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief HTS221 sensor registers.
+ */
+#define HTS221_REG_WHO_AM_I 0x0F
+#define HTS221_REG_AV_CONF 0x10
+#define HTS221_REG_CTRL_REG1 0x20
+#define HTS221_REG_CTRL_REG2 0x21
+#define HTS221_REG_CTRL_REG3 0x22
+#define HTS221_REG_STATUS_REG 0x27
+#define HTS221_REG_HUM_OUT_L 0x28
+#define HTS221_REG_HUM_OUT_H 0x29
+#define HTS221_REG_TEMP_OUT_L 0x2A
+#define HTS221_REG_TEMP_OUT_H 0x2B
+
+// Calibration registers
+#define HTS221_REG_CALIBRATION 0x30
+
+#define HTS221_REG_CALIBRATION_NUM 16
+#define HTS221_REG_CTRL_NUM 3
+
+// For auto incrementing address, msb in register address must be set to 1.
+#define HTS221_INCR_REG_MASK 0x80
+
+/**
+ * @brief AV_CONF register bitmasks.
+ */
+#define HTS221_DEF_AV_CONF 0x1B
+
+// Register validity bitmask.
+#define HTS221_AV_CONF_VALID_MASK 0xC0
+
+// Bitmasks for AVGT.
+#define HTS221_AVGT_POS 3
+#define HTS221_AVGT_MASK (7 << HTS221_AVGT_POS)
+
+// Bitmasks for AVGH.
+#define HTS221_AVGH_POS 0
+#define HTS221_AVGH_MASK (7 << HTS221_AVGH_POS)
+
+
+/**
+ * @brief Control register 1 bitmasks.
+ */
+
+// Register validity bitmask.
+#define HTS221_CTRL1_VALID_MASK 0x78
+
+// Bitmasks for PD.
+#define HTS221_PD_POS 7
+#define HTS221_PD_MASK (1 << HTS221_PD_POS)
+
+// Bitmasks for BDU.
+#define HTS221_BDU_POS 2
+#define HTS221_BDU_MASK (1 << HTS221_BDU_POS)
+
+// Bitmasks for ODR.
+#define HTS221_ODR_POS 0
+#define HTS221_ODR_MASK (3 << HTS221_ODR_POS)
+
+
+/**
+ * @brief Control register 2 bitmasks.
+ */
+
+// Register validity bitmask.
+#define HTS221_CTRL2_VALID_MASK 0x7C
+
+// Bitmasks for BOOT.
+#define HTS221_BOOT_POS 7
+#define HTS221_BOOT_MASK (1 << HTS221_BOOT_POS)
+
+// Bitmasks for Heater.
+#define HTS221_HEATER_POS 1
+#define HTS221_HEATER_MASK (1 << HTS221_HEATER_POS)
+
+// Bitmasks for ONE_SHOT.
+#define HTS221_ONE_SHOT_POS 0
+#define HTS221_ONE_SHOT_MASK (1 << HTS221_ONE_SHOT_POS)
+
+
+/**
+ * @brief Control register 3 bitmasks.
+ */
+
+// Register validity bitmask.
+#define HTS221_CTRL3_VALID_MASK 0x3B
+
+// Bitmasks for DRDY_H_L.
+#define HTS221_DRDY_H_L_POS 7
+#define HTS221_DRDY_H_L_MASK (1 << HTS221_DRDY_H_L_POS)
+
+// Bitmasks for PP_OD
+#define HTS221_PP_OD_POS 6
+#define HTS221_PP_OD_MASK (1 << HTS221_PP_OD_POS)
+
+// Bitmasks for DRDY_EN.
+#define HTS221_DRDY_EN_POS 2
+#define HTS221_DRDY_EN_MASK (1 << HTS221_DRDY_EN_POS)
+
+
+/**
+ * @brief Status register bitmasks.
+ */
+
+// Bitmasks for H_DA.
+#define HTS221_H_DA_POS 1
+#define HTS221_H_DA_MASK (1 << HTS221_H_DA_POS)
+
+// Bitmasks for T_DA
+#define HTS221_T_DA_POS 0
+#define HTS221_T_DA_MASK (1 << HTS221_T_DA_POS)
+
+
+/**
+ * @brief Structure holding calibration information.
+ */
+typedef struct
+{
+ uint8_t H0_rH_x2;
+ uint8_t H1_rH_x2;
+ uint16_t T0_degC_x8;
+ uint16_t T1_degC_x8;
+ int16_t H0_T0_OUT;
+ int16_t H1_T0_OUT;
+ int16_t T0_OUT;
+ int16_t T1_OUT;
+ uint16_t padding; //<- Additional memory needed to store all calibration registers.
+} hts221_calib_t;
+
+/**
+ * @brief Structure holding sensor instance
+ */
+typedef struct
+{
+ nrf_twi_sensor_t * const p_sensor_data;
+ uint8_t const sensor_addr;
+
+ hts221_calib_t calib_info;
+ uint8_t ctrl_reg1;
+ uint8_t ctrl_reg2;
+
+} hts221_instance_t;
+
+/**
+ * @brief Macro creating hts221 sensor instance.
+ */
+#define HTS221_INTERNAL_INSTANCE_DEF(_hts221_inst_name, _p_twi_sensor, _sensor_address) \
+ static hts221_instance_t _hts221_inst_name = \
+ { \
+ .p_sensor_data = _p_twi_sensor, \
+ .sensor_addr = _sensor_address, \
+ }
+
+#ifndef SUPPRESS_INLINE_IMPLEMENTATION
+
+__STATIC_INLINE ret_code_t hts221_who_am_i_read(hts221_instance_t * p_instance,
+ nrf_twi_sensor_reg_cb_t user_cb,
+ uint8_t * reg_val)
+{
+ ASSERT(p_instance != NULL);
+ return nrf_twi_sensor_reg_read(p_instance->p_sensor_data,
+ p_instance->sensor_addr,
+ HTS221_REG_WHO_AM_I,
+ user_cb,
+ reg_val,
+ 1);
+}
+
+__STATIC_INLINE ret_code_t hts221_status_read(hts221_instance_t * p_instance,
+ nrf_twi_sensor_reg_cb_t user_cb,
+ uint8_t * reg_val)
+{
+ ASSERT(p_instance != NULL);
+ return nrf_twi_sensor_reg_read(p_instance->p_sensor_data,
+ p_instance->sensor_addr,
+ HTS221_REG_STATUS_REG,
+ user_cb,
+ reg_val,
+ 1);
+}
+
+#endif //SUPPRESS_INLINE_IMPLEMENTATION
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // HTS221_INTERNAL_H