walnux/include/nuttx/sensors/msa301.h
simbit18 9681c52517 Fix nuttx coding style
Remove TABs
Fix indentation
2023-07-11 23:32:17 +08:00

161 lines
5.2 KiB
C

/****************************************************************************
* include/nuttx/sensors/msa301.h
* msa301 Driver declaration
*
* 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 regarding 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 __INCLUDE_NUTTX_SENSORS_MSA301_H
#define __INCLUDE_NUTTX_SENSORS_MSA301_H
#if defined(CONFIG_I2C) && defined(CONFIG_SENSORS_MSA301)
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/sensors/ioctl.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define MSA301_ACCEL_ADDR0 0x26
#define SNIOC_MSA301_START _SNIOC(0x0001)
#define SNIOC_MSA301_STOP _SNIOC(0x0002)
#define SNIOC_MSA301_SET_RANGE _SNIOC(0x0003)
#define SNIOC_MSA301_SET_RATE _SNIOC(0x0004)
#define MSA301_REG_PARTID 0x01
#define MSA301_REG_OUT_X_L 0x02
#define MSA301_REG_OUT_X_H 0x03
#define MSA301_REG_OUT_Y_L 0x04
#define MSA301_REG_OUT_Y_H 0x05
#define MSA301_REG_OUT_Z_L 0x06
#define MSA301_REG_OUT_Z_H 0x07
#define MSA301_REG_MOTIONINT 0x09
#define MSA301_REG_DATAINT 0x0A
#define MSA301_REG_CLICKSTATUS 0x0B
#define MSA301_REG_RESRANGE 0x0F
#define MSA301_REG_ODR 0x10
#define MSA301_REG_POWERMODE 0x11
#define MSA301_REG_INTSET0 0x16
#define MSA301_REG_INTSET1 0x17
#define MSA301_REG_INTMAP0 0x19
#define MSA301_REG_INTMAP1 0x1A
#define MSA301_REG_TAPDUR 0x2A
#define MSA301_REG_TAPTH 0x2B
/****************************************************************************
* Public Types
****************************************************************************/
/* The accelerometer ranges */
typedef enum
{
MSA301_RANGE_2_G = 0x0, /* +/- 2g */
MSA301_RANGE_4_G = 0x1, /* +/- 4g */
MSA301_RANGE_8_G = 0x2, /* +/- 8g */
MSA301_RANGE_16_G = 0x3, /* +/- 16g */
} msa301_range_t;
#define MSA301_CTL_RANGE_SHIFT (0x0)
#define MSA301_CTL_RANGE_MASK (0x3<<0)
/* The accelerometer data rate */
typedef enum
{
MSA301_RATE_1_HZ = 0, /* 1 Hz */
MSA301_RATE_1_95_HZ = 1, /* 1.95 Hz */
MSA301_RATE_3_9_HZ = 2, /* 3.9 Hz */
MSA301_RATE_7_81_HZ = 3, /* 7.81 Hz */
MSA301_RATE_15_63_HZ = 4, /* 15.63 Hz */
MSA301_RATE_31_25_HZ = 5, /* 31.25 Hz */
MSA301_RATE_62_5_HZ = 6, /* 62.5 Hz */
MSA301_RATE_125_HZ = 7, /* 125 Hz */
MSA301_RATE_250_HZ = 8, /* 250 Hz */
MSA301_RATE_500_HZ = 9, /* 500 Hz */
MSA301_RATE_1000_HZ = 10, /* 1000 Hz */
} msa301_rate_t;
#define MSA301_CTL_RATE_SHIFT (0x0)
#define MSA301_CTL_RATE_MASK (0xF<<0)
#define MSA301_ENABLE_AXIS (0x0)
#define MSA301_DISABLE_AXIS (0x7)
#define MSA301_CTL_AXIS_SHIFT (0x05)
#define MSA301_CTL_AXIS_MASK (0x7<<5)
/* The accelerometer power mode */
typedef enum
{
MSA301_NORMALMODE = 0x00, /* Normal (high speed) mode */
MSA301_LOWPOWERMODE = 0x01, /* Low power (slow speed) mode */
MSA301_SUSPENDMODE = 0x10, /* Suspend (sleep) mode */
} msa301_powermode_t;
#define MSA301_CTL_POWERMODE_SHIFT (0x6)
#define MSA301_CTL_POWERMODE_MASK (0x3<<6)
/* The accelerometer read resolution */
typedef enum
{
MSA301_RESOLUTION_14 = 0, /* 14-bit resolution */
MSA301_RESOLUTION_12 = 1, /* 12-bit resolution */
MSA301_RESOLUTION_10 = 2, /* 10-bit resolution */
MSA301_RESOLUTION_8 = 3, /* 8-bit resolution */
} msa301_resolution_t;
#define MSA301_CTL_RESOLUTION_SHIFT (0x2)
#define MSA301_CTL_RESOLUTION_MASK (0x3<<2)
struct msa301_sensor_data_s
{
int16_t x_data;
int16_t y_data;
int16_t z_data;
float x_acc; /* X axis acceleration */
float y_acc; /* Y axis acceleration */
float z_acc; /* Z axis acceleration */
};
#ifdef __cplusplus
extern "C"
{
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
int msa301_sensor_register(FAR const char *devpath,
FAR struct i2c_master_s *i2c
);
#ifdef __cplusplus
}
#endif
#endif /* CONFIG_I2C && CONFIG_SENSORS_MSA301 */
#endif /* __INCLUDE_NUTTX_SENSORS_MSA301_H */