LIS3DH & BLE broadcast example for VTT Node V3 & mbed

Dependencies:   BLE_API TMP_nrf51 mbed nRF51822

Committer:
jejuho
Date:
Mon Jan 25 13:27:15 2016 +0000
Revision:
1:bd7fd35251ab
Parent:
0:de3e4a57ebe0
Initial version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jejuho 0:de3e4a57ebe0 1 #ifndef LIS3DH_H
jejuho 0:de3e4a57ebe0 2 #define LIS3DH_H
jejuho 0:de3e4a57ebe0 3
jejuho 0:de3e4a57ebe0 4 #include "mbed.h"
jejuho 0:de3e4a57ebe0 5
jejuho 0:de3e4a57ebe0 6 namespace mbed {
jejuho 0:de3e4a57ebe0 7
jejuho 0:de3e4a57ebe0 8 #ifndef __ARCHDEP__TYPES
jejuho 0:de3e4a57ebe0 9 #define __ARCHDEP__TYPES
jejuho 0:de3e4a57ebe0 10
jejuho 0:de3e4a57ebe0 11 typedef unsigned char u8_t;
jejuho 0:de3e4a57ebe0 12 typedef unsigned short int u16_t;
jejuho 0:de3e4a57ebe0 13 typedef short int i16_t;
jejuho 0:de3e4a57ebe0 14 typedef signed char i8_t;
jejuho 0:de3e4a57ebe0 15
jejuho 0:de3e4a57ebe0 16 #endif /*__ARCHDEP__TYPES*/
jejuho 0:de3e4a57ebe0 17
jejuho 0:de3e4a57ebe0 18 typedef u8_t LIS3DH_IntPinConf_t;
jejuho 0:de3e4a57ebe0 19 typedef u8_t LIS3DH_Axis_t;
jejuho 0:de3e4a57ebe0 20 typedef u8_t LIS3DH_Int1Conf_t;
jejuho 0:de3e4a57ebe0 21
jejuho 0:de3e4a57ebe0 22
jejuho 0:de3e4a57ebe0 23 //define structure
jejuho 0:de3e4a57ebe0 24 #ifndef __SHARED__TYPES
jejuho 0:de3e4a57ebe0 25 #define __SHARED__TYPES
jejuho 0:de3e4a57ebe0 26
jejuho 0:de3e4a57ebe0 27 typedef enum {
jejuho 0:de3e4a57ebe0 28 MEMS_SUCCESS = 0x01,
jejuho 0:de3e4a57ebe0 29 MEMS_ERROR = 0x00
jejuho 0:de3e4a57ebe0 30 } status_t;
jejuho 0:de3e4a57ebe0 31
jejuho 0:de3e4a57ebe0 32 typedef enum {
jejuho 0:de3e4a57ebe0 33 MEMS_ENABLE = 0x01,
jejuho 0:de3e4a57ebe0 34 MEMS_DISABLE = 0x00
jejuho 0:de3e4a57ebe0 35 } State_t;
jejuho 0:de3e4a57ebe0 36
jejuho 0:de3e4a57ebe0 37 typedef __packed struct {
jejuho 0:de3e4a57ebe0 38 i16_t AXIS_X;
jejuho 0:de3e4a57ebe0 39 i16_t AXIS_Y;
jejuho 0:de3e4a57ebe0 40 i16_t AXIS_Z;
jejuho 0:de3e4a57ebe0 41 } AxesRaw_t;
jejuho 0:de3e4a57ebe0 42
jejuho 0:de3e4a57ebe0 43 #endif /*__SHARED__TYPES*/
jejuho 0:de3e4a57ebe0 44
jejuho 0:de3e4a57ebe0 45 typedef enum {
jejuho 0:de3e4a57ebe0 46 LIS3DH_ODR_1Hz = 0x01,
jejuho 0:de3e4a57ebe0 47 LIS3DH_ODR_10Hz = 0x02,
jejuho 0:de3e4a57ebe0 48 LIS3DH_ODR_25Hz = 0x03,
jejuho 0:de3e4a57ebe0 49 LIS3DH_ODR_50Hz = 0x04,
jejuho 0:de3e4a57ebe0 50 LIS3DH_ODR_100Hz = 0x05,
jejuho 0:de3e4a57ebe0 51 LIS3DH_ODR_200Hz = 0x06,
jejuho 0:de3e4a57ebe0 52 LIS3DH_ODR_400Hz = 0x07,
jejuho 0:de3e4a57ebe0 53 LIS3DH_ODR_1620Hz_LP = 0x08,
jejuho 0:de3e4a57ebe0 54 LIS3DH_ODR_1344Hz_NP_5367HZ_LP = 0x09
jejuho 0:de3e4a57ebe0 55 } LIS3DH_ODR_t;
jejuho 0:de3e4a57ebe0 56
jejuho 0:de3e4a57ebe0 57 typedef enum {
jejuho 0:de3e4a57ebe0 58 LIS3DH_POWER_DOWN = 0x00,
jejuho 0:de3e4a57ebe0 59 LIS3DH_LOW_POWER = 0x01,
jejuho 0:de3e4a57ebe0 60 LIS3DH_NORMAL = 0x02
jejuho 0:de3e4a57ebe0 61 } LIS3DH_Mode_t;
jejuho 0:de3e4a57ebe0 62
jejuho 0:de3e4a57ebe0 63 typedef enum {
jejuho 0:de3e4a57ebe0 64 LIS3DH_HPM_NORMAL_MODE_RES = 0x00,
jejuho 0:de3e4a57ebe0 65 LIS3DH_HPM_REF_SIGNAL = 0x01,
jejuho 0:de3e4a57ebe0 66 LIS3DH_HPM_NORMAL_MODE = 0x02,
jejuho 0:de3e4a57ebe0 67 LIS3DH_HPM_AUTORESET_INT = 0x03
jejuho 0:de3e4a57ebe0 68 } LIS3DH_HPFMode_t;
jejuho 0:de3e4a57ebe0 69
jejuho 0:de3e4a57ebe0 70 typedef enum {
jejuho 0:de3e4a57ebe0 71 LIS3DH_HPFCF_0 = 0x00,
jejuho 0:de3e4a57ebe0 72 LIS3DH_HPFCF_1 = 0x01,
jejuho 0:de3e4a57ebe0 73 LIS3DH_HPFCF_2 = 0x02,
jejuho 0:de3e4a57ebe0 74 LIS3DH_HPFCF_3 = 0x03
jejuho 0:de3e4a57ebe0 75 } LIS3DH_HPFCutOffFreq_t;
jejuho 0:de3e4a57ebe0 76
jejuho 0:de3e4a57ebe0 77 typedef struct {
jejuho 0:de3e4a57ebe0 78 u16_t AUX_1;
jejuho 0:de3e4a57ebe0 79 u16_t AUX_2;
jejuho 0:de3e4a57ebe0 80 u16_t AUX_3;
jejuho 0:de3e4a57ebe0 81 } LIS3DH_Aux123Raw_t;
jejuho 0:de3e4a57ebe0 82
jejuho 0:de3e4a57ebe0 83 typedef enum {
jejuho 0:de3e4a57ebe0 84 LIS3DH_FULLSCALE_2 = 0x00,
jejuho 0:de3e4a57ebe0 85 LIS3DH_FULLSCALE_4 = 0x01,
jejuho 0:de3e4a57ebe0 86 LIS3DH_FULLSCALE_8 = 0x02,
jejuho 0:de3e4a57ebe0 87 LIS3DH_FULLSCALE_16 = 0x03
jejuho 0:de3e4a57ebe0 88 } LIS3DH_Fullscale_t;
jejuho 0:de3e4a57ebe0 89
jejuho 0:de3e4a57ebe0 90 typedef enum {
jejuho 0:de3e4a57ebe0 91 LIS3DH_BLE_LSB = 0x00,
jejuho 0:de3e4a57ebe0 92 LIS3DH_BLE_MSB = 0x01
jejuho 0:de3e4a57ebe0 93 } LIS3DH_Endianess_t;
jejuho 0:de3e4a57ebe0 94
jejuho 0:de3e4a57ebe0 95 typedef enum {
jejuho 0:de3e4a57ebe0 96 LIS3DH_SELF_TEST_DISABLE = 0x00,
jejuho 0:de3e4a57ebe0 97 LIS3DH_SELF_TEST_0 = 0x01,
jejuho 0:de3e4a57ebe0 98 LIS3DH_SELF_TEST_1 = 0x02
jejuho 0:de3e4a57ebe0 99 } LIS3DH_SelfTest_t;
jejuho 0:de3e4a57ebe0 100
jejuho 0:de3e4a57ebe0 101 typedef enum {
jejuho 0:de3e4a57ebe0 102 LIS3DH_FIFO_BYPASS_MODE = 0x00,
jejuho 0:de3e4a57ebe0 103 LIS3DH_FIFO_MODE = 0x01,
jejuho 0:de3e4a57ebe0 104 LIS3DH_FIFO_STREAM_MODE = 0x02,
jejuho 0:de3e4a57ebe0 105 LIS3DH_FIFO_TRIGGER_MODE = 0x03,
jejuho 0:de3e4a57ebe0 106 LIS3DH_FIFO_DISABLE = 0x04
jejuho 0:de3e4a57ebe0 107 } LIS3DH_FifoMode_t;
jejuho 0:de3e4a57ebe0 108
jejuho 0:de3e4a57ebe0 109 typedef enum {
jejuho 0:de3e4a57ebe0 110 LIS3DH_TRIG_INT1 = 0x00,
jejuho 0:de3e4a57ebe0 111 LIS3DH_TRIG_INT2 = 0x01
jejuho 0:de3e4a57ebe0 112 } LIS3DH_TrigInt_t;
jejuho 0:de3e4a57ebe0 113
jejuho 0:de3e4a57ebe0 114 typedef enum {
jejuho 0:de3e4a57ebe0 115 LIS3DH_SPI_4_WIRE = 0x00,
jejuho 0:de3e4a57ebe0 116 LIS3DH_SPI_3_WIRE = 0x01
jejuho 0:de3e4a57ebe0 117 } LIS3DH_SPIMode_t;
jejuho 0:de3e4a57ebe0 118
jejuho 0:de3e4a57ebe0 119 typedef enum {
jejuho 0:de3e4a57ebe0 120 LIS3DH_X_ENABLE = 0x01,
jejuho 0:de3e4a57ebe0 121 LIS3DH_X_DISABLE = 0x00,
jejuho 0:de3e4a57ebe0 122 LIS3DH_Y_ENABLE = 0x02,
jejuho 0:de3e4a57ebe0 123 LIS3DH_Y_DISABLE = 0x00,
jejuho 0:de3e4a57ebe0 124 LIS3DH_Z_ENABLE = 0x04,
jejuho 0:de3e4a57ebe0 125 LIS3DH_Z_DISABLE = 0x00
jejuho 0:de3e4a57ebe0 126 } LIS3DH_AXISenable_t;
jejuho 0:de3e4a57ebe0 127
jejuho 0:de3e4a57ebe0 128 typedef enum {
jejuho 0:de3e4a57ebe0 129 LIS3DH_INT1_6D_4D_DISABLE = 0x00,
jejuho 0:de3e4a57ebe0 130 LIS3DH_INT1_6D_ENABLE = 0x01,
jejuho 0:de3e4a57ebe0 131 LIS3DH_INT1_4D_ENABLE = 0x02
jejuho 0:de3e4a57ebe0 132 } LIS3DH_INT_6D_4D_t;
jejuho 0:de3e4a57ebe0 133
jejuho 0:de3e4a57ebe0 134 typedef enum {
jejuho 0:de3e4a57ebe0 135 LIS3DH_UP_SX = 0x44,
jejuho 0:de3e4a57ebe0 136 LIS3DH_UP_DX = 0x42,
jejuho 0:de3e4a57ebe0 137 LIS3DH_DW_SX = 0x41,
jejuho 0:de3e4a57ebe0 138 LIS3DH_DW_DX = 0x48,
jejuho 0:de3e4a57ebe0 139 LIS3DH_TOP = 0x60,
jejuho 0:de3e4a57ebe0 140 LIS3DH_BOTTOM = 0x50
jejuho 0:de3e4a57ebe0 141 } LIS3DH_POSITION_6D_t;
jejuho 0:de3e4a57ebe0 142
jejuho 0:de3e4a57ebe0 143 typedef enum {
jejuho 0:de3e4a57ebe0 144 LIS3DH_INT_MODE_OR = 0x00,
jejuho 0:de3e4a57ebe0 145 LIS3DH_INT_MODE_6D_MOVEMENT = 0x01,
jejuho 0:de3e4a57ebe0 146 LIS3DH_INT_MODE_AND = 0x02,
jejuho 0:de3e4a57ebe0 147 LIS3DH_INT_MODE_6D_POSITION = 0x03
jejuho 0:de3e4a57ebe0 148 } LIS3DH_Int1Mode_t;
jejuho 0:de3e4a57ebe0 149
jejuho 0:de3e4a57ebe0 150
jejuho 0:de3e4a57ebe0 151 //interrupt click response
jejuho 0:de3e4a57ebe0 152 // b7 = don't care b6 = IA b5 = DClick b4 = Sclick b3 = Sign
jejuho 0:de3e4a57ebe0 153 // b2 = z b1 = y b0 = x
jejuho 0:de3e4a57ebe0 154 typedef enum {
jejuho 0:de3e4a57ebe0 155 LIS3DH_DCLICK_Z_P = 0x24,
jejuho 0:de3e4a57ebe0 156 LIS3DH_DCLICK_Z_N = 0x2C,
jejuho 0:de3e4a57ebe0 157 LIS3DH_SCLICK_Z_P = 0x14,
jejuho 0:de3e4a57ebe0 158 LIS3DH_SCLICK_Z_N = 0x1C,
jejuho 0:de3e4a57ebe0 159 LIS3DH_DCLICK_Y_P = 0x22,
jejuho 0:de3e4a57ebe0 160 LIS3DH_DCLICK_Y_N = 0x2A,
jejuho 0:de3e4a57ebe0 161 LIS3DH_SCLICK_Y_P = 0x12,
jejuho 0:de3e4a57ebe0 162 LIS3DH_SCLICK_Y_N = 0x1A,
jejuho 0:de3e4a57ebe0 163 LIS3DH_DCLICK_X_P = 0x21,
jejuho 0:de3e4a57ebe0 164 LIS3DH_DCLICK_X_N = 0x29,
jejuho 0:de3e4a57ebe0 165 LIS3DH_SCLICK_X_P = 0x11,
jejuho 0:de3e4a57ebe0 166 LIS3DH_SCLICK_X_N = 0x19,
jejuho 0:de3e4a57ebe0 167 LIS3DH_NO_CLICK = 0x00
jejuho 0:de3e4a57ebe0 168 } LIS3DH_Click_Response;
jejuho 0:de3e4a57ebe0 169
jejuho 0:de3e4a57ebe0 170 //TODO: start from here and manage the shared macros etc before this
jejuho 0:de3e4a57ebe0 171
jejuho 0:de3e4a57ebe0 172 /* Exported constants --------------------------------------------------------*/
jejuho 0:de3e4a57ebe0 173
jejuho 0:de3e4a57ebe0 174 #ifndef __SHARED__CONSTANTS
jejuho 0:de3e4a57ebe0 175 #define __SHARED__CONSTANTS
jejuho 0:de3e4a57ebe0 176
jejuho 0:de3e4a57ebe0 177 #define MEMS_SET 0x01
jejuho 0:de3e4a57ebe0 178 #define MEMS_RESET 0x00
jejuho 0:de3e4a57ebe0 179
jejuho 0:de3e4a57ebe0 180 #endif /*__SHARED__CONSTANTS*/
jejuho 0:de3e4a57ebe0 181
jejuho 0:de3e4a57ebe0 182
jejuho 0:de3e4a57ebe0 183 //Register Definition
jejuho 0:de3e4a57ebe0 184 #define LIS3DH_WHO_AM_I 0x0F // device identification register (00110011 default value=0x33)
jejuho 0:de3e4a57ebe0 185
jejuho 0:de3e4a57ebe0 186 // CONTROL REGISTER 1
jejuho 0:de3e4a57ebe0 187 #define LIS3DH_CTRL_REG1 0x20
jejuho 0:de3e4a57ebe0 188 #define LIS3DH_ODR_BIT BIT(4)
jejuho 0:de3e4a57ebe0 189 #define LIS3DH_LPEN BIT(3)
jejuho 0:de3e4a57ebe0 190 #define LIS3DH_ZEN BIT(2)
jejuho 0:de3e4a57ebe0 191 #define LIS3DH_YEN BIT(1)
jejuho 0:de3e4a57ebe0 192 #define LIS3DH_XEN BIT(0)
jejuho 0:de3e4a57ebe0 193
jejuho 0:de3e4a57ebe0 194 //CONTROL REGISTER 2
jejuho 0:de3e4a57ebe0 195 #define LIS3DH_CTRL_REG2 0x21
jejuho 0:de3e4a57ebe0 196 #define LIS3DH_HPM BIT(6)
jejuho 0:de3e4a57ebe0 197 #define LIS3DH_HPCF BIT(4)
jejuho 0:de3e4a57ebe0 198 #define LIS3DH_FDS BIT(3)
jejuho 0:de3e4a57ebe0 199 #define LIS3DH_HPCLICK BIT(2)
jejuho 0:de3e4a57ebe0 200 #define LIS3DH_HPIS2 BIT(1)
jejuho 0:de3e4a57ebe0 201 #define LIS3DH_HPIS1 BIT(0)
jejuho 0:de3e4a57ebe0 202
jejuho 0:de3e4a57ebe0 203 //CONTROL REGISTER 3
jejuho 0:de3e4a57ebe0 204 #define LIS3DH_CTRL_REG3 0x22
jejuho 0:de3e4a57ebe0 205 #define LIS3DH_I1_CLICK BIT(7)
jejuho 0:de3e4a57ebe0 206 #define LIS3DH_I1_AOI1 BIT(6)
jejuho 0:de3e4a57ebe0 207 #define LIS3DH_I1_AOI2 BIT(5)
jejuho 0:de3e4a57ebe0 208 #define LIS3DH_I1_DRDY1 BIT(4)
jejuho 0:de3e4a57ebe0 209 #define LIS3DH_I1_DRDY2 BIT(3)
jejuho 0:de3e4a57ebe0 210 #define LIS3DH_I1_WTM BIT(2)
jejuho 0:de3e4a57ebe0 211 #define LIS3DH_I1_ORUN BIT(1)
jejuho 0:de3e4a57ebe0 212
jejuho 0:de3e4a57ebe0 213 //CONTROL REGISTER 6
jejuho 0:de3e4a57ebe0 214 #define LIS3DH_CTRL_REG6 0x25
jejuho 0:de3e4a57ebe0 215 #define LIS3DH_I2_CLICK BIT(7)
jejuho 0:de3e4a57ebe0 216 #define LIS3DH_I2_INT1 BIT(6)
jejuho 0:de3e4a57ebe0 217 #define LIS3DH_I2_BOOT BIT(4)
jejuho 0:de3e4a57ebe0 218 #define LIS3DH_H_LACTIVE BIT(1)
jejuho 0:de3e4a57ebe0 219
jejuho 0:de3e4a57ebe0 220 //TEMPERATURE CONFIG REGISTER
jejuho 0:de3e4a57ebe0 221 #define LIS3DH_TEMP_CFG_REG 0x1F
jejuho 0:de3e4a57ebe0 222 #define LIS3DH_ADC_PD BIT(7)
jejuho 0:de3e4a57ebe0 223 #define LIS3DH_TEMP_EN BIT(6)
jejuho 0:de3e4a57ebe0 224
jejuho 0:de3e4a57ebe0 225 //CONTROL REGISTER 4
jejuho 0:de3e4a57ebe0 226 #define LIS3DH_CTRL_REG4 0x23
jejuho 0:de3e4a57ebe0 227 #define LIS3DH_BDU BIT(7)
jejuho 0:de3e4a57ebe0 228 #define LIS3DH_BLE BIT(6)
jejuho 0:de3e4a57ebe0 229 #define LIS3DH_FS BIT(4)
jejuho 0:de3e4a57ebe0 230 #define LIS3DH_HR BIT(3)
jejuho 0:de3e4a57ebe0 231 #define LIS3DH_ST BIT(1)
jejuho 0:de3e4a57ebe0 232 #define LIS3DH_SIM BIT(0)
jejuho 0:de3e4a57ebe0 233
jejuho 0:de3e4a57ebe0 234 //CONTROL REGISTER 5
jejuho 0:de3e4a57ebe0 235 #define LIS3DH_CTRL_REG5 0x24
jejuho 0:de3e4a57ebe0 236 #define LIS3DH_BOOT BIT(7)
jejuho 0:de3e4a57ebe0 237 #define LIS3DH_FIFO_EN BIT(6)
jejuho 0:de3e4a57ebe0 238 #define LIS3DH_LIR_INT1 BIT(3)
jejuho 0:de3e4a57ebe0 239 #define LIS3DH_D4D_INT1 BIT(2)
jejuho 0:de3e4a57ebe0 240
jejuho 0:de3e4a57ebe0 241 //REFERENCE/DATA_CAPTURE
jejuho 0:de3e4a57ebe0 242 #define LIS3DH_REFERENCE_REG 0x26
jejuho 0:de3e4a57ebe0 243 #define LIS3DH_REF BIT(0)
jejuho 0:de3e4a57ebe0 244
jejuho 0:de3e4a57ebe0 245 //STATUS_REG_AXIES
jejuho 0:de3e4a57ebe0 246 #define LIS3DH_STATUS_REG 0x27
jejuho 0:de3e4a57ebe0 247 #define LIS3DH_ZYXOR BIT(7)
jejuho 0:de3e4a57ebe0 248 #define LIS3DH_ZOR BIT(6)
jejuho 0:de3e4a57ebe0 249 #define LIS3DH_YOR BIT(5)
jejuho 0:de3e4a57ebe0 250 #define LIS3DH_XOR BIT(4)
jejuho 0:de3e4a57ebe0 251 #define LIS3DH_ZYXDA BIT(3)
jejuho 0:de3e4a57ebe0 252 #define LIS3DH_ZDA BIT(2)
jejuho 0:de3e4a57ebe0 253 #define LIS3DH_YDA BIT(1)
jejuho 0:de3e4a57ebe0 254 #define LIS3DH_XDA BIT(0)
jejuho 0:de3e4a57ebe0 255
jejuho 0:de3e4a57ebe0 256 //STATUS_REG_AUX
jejuho 0:de3e4a57ebe0 257 #define LIS3DH_STATUS_AUX 0x07
jejuho 0:de3e4a57ebe0 258
jejuho 0:de3e4a57ebe0 259 //INTERRUPT 1 CONFIGURATION
jejuho 0:de3e4a57ebe0 260 #define LIS3DH_INT1_CFG 0x30
jejuho 0:de3e4a57ebe0 261 #define LIS3DH_ANDOR BIT(7)
jejuho 0:de3e4a57ebe0 262 #define LIS3DH_INT_6D BIT(6)
jejuho 0:de3e4a57ebe0 263 #define LIS3DH_ZHIE BIT(5)
jejuho 0:de3e4a57ebe0 264 #define LIS3DH_ZLIE BIT(4)
jejuho 0:de3e4a57ebe0 265 #define LIS3DH_YHIE BIT(3)
jejuho 0:de3e4a57ebe0 266 #define LIS3DH_YLIE BIT(2)
jejuho 0:de3e4a57ebe0 267 #define LIS3DH_XHIE BIT(1)
jejuho 0:de3e4a57ebe0 268 #define LIS3DH_XLIE BIT(0)
jejuho 0:de3e4a57ebe0 269
jejuho 0:de3e4a57ebe0 270 //FIFO CONTROL REGISTER
jejuho 0:de3e4a57ebe0 271 #define LIS3DH_FIFO_CTRL_REG 0x2E
jejuho 0:de3e4a57ebe0 272 #define LIS3DH_FM BIT(6)
jejuho 0:de3e4a57ebe0 273 #define LIS3DH_TR BIT(5)
jejuho 0:de3e4a57ebe0 274 #define LIS3DH_FTH BIT(0)
jejuho 0:de3e4a57ebe0 275
jejuho 0:de3e4a57ebe0 276 //CONTROL REG3 bit mask
jejuho 0:de3e4a57ebe0 277 #define LIS3DH_CLICK_ON_PIN_INT1_ENABLE 0x80
jejuho 0:de3e4a57ebe0 278 #define LIS3DH_CLICK_ON_PIN_INT1_DISABLE 0x00
jejuho 0:de3e4a57ebe0 279 #define LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE 0x40
jejuho 0:de3e4a57ebe0 280 #define LIS3DH_I1_INT1_ON_PIN_INT1_DISABLE 0x00
jejuho 0:de3e4a57ebe0 281 #define LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE 0x20
jejuho 0:de3e4a57ebe0 282 #define LIS3DH_I1_INT2_ON_PIN_INT1_DISABLE 0x00
jejuho 0:de3e4a57ebe0 283 #define LIS3DH_I1_DRDY1_ON_INT1_ENABLE 0x10
jejuho 0:de3e4a57ebe0 284 #define LIS3DH_I1_DRDY1_ON_INT1_DISABLE 0x00
jejuho 0:de3e4a57ebe0 285 #define LIS3DH_I1_DRDY2_ON_INT1_ENABLE 0x08
jejuho 0:de3e4a57ebe0 286 #define LIS3DH_I1_DRDY2_ON_INT1_DISABLE 0x00
jejuho 0:de3e4a57ebe0 287 #define LIS3DH_WTM_ON_INT1_ENABLE 0x04
jejuho 0:de3e4a57ebe0 288 #define LIS3DH_WTM_ON_INT1_DISABLE 0x00
jejuho 0:de3e4a57ebe0 289 #define LIS3DH_INT1_OVERRUN_ENABLE 0x02
jejuho 0:de3e4a57ebe0 290 #define LIS3DH_INT1_OVERRUN_DISABLE 0x00
jejuho 0:de3e4a57ebe0 291
jejuho 0:de3e4a57ebe0 292 //CONTROL REG6 bit mask
jejuho 0:de3e4a57ebe0 293 #define LIS3DH_CLICK_ON_PIN_INT2_ENABLE 0x80
jejuho 0:de3e4a57ebe0 294 #define LIS3DH_CLICK_ON_PIN_INT2_DISABLE 0x00
jejuho 0:de3e4a57ebe0 295 #define LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE 0x40
jejuho 0:de3e4a57ebe0 296 #define LIS3DH_I2_INT1_ON_PIN_INT2_DISABLE 0x00
jejuho 0:de3e4a57ebe0 297 #define LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE 0x20
jejuho 0:de3e4a57ebe0 298 #define LIS3DH_I2_INT2_ON_PIN_INT2_DISABLE 0x00
jejuho 0:de3e4a57ebe0 299 #define LIS3DH_I2_BOOT_ON_INT2_ENABLE 0x10
jejuho 0:de3e4a57ebe0 300 #define LIS3DH_I2_BOOT_ON_INT2_DISABLE 0x00
jejuho 0:de3e4a57ebe0 301 #define LIS3DH_INT_ACTIVE_HIGH 0x00
jejuho 0:de3e4a57ebe0 302 #define LIS3DH_INT_ACTIVE_LOW 0x02
jejuho 0:de3e4a57ebe0 303
jejuho 0:de3e4a57ebe0 304 //INT1_CFG bit mask
jejuho 0:de3e4a57ebe0 305 #define LIS3DH_INT1_AND 0x80
jejuho 0:de3e4a57ebe0 306 #define LIS3DH_INT1_OR 0x00
jejuho 0:de3e4a57ebe0 307 #define LIS3DH_INT1_ZHIE_ENABLE 0x20
jejuho 0:de3e4a57ebe0 308 #define LIS3DH_INT1_ZHIE_DISABLE 0x00
jejuho 0:de3e4a57ebe0 309 #define LIS3DH_INT1_ZLIE_ENABLE 0x10
jejuho 0:de3e4a57ebe0 310 #define LIS3DH_INT1_ZLIE_DISABLE 0x00
jejuho 0:de3e4a57ebe0 311 #define LIS3DH_INT1_YHIE_ENABLE 0x08
jejuho 0:de3e4a57ebe0 312 #define LIS3DH_INT1_YHIE_DISABLE 0x00
jejuho 0:de3e4a57ebe0 313 #define LIS3DH_INT1_YLIE_ENABLE 0x04
jejuho 0:de3e4a57ebe0 314 #define LIS3DH_INT1_YLIE_DISABLE 0x00
jejuho 0:de3e4a57ebe0 315 #define LIS3DH_INT1_XHIE_ENABLE 0x02
jejuho 0:de3e4a57ebe0 316 #define LIS3DH_INT1_XHIE_DISABLE 0x00
jejuho 0:de3e4a57ebe0 317 #define LIS3DH_INT1_XLIE_ENABLE 0x01
jejuho 0:de3e4a57ebe0 318 #define LIS3DH_INT1_XLIE_DISABLE 0x00
jejuho 0:de3e4a57ebe0 319
jejuho 0:de3e4a57ebe0 320 //INT1_SRC bit mask
jejuho 0:de3e4a57ebe0 321 #define LIS3DH_INT1_SRC_IA 0x40
jejuho 0:de3e4a57ebe0 322 #define LIS3DH_INT1_SRC_ZH 0x20
jejuho 0:de3e4a57ebe0 323 #define LIS3DH_INT1_SRC_ZL 0x10
jejuho 0:de3e4a57ebe0 324 #define LIS3DH_INT1_SRC_YH 0x08
jejuho 0:de3e4a57ebe0 325 #define LIS3DH_INT1_SRC_YL 0x04
jejuho 0:de3e4a57ebe0 326 #define LIS3DH_INT1_SRC_XH 0x02
jejuho 0:de3e4a57ebe0 327 #define LIS3DH_INT1_SRC_XL 0x01
jejuho 0:de3e4a57ebe0 328
jejuho 0:de3e4a57ebe0 329 //INT1 REGISTERS
jejuho 0:de3e4a57ebe0 330 #define LIS3DH_INT1_THS 0x32
jejuho 0:de3e4a57ebe0 331 #define LIS3DH_INT1_DURATION 0x33
jejuho 0:de3e4a57ebe0 332
jejuho 0:de3e4a57ebe0 333 //INTERRUPT 1 SOURCE REGISTER
jejuho 0:de3e4a57ebe0 334 #define LIS3DH_INT1_SRC 0x31
jejuho 0:de3e4a57ebe0 335
jejuho 0:de3e4a57ebe0 336 //FIFO Source Register bit Mask
jejuho 0:de3e4a57ebe0 337 #define LIS3DH_FIFO_SRC_WTM 0x80
jejuho 0:de3e4a57ebe0 338 #define LIS3DH_FIFO_SRC_OVRUN 0x40
jejuho 0:de3e4a57ebe0 339 #define LIS3DH_FIFO_SRC_EMPTY 0x20
jejuho 0:de3e4a57ebe0 340
jejuho 0:de3e4a57ebe0 341 //INTERRUPT CLICK REGISTER
jejuho 0:de3e4a57ebe0 342 #define LIS3DH_CLICK_CFG 0x38
jejuho 0:de3e4a57ebe0 343 //INTERRUPT CLICK CONFIGURATION bit mask
jejuho 0:de3e4a57ebe0 344 #define LIS3DH_ZD_ENABLE 0x20
jejuho 0:de3e4a57ebe0 345 #define LIS3DH_ZD_DISABLE 0x00
jejuho 0:de3e4a57ebe0 346 #define LIS3DH_ZS_ENABLE 0x10
jejuho 0:de3e4a57ebe0 347 #define LIS3DH_ZS_DISABLE 0x00
jejuho 0:de3e4a57ebe0 348 #define LIS3DH_YD_ENABLE 0x08
jejuho 0:de3e4a57ebe0 349 #define LIS3DH_YD_DISABLE 0x00
jejuho 0:de3e4a57ebe0 350 #define LIS3DH_YS_ENABLE 0x04
jejuho 0:de3e4a57ebe0 351 #define LIS3DH_YS_DISABLE 0x00
jejuho 0:de3e4a57ebe0 352 #define LIS3DH_XD_ENABLE 0x02
jejuho 0:de3e4a57ebe0 353 #define LIS3DH_XD_DISABLE 0x00
jejuho 0:de3e4a57ebe0 354 #define LIS3DH_XS_ENABLE 0x01
jejuho 0:de3e4a57ebe0 355 #define LIS3DH_XS_DISABLE 0x00
jejuho 0:de3e4a57ebe0 356
jejuho 0:de3e4a57ebe0 357 //INTERRUPT CLICK SOURCE REGISTER
jejuho 0:de3e4a57ebe0 358 #define LIS3DH_CLICK_SRC 0x39
jejuho 0:de3e4a57ebe0 359 //INTERRUPT CLICK SOURCE REGISTER bit mask
jejuho 0:de3e4a57ebe0 360 #define LIS3DH_IA 0x40
jejuho 0:de3e4a57ebe0 361 #define LIS3DH_DCLICK 0x20
jejuho 0:de3e4a57ebe0 362 #define LIS3DH_SCLICK 0x10
jejuho 0:de3e4a57ebe0 363 #define LIS3DH_CLICK_SIGN 0x08
jejuho 0:de3e4a57ebe0 364 #define LIS3DH_CLICK_Z 0x04
jejuho 0:de3e4a57ebe0 365 #define LIS3DH_CLICK_Y 0x02
jejuho 0:de3e4a57ebe0 366 #define LIS3DH_CLICK_X 0x01
jejuho 0:de3e4a57ebe0 367
jejuho 0:de3e4a57ebe0 368 //Click-click Register
jejuho 0:de3e4a57ebe0 369 #define LIS3DH_CLICK_THS 0x3A
jejuho 0:de3e4a57ebe0 370 #define LIS3DH_TIME_LIMIT 0x3B
jejuho 0:de3e4a57ebe0 371 #define LIS3DH_TIME_LATENCY 0x3C
jejuho 0:de3e4a57ebe0 372 #define LIS3DH_TIME_WINDOW 0x3D
jejuho 0:de3e4a57ebe0 373
jejuho 0:de3e4a57ebe0 374 //OUTPUT REGISTER
jejuho 0:de3e4a57ebe0 375 #define LIS3DH_OUT_X_L 0x28
jejuho 0:de3e4a57ebe0 376 #define LIS3DH_OUT_X_H 0x29
jejuho 0:de3e4a57ebe0 377 #define LIS3DH_OUT_Y_L 0x2A
jejuho 0:de3e4a57ebe0 378 #define LIS3DH_OUT_Y_H 0x2B
jejuho 0:de3e4a57ebe0 379 #define LIS3DH_OUT_Z_L 0x2C
jejuho 0:de3e4a57ebe0 380 #define LIS3DH_OUT_Z_H 0x2D
jejuho 0:de3e4a57ebe0 381
jejuho 0:de3e4a57ebe0 382 //AUX REGISTER
jejuho 0:de3e4a57ebe0 383 #define LIS3DH_OUT_1_L 0x08
jejuho 0:de3e4a57ebe0 384 #define LIS3DH_OUT_1_H 0x09
jejuho 0:de3e4a57ebe0 385 #define LIS3DH_OUT_2_L 0x0A
jejuho 0:de3e4a57ebe0 386 #define LIS3DH_OUT_2_H 0x0B
jejuho 0:de3e4a57ebe0 387 #define LIS3DH_OUT_3_L 0x0C
jejuho 0:de3e4a57ebe0 388 #define LIS3DH_OUT_3_H 0x0D
jejuho 0:de3e4a57ebe0 389
jejuho 0:de3e4a57ebe0 390 //STATUS REGISTER bit mask
jejuho 0:de3e4a57ebe0 391 #define LIS3DH_STATUS_REG_ZYXOR 0x80 // 1 : new data set has over written the previous one
jejuho 0:de3e4a57ebe0 392 // 0 : no overrun has occurred (default)
jejuho 0:de3e4a57ebe0 393 #define LIS3DH_STATUS_REG_ZOR 0x40 // 0 : no overrun has occurred (default)
jejuho 0:de3e4a57ebe0 394 // 1 : new Z-axis data has over written the previous one
jejuho 0:de3e4a57ebe0 395 #define LIS3DH_STATUS_REG_YOR 0x20 // 0 : no overrun has occurred (default)
jejuho 0:de3e4a57ebe0 396 // 1 : new Y-axis data has over written the previous one
jejuho 0:de3e4a57ebe0 397 #define LIS3DH_STATUS_REG_XOR 0x10 // 0 : no overrun has occurred (default)
jejuho 0:de3e4a57ebe0 398 // 1 : new X-axis data has over written the previous one
jejuho 0:de3e4a57ebe0 399 #define LIS3DH_STATUS_REG_ZYXDA 0x08 // 0 : a new set of data is not yet avvious one
jejuho 0:de3e4a57ebe0 400 // 1 : a new set of data is available
jejuho 0:de3e4a57ebe0 401 #define LIS3DH_STATUS_REG_ZDA 0x04 // 0 : a new data for the Z-Axis is not availvious one
jejuho 0:de3e4a57ebe0 402 // 1 : a new data for the Z-Axis is available
jejuho 0:de3e4a57ebe0 403 #define LIS3DH_STATUS_REG_YDA 0x02 // 0 : a new data for the Y-Axis is not available
jejuho 0:de3e4a57ebe0 404 // 1 : a new data for the Y-Axis is available
jejuho 0:de3e4a57ebe0 405 #define LIS3DH_STATUS_REG_XDA 0x01 // 0 : a new data for the X-Axis is not available
jejuho 0:de3e4a57ebe0 406
jejuho 0:de3e4a57ebe0 407 #define LIS3DH_DATAREADY_BIT LIS3DH_STATUS_REG_ZYXDA
jejuho 0:de3e4a57ebe0 408
jejuho 0:de3e4a57ebe0 409
jejuho 0:de3e4a57ebe0 410 //STATUS AUX REGISTER bit mask
jejuho 0:de3e4a57ebe0 411 #define LIS3DH_STATUS_AUX_321OR 0x80
jejuho 0:de3e4a57ebe0 412 #define LIS3DH_STATUS_AUX_3OR 0x40
jejuho 0:de3e4a57ebe0 413 #define LIS3DH_STATUS_AUX_2OR 0x20
jejuho 0:de3e4a57ebe0 414 #define LIS3DH_STATUS_AUX_1OR 0x10
jejuho 0:de3e4a57ebe0 415 #define LIS3DH_STATUS_AUX_321DA 0x08
jejuho 0:de3e4a57ebe0 416 #define LIS3DH_STATUS_AUX_3DA 0x04
jejuho 0:de3e4a57ebe0 417 #define LIS3DH_STATUS_AUX_2DA 0x02
jejuho 0:de3e4a57ebe0 418 #define LIS3DH_STATUS_AUX_1DA 0x01
jejuho 0:de3e4a57ebe0 419
jejuho 0:de3e4a57ebe0 420 #define LIS3DH_MEMS_I2C_ADDRESS 0x33
jejuho 0:de3e4a57ebe0 421
jejuho 0:de3e4a57ebe0 422 //FIFO REGISTERS
jejuho 0:de3e4a57ebe0 423 #define LIS3DH_FIFO_CTRL_REG 0x2E
jejuho 0:de3e4a57ebe0 424 #define LIS3DH_FIFO_SRC_REG 0x2F
jejuho 0:de3e4a57ebe0 425
jejuho 0:de3e4a57ebe0 426
jejuho 0:de3e4a57ebe0 427 /* Exported macro ------------------------------------------------------------*/
jejuho 0:de3e4a57ebe0 428
jejuho 0:de3e4a57ebe0 429 #ifndef __SHARED__MACROS
jejuho 0:de3e4a57ebe0 430
jejuho 0:de3e4a57ebe0 431 #define __SHARED__MACROS
jejuho 0:de3e4a57ebe0 432 #define ValBit(VAR,Place) (VAR & (1<<Place))
jejuho 0:de3e4a57ebe0 433 #define BIT(x) ( (x) )
jejuho 0:de3e4a57ebe0 434
jejuho 0:de3e4a57ebe0 435 #endif /*__SHARED__MACROS*/
jejuho 0:de3e4a57ebe0 436
jejuho 0:de3e4a57ebe0 437 class LIS3DH
jejuho 0:de3e4a57ebe0 438 {
jejuho 0:de3e4a57ebe0 439 public:
jejuho 0:de3e4a57ebe0 440 LIS3DH(PinName mosi, PinName miso, PinName ss, PinName sck);
jejuho 0:de3e4a57ebe0 441 ~LIS3DH();
jejuho 0:de3e4a57ebe0 442
jejuho 0:de3e4a57ebe0 443 //own functions
jejuho 0:de3e4a57ebe0 444 u8_t InitLIS3DH(LIS3DH_Mode_t Mode, LIS3DH_ODR_t Odr, LIS3DH_Fullscale_t Grange);
jejuho 0:de3e4a57ebe0 445 u8_t SetLIS3DHActivityDetection(uint8_t Th, LIS3DH_Int1Mode_t Mode, uint8_t OnOff);
jejuho 0:de3e4a57ebe0 446
jejuho 0:de3e4a57ebe0 447 //Sensor Configuration Functions
jejuho 0:de3e4a57ebe0 448 status_t LIS3DH_SetODR(LIS3DH_ODR_t ov);
jejuho 0:de3e4a57ebe0 449 status_t LIS3DH_SetMode(LIS3DH_Mode_t md);
jejuho 0:de3e4a57ebe0 450 status_t LIS3DH_SetAxis(LIS3DH_Axis_t axis);
jejuho 0:de3e4a57ebe0 451 status_t LIS3DH_SetFullScale(LIS3DH_Fullscale_t fs);
jejuho 0:de3e4a57ebe0 452 status_t LIS3DH_SetBDU(State_t bdu);
jejuho 0:de3e4a57ebe0 453 status_t LIS3DH_SetBLE(LIS3DH_Endianess_t ble);
jejuho 0:de3e4a57ebe0 454 status_t LIS3DH_SetSelfTest(LIS3DH_SelfTest_t st);
jejuho 0:de3e4a57ebe0 455 status_t LIS3DH_SetTemperature(State_t state);
jejuho 0:de3e4a57ebe0 456 status_t LIS3DH_SetADCAux(State_t state);
jejuho 0:de3e4a57ebe0 457
jejuho 0:de3e4a57ebe0 458 //Filtering Functions
jejuho 0:de3e4a57ebe0 459 status_t LIS3DH_HPFClickEnable(State_t hpfe);
jejuho 0:de3e4a57ebe0 460 status_t LIS3DH_HPFAOI1Enable(State_t hpfe);
jejuho 0:de3e4a57ebe0 461 status_t LIS3DH_HPFAOI2Enable(State_t hpfe);
jejuho 0:de3e4a57ebe0 462 status_t LIS3DH_SetHPFMode(LIS3DH_HPFMode_t hpf);
jejuho 0:de3e4a57ebe0 463 status_t LIS3DH_SetHPFCutOFF(LIS3DH_HPFCutOffFreq_t hpf);
jejuho 0:de3e4a57ebe0 464 status_t LIS3DH_SetFilterDataSel(State_t state);
jejuho 0:de3e4a57ebe0 465
jejuho 0:de3e4a57ebe0 466 //Interrupt Functions
jejuho 0:de3e4a57ebe0 467 status_t LIS3DH_SetInt1Pin(LIS3DH_IntPinConf_t pinConf);
jejuho 0:de3e4a57ebe0 468 status_t LIS3DH_SetInt2Pin(LIS3DH_IntPinConf_t pinConf);
jejuho 0:de3e4a57ebe0 469 status_t LIS3DH_Int1LatchEnable(State_t latch);
jejuho 0:de3e4a57ebe0 470 status_t LIS3DH_ResetInt1Latch(void);
jejuho 0:de3e4a57ebe0 471 status_t LIS3DH_SetIntConfiguration(LIS3DH_Int1Conf_t ic);
jejuho 0:de3e4a57ebe0 472 status_t LIS3DH_SetInt1Threshold(u8_t ths);
jejuho 0:de3e4a57ebe0 473 status_t LIS3DH_SetInt1Duration(LIS3DH_Int1Conf_t id);
jejuho 0:de3e4a57ebe0 474 status_t LIS3DH_SetIntMode(LIS3DH_Int1Mode_t ic);
jejuho 0:de3e4a57ebe0 475 status_t LIS3DH_SetClickCFG(u8_t status);
jejuho 0:de3e4a57ebe0 476 status_t LIS3DH_SetClickTHS(u8_t ths);
jejuho 0:de3e4a57ebe0 477 status_t LIS3DH_SetClickLIMIT(u8_t t_limit);
jejuho 0:de3e4a57ebe0 478 status_t LIS3DH_SetClickLATENCY(u8_t t_latency);
jejuho 0:de3e4a57ebe0 479 status_t LIS3DH_SetClickWINDOW(u8_t t_window);
jejuho 0:de3e4a57ebe0 480 status_t LIS3DH_SetInt6D4DConfiguration(LIS3DH_INT_6D_4D_t ic);
jejuho 0:de3e4a57ebe0 481 status_t LIS3DH_GetInt1Src(u8_t* val);
jejuho 0:de3e4a57ebe0 482 status_t LIS3DH_GetInt1SrcBit(u8_t statusBIT, u8_t* val);
jejuho 0:de3e4a57ebe0 483
jejuho 0:de3e4a57ebe0 484 //FIFO Functions
jejuho 0:de3e4a57ebe0 485 status_t LIS3DH_FIFOModeEnable(LIS3DH_FifoMode_t fm);
jejuho 0:de3e4a57ebe0 486 status_t LIS3DH_SetWaterMark(u8_t wtm);
jejuho 0:de3e4a57ebe0 487 status_t LIS3DH_SetTriggerInt(LIS3DH_TrigInt_t tr);
jejuho 0:de3e4a57ebe0 488 status_t LIS3DH_GetFifoSourceReg(u8_t* val);
jejuho 0:de3e4a57ebe0 489 status_t LIS3DH_GetFifoSourceBit(u8_t statusBIT, u8_t* val);
jejuho 0:de3e4a57ebe0 490 status_t LIS3DH_GetFifoSourceFSS(u8_t* val);
jejuho 0:de3e4a57ebe0 491
jejuho 0:de3e4a57ebe0 492 //Other Reading Functions
jejuho 0:de3e4a57ebe0 493 status_t LIS3DH_GetStatusReg(u8_t* val);
jejuho 0:de3e4a57ebe0 494 status_t LIS3DH_GetStatusBit(u8_t statusBIT, u8_t* val);
jejuho 0:de3e4a57ebe0 495 status_t LIS3DH_GetStatusAUXBit(u8_t statusBIT, u8_t* val);
jejuho 0:de3e4a57ebe0 496 status_t LIS3DH_GetStatusAUX(u8_t* val);
jejuho 0:de3e4a57ebe0 497
jejuho 0:de3e4a57ebe0 498 status_t LIS3DH_GetAccAxesRaw(AxesRaw_t* buff);
jejuho 0:de3e4a57ebe0 499 status_t LIS3DH_GetAuxRaw(LIS3DH_Aux123Raw_t* buff);
jejuho 0:de3e4a57ebe0 500 status_t LIS3DH_GetClickResponse(u8_t* val);
jejuho 0:de3e4a57ebe0 501 status_t LIS3DH_GetTempRaw(i8_t* val);
jejuho 0:de3e4a57ebe0 502 status_t LIS3DH_GetWHO_AM_I(u8_t* val);
jejuho 0:de3e4a57ebe0 503 status_t LIS3DH_Get6DPosition(u8_t* val);
jejuho 0:de3e4a57ebe0 504
jejuho 0:de3e4a57ebe0 505 private:
jejuho 0:de3e4a57ebe0 506 u8_t LIS3DH_ReadReg(u8_t Reg, u8_t* Data);
jejuho 0:de3e4a57ebe0 507 u8_t LIS3DH_WriteReg(u8_t WriteAddr, u8_t Data);
jejuho 0:de3e4a57ebe0 508
jejuho 0:de3e4a57ebe0 509
jejuho 0:de3e4a57ebe0 510 protected:
jejuho 0:de3e4a57ebe0 511 SPI _spi;
jejuho 0:de3e4a57ebe0 512 DigitalOut _ss;
jejuho 0:de3e4a57ebe0 513
jejuho 0:de3e4a57ebe0 514 };
jejuho 0:de3e4a57ebe0 515 } //Namespace
jejuho 0:de3e4a57ebe0 516 #endif