rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Enumerations | Functions | Variables
accelerometer.cpp File Reference

Enumerations

enum  AccelType_t {
  ACCEL_UNK = 0 , ACCEL_LIS2DW12 , ACCEL_LIS2DH12 , ACCEL_LIS302DL ,
  ACCEL_LIS3DSH
}
 

Functions

void initAccelerometer ()
 

Variables

static SPIConfig accelerometerSpiCfg
 
OutputPin accelerometerChipSelect
 
static LIS2DW12Config lis2dw12cfg
 
static LIS2DW12Driver LIS2DW12
 
static LSM303AGRConfig lis2dh12cfg
 
static LSM303AGRDriver LIS2DH12
 
static LIS302DLConfig lis302dlcfg
 
static LIS302DLDriver LIS302DL
 
static LIS3DSHConfig lis3dshcfg
 
static LIS3DSHDriver LIS3DSH
 
static AccelType_t AccelType = ACCEL_UNK
 
static AccelController instance
 

Enumeration Type Documentation

◆ AccelType_t

Enumerator
ACCEL_UNK 
ACCEL_LIS2DW12 
ACCEL_LIS2DH12 
ACCEL_LIS302DL 
ACCEL_LIS3DSH 

Definition at line 170 of file accelerometer.cpp.

170 {
171 ACCEL_UNK = 0,
173 ACCEL_LIS2DH12, // Same as LSM303
174 ACCEL_LIS302DL, // STM32F4DISCOVERY (old?)
175 ACCEL_LIS3DSH, // STM32F4DISCOVERY
176};
@ ACCEL_LIS2DH12
@ ACCEL_UNK
@ ACCEL_LIS3DSH
@ ACCEL_LIS302DL
@ ACCEL_LIS2DW12

Function Documentation

◆ initAccelerometer()

void initAccelerometer ( )

Definition at line 222 of file accelerometer.cpp.

222 {
223#if HAL_USE_SPI
224 static SPIDriver *bus;
225 msg_t ret = MSG_RESET;
226
228 return; // not used
229
231 if (bus == nullptr) {
232 // error already reported
233 return;
234 }
235
236 /* so far only Hellen boards share SPI device for SD card and accelerometer
237 * thus need to make sure CS pin is in a well known proper state */
240 }
243
244 /* Try to detect any of enabled accels */
245 /* Hope all device drivers know how to detect correct chip */
246#if (EFI_ONBOARD_MEMS_LIS2DW12 == TRUE)
247 if (ret != MSG_OK) {
248 lis2dw12cfg.spip = bus;
249
250 /* LIS2DW12 Object Initialization.*/
251 lis2dw12ObjectInit(&LIS2DW12);
252
253 /* Activates the LIS2DW12 driver.*/
254 ret = lis2dw12Start(&LIS2DW12, &lis2dw12cfg);
255 if (ret == MSG_OK) {
257 }
258 }
259#endif //EFI_ONBOARD_MEMS_LIS2DW12 == TRUE
260#if (EFI_ONBOARD_MEMS_LIS2DH12 == TRUE)
261 if (ret != MSG_OK) {
262 lis2dh12cfg.spip = bus;
263
264 /* LIS2DH12 Object Initialization.*/
265 lsm303agrObjectInit(&LIS2DH12);
266
267 /* Activates the LIS2DH12 driver.*/
268 ret = lsm303agrStart(&LIS2DH12, &lis2dh12cfg);
269 if (ret == MSG_OK) {
271 }
272 }
273#endif //EFI_ONBOARD_MEMS_LIS2DH12 == TRUE
274#if (EFI_ONBOARD_MEMS_LIS302DL == TRUE)
275 if (ret != MSG_OK) {
276 lis302dlcfg.spip = bus;
277
278 /* LIS302DL Object Initialization.*/
279 lis302dlObjectInit(&LIS302DL);
280
281 /* Activates the LIS302DL driver.*/
282 ret = lis302dlStart(&LIS302DL, &lis302dlcfg);
283 if (ret == MSG_OK) {
285 }
286 }
287#endif //EFI_ONBOARD_MEMS_LIS302DL == TRUE
288#if (EFI_ONBOARD_MEMS_LIS3DSH == TRUE)
289 if (ret != MSG_OK) {
290 lis3dshcfg.spip = bus;
291
292 /* LIS3DSH Object Initialization.*/
293 lis3dshObjectInit(&LIS3DSH);
294
295 /* Activates the LIS3DSH driver.*/
296 ret = lis3dshStart(&LIS3DSH, &lis3dshcfg);
297 if (ret == MSG_OK) {
299 }
300 }
301#endif //EFI_ONBOARD_MEMS_LIS3DSH == TRUE
302
303 if (ret == MSG_OK) {
304 /* 50 Hz */
305 instance.setPeriod(20 /*ms*/);
306 instance.start();
307 efiPrintf("accelerometer init OK");
308 } else {
309 efiPrintf("accelerometer init failed %d", (int)ret);
310 }
311#endif /* HAL_USE_SPI */
312}
static LIS2DW12Driver LIS2DW12
static LIS3DSHConfig lis3dshcfg
OutputPin accelerometerChipSelect
static LIS2DW12Config lis2dw12cfg
static AccelController instance
static LIS3DSHDriver LIS3DSH
static LIS302DLDriver LIS302DL
static SPIConfig accelerometerSpiCfg
static LSM303AGRDriver LIS2DH12
static AccelType_t AccelType
static LIS302DLConfig lis302dlcfg
static LSM303AGRConfig lis2dh12cfg
void initPin(const char *msg, brain_pin_e brainPin, pin_output_mode_e outputMode, bool forceInitWithFatalError=false)
Definition efi_gpio.cpp:711
bool isInitialized() const
Definition efi_gpio.cpp:559
ioportid_t getHwPort(const char *msg, brain_pin_e brainPin)
ioportmask_t getHwPin(const char *msg, brain_pin_e brainPin)
static constexpr engine_configuration_s * engineConfiguration
SPIDriver * getSpiDevice(spi_device_e spiDevice)
Definition hardware.cpp:149
bool isBrainPinValid(brain_pin_e brainPin)

Referenced by initHardware().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ accelerometerChipSelect

OutputPin accelerometerChipSelect

We need to make sure that accelerometer device which physically exists does not conflict with SD card in case of shared SPI. We reply on specific order of execution here: 1) accelerometer pre-initialization into safe CS pin state 2) SD card initialization 3) accelerometer main initialization if accelerometer feature is desired

Definition at line 70 of file accelerometer.cpp.

Referenced by hellenMegaAccelerometerPreInitCS2Pin(), and initAccelerometer().

◆ accelerometerSpiCfg

SPIConfig accelerometerSpiCfg
static
Initial value:
= {
#if SPI_SUPPORTS_CIRCULAR == TRUE
.circular = false,
#endif
#ifdef _CHIBIOS_RT_CONF_VER_6_1_
.end_cb = NULL,
#else
.slave = false,
.data_cb = NULL,
.error_cb = NULL,
#endif
.ssport = NULL,
.sspad = 0,
#ifdef STM32H7XX
.cfg1 = SPI_CFG1_8BIT_MODE | SPI_CFG1_MBR_0 | SPI_CFG1_MBR_1,
.cfg2 = SPI_CFG2_8BIT_MODE | SPI_CFG2_CPOL | SPI_CFG2_CPHA
#else
.cr1 = SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_CPOL | SPI_CR1_CPHA |
SPI_CR1_8BIT_MODE,
.cr2 = SPI_CR2_8BIT_MODE
#endif
}

Definition at line 46 of file accelerometer.cpp.

46 {
47#if SPI_SUPPORTS_CIRCULAR == TRUE
48 .circular = false,
49#endif
50#ifdef _CHIBIOS_RT_CONF_VER_6_1_
51 .end_cb = NULL,
52#else
53 .slave = false,
54 .data_cb = NULL,
55 .error_cb = NULL,
56#endif
57 /* HW dependent part.*/
58 .ssport = NULL,
59 .sspad = 0,
60#ifdef STM32H7XX
61 .cfg1 = SPI_CFG1_8BIT_MODE | SPI_CFG1_MBR_0 | SPI_CFG1_MBR_1,
62 .cfg2 = SPI_CFG2_8BIT_MODE | SPI_CFG2_CPOL | SPI_CFG2_CPHA
63#else
64 .cr1 = SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_CPOL | SPI_CR1_CPHA |
65 SPI_CR1_8BIT_MODE,
66 .cr2 = SPI_CR2_8BIT_MODE
67#endif
68};

Referenced by initAccelerometer().

◆ AccelType

AccelType_t AccelType = ACCEL_UNK
static

Definition at line 178 of file accelerometer.cpp.

Referenced by initAccelerometer().

◆ instance

AccelController instance
static

Definition at line 220 of file accelerometer.cpp.

Referenced by initAccelerometer().

◆ LIS2DH12

LSM303AGRDriver LIS2DH12
static

Definition at line 123 of file accelerometer.cpp.

Referenced by initAccelerometer().

◆ lis2dh12cfg

LSM303AGRConfig lis2dh12cfg
static
Initial value:
= {
#if LSM303AGR_USE_SPI
.spip = NULL,
.spicfg = &accelerometerSpiCfg,
#endif
.accsensitivity = NULL,
.accbias = NULL,
.accfullscale = LSM303AGR_ACC_FS_4G,
.accodr = LSM303AGR_ACC_ODR_50Hz,
#if LSM303AGR_USE_ADVANCED
.accmode = LSM303AGR_ACC_MODE_HRES,
.accblockdataupdate = LSM303AGR_ACC_BDU_CONT,
.accendianess = LSM303AGR_ACC_END_LITTLE,
#endif
.compsensitivity = NULL,
.compbias = NULL,
.compodr = LSM303AGR_COMP_ODR_50HZ,
#if LSM303AGR_USE_ADVANCED
.compmode = LSM303AGR_COMP_MODE_NORM,
.complp = LSM303AGR_COMP_LPOW_EN
#endif
}

Definition at line 98 of file accelerometer.cpp.

98 {
99#if LSM303AGR_USE_SPI
100 .spip = NULL,
101 .spicfg = &accelerometerSpiCfg,
102#endif
103 .accsensitivity = NULL,
104 .accbias = NULL,
105 .accfullscale = LSM303AGR_ACC_FS_4G,
106 .accodr = LSM303AGR_ACC_ODR_50Hz,
107#if LSM303AGR_USE_ADVANCED
108 .accmode = LSM303AGR_ACC_MODE_HRES,
109 .accblockdataupdate = LSM303AGR_ACC_BDU_CONT,
110 .accendianess = LSM303AGR_ACC_END_LITTLE,
111#endif
112 /* LIS2DW12 is Accelerometer only, ignore following */
113 .compsensitivity = NULL,
114 .compbias = NULL,
115 .compodr = LSM303AGR_COMP_ODR_50HZ,
116#if LSM303AGR_USE_ADVANCED
117 .compmode = LSM303AGR_COMP_MODE_NORM,
118 .complp = LSM303AGR_COMP_LPOW_EN
119#endif
120};

Referenced by initAccelerometer().

◆ LIS2DW12

LIS2DW12Driver LIS2DW12
static

Definition at line 92 of file accelerometer.cpp.

Referenced by initAccelerometer().

◆ lis2dw12cfg

LIS2DW12Config lis2dw12cfg
static
Initial value:
= {
#if LIS2DW12_USE_SPI
.spip = NULL,
.spicfg = &accelerometerSpiCfg,
#endif
#ifdef LIS2DW12_USE_I2C
#endif
.accsensitivity = NULL,
.accbias = NULL,
.accodr = LIS2DW12_ACC_ODR_25HZ,
.accoutputresolution = LIS2DW12_ACC_OR_HP,
.acclowpowermode = LIS2DW12_ACC_LP_MODE2,
.accbadwidthselect = LIS2DW12_ACC_BW_ODR4,
.accfullscale = LIS2DW12_ACC_FS_4G,
}

Definition at line 74 of file accelerometer.cpp.

74 {
75#if LIS2DW12_USE_SPI
76 .spip = NULL,
77 .spicfg = &accelerometerSpiCfg,
78#endif
79#ifdef LIS2DW12_USE_I2C
80 /* TODO: */
81#endif
82 .accsensitivity = NULL,
83 .accbias = NULL,
84 .accodr = LIS2DW12_ACC_ODR_25HZ,
85 .accoutputresolution = LIS2DW12_ACC_OR_HP,
86 .acclowpowermode = LIS2DW12_ACC_LP_MODE2,
87 .accbadwidthselect = LIS2DW12_ACC_BW_ODR4,
88 .accfullscale = LIS2DW12_ACC_FS_4G,
89};

Referenced by initAccelerometer().

◆ LIS302DL

LIS302DLDriver LIS302DL
static

Definition at line 145 of file accelerometer.cpp.

Referenced by initAccelerometer().

◆ lis302dlcfg

LIS302DLConfig lis302dlcfg
static
Initial value:
={
#if LIS302DL_USE_SPI
.spip = NULL,
.spicfg = &accelerometerSpiCfg,
#endif
#if LIS302DL_USE_I2C
#endif
.accsensitivity = NULL,
.accbias = NULL,
.accfullscale = LIS302DL_ACC_FS_8G,
.accodr = LIS302DL_ACC_ODR_100HZ,
#if LIS302DL_USE_ADVANCED
.acchighpass = LIS302DL_ACC_HP_0,
#endif
}

Definition at line 128 of file accelerometer.cpp.

128 {
129#if LIS302DL_USE_SPI
130 .spip = NULL,
131 .spicfg = &accelerometerSpiCfg,
132#endif
133#if LIS302DL_USE_I2C
134 /* TODO: */
135#endif
136 .accsensitivity = NULL,
137 .accbias = NULL,
138 .accfullscale = LIS302DL_ACC_FS_8G,
139 .accodr = LIS302DL_ACC_ODR_100HZ,
140#if LIS302DL_USE_ADVANCED
141 .acchighpass = LIS302DL_ACC_HP_0,
142#endif
143};

Referenced by initAccelerometer().

◆ LIS3DSH

LIS3DSHDriver LIS3DSH
static

Definition at line 166 of file accelerometer.cpp.

Referenced by initAccelerometer().

◆ lis3dshcfg

LIS3DSHConfig lis3dshcfg
static
Initial value:
={
#if LIS3DSH_USE_SPI
.spip = NULL,
.spicfg = &accelerometerSpiCfg,
#endif
.accsensitivity = NULL,
.accbias = NULL,
.accfullscale = LIS3DSH_ACC_FS_4G,
.accodr = LIS3DSH_ACC_ODR_50HZ,
#if LIS3DSH_USE_ADVANCED
.accantialiasing = LIS3DSH_ACC_BW_50HZ,
.accblockdataupdate = LIS3DSH_ACC_BDU_CONTINUOUS,
#endif
}

Definition at line 151 of file accelerometer.cpp.

151 {
152#if LIS3DSH_USE_SPI
153 .spip = NULL,
154 .spicfg = &accelerometerSpiCfg,
155#endif
156 .accsensitivity = NULL,
157 .accbias = NULL,
158 .accfullscale = LIS3DSH_ACC_FS_4G,
159 .accodr = LIS3DSH_ACC_ODR_50HZ,
160#if LIS3DSH_USE_ADVANCED
161 .accantialiasing = LIS3DSH_ACC_BW_50HZ,
162 .accblockdataupdate = LIS3DSH_ACC_BDU_CONTINUOUS,
163#endif
164};

Referenced by initAccelerometer().

Go to the source code of this file.