| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * resarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| #ifndef __LIS2DH12_H__ |
| #define __LIS2DH12_H__ |
| |
| #include "os/mynewt.h" |
| #include "sensor/sensor.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define LIS2DH12_OM_LOW_POWER 0x80 |
| #define LIS2DH12_OM_NORMAL 0x00 |
| #define LIS2DH12_OM_HIGH_RESOLUTION 0x08 |
| #define LIS2DH12_OM_NOT_ALLOWED 0x88 |
| |
| #define LIS2DH12_DATA_RATE_0HZ 0x00 |
| #define LIS2DH12_DATA_RATE_1HZ 0x10 |
| #define LIS2DH12_DATA_RATE_10HZ 0x20 |
| #define LIS2DH12_DATA_RATE_25HZ 0x30 |
| #define LIS2DH12_DATA_RATE_50HZ 0x40 |
| #define LIS2DH12_DATA_RATE_100HZ 0x50 |
| #define LIS2DH12_DATA_RATE_200HZ 0x60 |
| #define LIS2DH12_DATA_RATE_400HZ 0x70 |
| #define LIS2DH12_DATA_RATE_L_1620HZ 0x80 |
| #define LIS2DH12_DATA_RATE_HN_1344HZ_L_5376HZ 0x90 |
| |
| #define LIS2DH12_ST_MODE_DISABLE 0x00 |
| #define LIS2DH12_ST_MODE_MODE1 0x01 |
| #define LIS2DH12_ST_MODE_MODE2 0x02 |
| |
| #define LIS2DH12_HPF_M_NORMAL0 0x00 |
| #define LIS2DH12_HPF_M_REF 0x01 |
| #define LIS2DH12_HPF_M_NORMAL1 0x02 |
| #define LIS2DH12_HPF_M_AIE 0x03 |
| |
| #define LIS2DH12_HPCF_0 0x00 |
| #define LIS2DH12_HPCF_1 0x01 |
| #define LIS2DH12_HPCF_2 0x02 |
| #define LIS2DH12_HPCF_3 0x03 |
| |
| #define LIS2DH12_FIFO_M_BYPASS 0x00 |
| #define LIS2DH12_FIFO_M_FIFO 0x01 |
| #define LIS2DH12_FIFO_M_STREAM 0x02 |
| #define LIS2DH12_FIFO_M_STREAM_FIFO 0x03 |
| |
| #define LIS2DH12_INT1_CFG_M_OR 0x0 |
| #define LIS2DH12_INT1_CFG_M_6DM 0x1 |
| #define LIS2DH12_INT1_CFG_M_AND 0x2 |
| #define LIS2DH12_INT1_CFG_M_6PR 0x3 |
| |
| #define LIS2DH12_INT2_CFG_M_OR 0x0 |
| #define LIS2DH12_INT2_CFG_M_6DM 0x1 |
| #define LIS2DH12_INT2_CFG_M_AND 0x2 |
| #define LIS2DH12_INT2_CFG_M_6PR 0x3 |
| |
| #define LIS2DH12_FS_2G 0x00 |
| #define LIS2DH12_FS_4G 0x10 |
| #define LIS2DH12_FS_8G 0x20 |
| #define LIS2DH12_FS_16G 0x30 |
| |
| struct lis2dh12_cfg { |
| uint8_t lc_rate; |
| uint8_t lc_fs; |
| uint8_t lc_pull_up_disc; |
| sensor_type_t lc_s_mask; |
| }; |
| |
| struct lis2dh12 { |
| struct os_dev dev; |
| struct sensor sensor; |
| struct lis2dh12_cfg cfg; |
| os_time_t last_read_time; |
| }; |
| |
| /** |
| * Expects to be called back through os_dev_create(). |
| * |
| * @param ptr to the device object associated with this accelerometer |
| * @param argument passed to OS device init |
| * |
| * @return 0 on success, non-zero on failure. |
| */ |
| int lis2dh12_init(struct os_dev *dev, void *arg); |
| |
| /** |
| * Sets the full scale selection |
| * |
| * @param The sensor interface |
| * @param The rate |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| |
| int |
| lis2dh12_set_full_scale(struct sensor_itf *itf, uint8_t fs); |
| |
| /** |
| * Gets the full scale selection |
| * |
| * @param The sensor interface |
| * @param ptr to fs |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_get_full_scale(struct sensor_itf *itf, uint8_t *fs); |
| |
| /** |
| * Sets the rate |
| * |
| * @param The sensor interface |
| * @param The rate |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int lis2dh12_set_rate(struct sensor_itf *itf, uint8_t rate); |
| |
| /** |
| * Gets the current rate |
| * |
| * @param The sensor interface |
| * @param ptr to rate read from the sensor |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int lis2dh12_get_rate(struct sensor_itf *itf, uint8_t *rate); |
| |
| /** |
| * Enable channels |
| * |
| * @param sensor interface |
| * @param chan |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_chan_enable(struct sensor_itf *itf, uint8_t chan); |
| |
| /** |
| * Get chip ID |
| * |
| * @param sensor interface |
| * @param ptr to chip id to be filled up |
| */ |
| int |
| lis2dh12_get_chip_id(struct sensor_itf *itf, uint8_t *chip_id); |
| |
| /** |
| * Configure the sensor |
| * |
| * @param ptr to sensor driver |
| * @param ptr to sensor driver config |
| */ |
| int lis2dh12_config(struct lis2dh12 *, struct lis2dh12_cfg *); |
| |
| /** |
| * Calculates the acceleration in m/s^2 from mg |
| * |
| * @param raw acc value |
| * @param float ptr to return calculated value |
| * @param scale to calculate against |
| */ |
| void |
| lis2dh12_calc_acc_ms2(int16_t raw_acc, float *facc); |
| |
| /** |
| * Pull up disconnect |
| * |
| * @param The sensor interface |
| * @param disconnect pull up |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_pull_up_disc(struct sensor_itf *itf, uint8_t disconnect); |
| |
| /** |
| * Reset lis2dh12 |
| * |
| * @param The sensor interface |
| */ |
| int |
| lis2dh12_reset(struct sensor_itf *itf); |
| |
| /** |
| * Enable interrupt 2 |
| * |
| * @param the sensor interface |
| * @param events to enable int for |
| */ |
| int |
| lis2dh12_enable_int2(struct sensor_itf *itf, uint8_t *reg); |
| |
| /** |
| * Enable interrupt 1 |
| * |
| * @param the sensor interface |
| * @param events to enable int for |
| */ |
| int |
| lis2dh12_enable_int1(struct sensor_itf *itf, uint8_t *reg); |
| |
| /** |
| * Set interrupt threshold for int 1 |
| * |
| * @param the sensor interface |
| * @param threshold |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_set_int1_thresh(struct sensor_itf *itf, uint8_t ths); |
| |
| /** |
| * Set interrupt threshold for int 2 |
| * |
| * @param the sensor interface |
| * @param threshold |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_set_int2_thresh(struct sensor_itf *itf, uint8_t ths); |
| |
| /** |
| * Clear interrupt 1 |
| * |
| * @param the sensor interface |
| */ |
| int |
| lis2dh12_clear_int1(struct sensor_itf *itf); |
| |
| /** |
| * Clear interrupt 2 |
| * |
| * @param the sensor interface |
| */ |
| int |
| lis2dh12_clear_int2(struct sensor_itf *itf); |
| |
| /** |
| * Set interrupt pin configuration for interrupt 1 |
| * |
| * @param the sensor interface |
| * @param config |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_set_int1_pin_cfg(struct sensor_itf *itf, uint8_t cfg); |
| |
| /** |
| * Set interrupt pin configuration for interrupt 2 |
| * |
| * @param the sensor interface |
| * @param config |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_set_int2_pin_cfg(struct sensor_itf *itf, uint8_t cfg); |
| |
| /** |
| * Set interrupt 1 duration |
| * |
| * @param duration in N/ODR units |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_set_int1_duration(struct sensor_itf *itf, uint8_t dur); |
| |
| /** |
| * Set interrupt 2 duration |
| * |
| * @param duration in N/ODR units |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_set_int2_duration(struct sensor_itf *itf, uint8_t dur); |
| |
| /** |
| * Disable interrupt 1 |
| * |
| * @param the sensor interface |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_disable_int1(struct sensor_itf *itf); |
| |
| /** |
| * Disable interrupt 2 |
| * |
| * @param the sensor interface |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_disable_int2(struct sensor_itf *itf); |
| |
| /** |
| * Set high pass filter cfg |
| * |
| * @param the sensor interface |
| * @param filter register settings |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| lis2dh12_hpf_cfg(struct sensor_itf *itf, uint8_t reg); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __LIS2DH12_H__ */ |