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 165 of file accelerometer.cpp.

165 {
166 ACCEL_UNK = 0,
168 ACCEL_LIS2DH12, // Same as LSM303
169 ACCEL_LIS302DL, // STM32F4DISCOVERY (old?)
170 ACCEL_LIS3DSH, // STM32F4DISCOVERY
171};
@ ACCEL_LIS2DH12
@ ACCEL_UNK
@ ACCEL_LIS3DSH
@ ACCEL_LIS302DL
@ ACCEL_LIS2DW12

Function Documentation

◆ initAccelerometer()

void initAccelerometer ( )

Definition at line 217 of file accelerometer.cpp.

217 {
218#if HAL_USE_SPI
219 static SPIDriver *bus;
220 msg_t ret = MSG_RESET;
221
223 return; // not used
224
226 if (bus == nullptr) {
227 // error already reported
228 return;
229 }
230
231 /* so far only Hellen boards share SPI device for SD card and accelerometer
232 * thus need to make sure CS pin is in a well known proper state */
235 }
238
239 /* Try to detect any of enabled accels */
240 /* Hope all device drivers know how to detect correct chip */
241#if (EFI_ONBOARD_MEMS_LIS2DW12 == TRUE)
242 if (ret != MSG_OK) {
243 lis2dw12cfg.spip = bus;
244
245 /* LIS2DW12 Object Initialization.*/
246 lis2dw12ObjectInit(&LIS2DW12);
247
248 /* Activates the LIS2DW12 driver.*/
249 ret = lis2dw12Start(&LIS2DW12, &lis2dw12cfg);
250 if (ret == MSG_OK) {
252 }
253 }
254#endif //EFI_ONBOARD_MEMS_LIS2DW12 == TRUE
255#if (EFI_ONBOARD_MEMS_LIS2DH12 == TRUE)
256 if (ret != MSG_OK) {
257 lis2dh12cfg.spip = bus;
258
259 /* LIS2DH12 Object Initialization.*/
260 lsm303agrObjectInit(&LIS2DH12);
261
262 /* Activates the LIS2DH12 driver.*/
263 ret = lsm303agrStart(&LIS2DH12, &lis2dh12cfg);
264 if (ret == MSG_OK) {
266 }
267 }
268#endif //EFI_ONBOARD_MEMS_LIS2DH12 == TRUE
269#if (EFI_ONBOARD_MEMS_LIS302DL == TRUE)
270 if (ret != MSG_OK) {
271 lis302dlcfg.spip = bus;
272
273 /* LIS302DL Object Initialization.*/
274 lis302dlObjectInit(&LIS302DL);
275
276 /* Activates the LIS302DL driver.*/
277 ret = lis302dlStart(&LIS302DL, &lis302dlcfg);
278 if (ret == MSG_OK) {
280 }
281 }
282#endif //EFI_ONBOARD_MEMS_LIS302DL == TRUE
283#if (EFI_ONBOARD_MEMS_LIS3DSH == TRUE)
284 if (ret != MSG_OK) {
285 lis3dshcfg.spip = bus;
286
287 /* LIS3DSH Object Initialization.*/
288 lis3dshObjectInit(&LIS3DSH);
289
290 /* Activates the LIS3DSH driver.*/
291 ret = lis3dshStart(&LIS3DSH, &lis3dshcfg);
292 if (ret == MSG_OK) {
294 }
295 }
296#endif //EFI_ONBOARD_MEMS_LIS3DSH == TRUE
297
298 if (ret == MSG_OK) {
299 /* 50 Hz */
300 instance.setPeriod(20 /*ms*/);
301 instance.start();
302 efiPrintf("accelerometer init OK");
303 } else {
304 efiPrintf("accelerometer init failed %d", (int)ret);
305 }
306#endif /* HAL_USE_SPI */
307}
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 65 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,
.cr1 = SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_CPOL | SPI_CR1_CPHA |
SPI_CR1_8BIT_MODE,
.cr2 = SPI_CR2_8BIT_MODE
}

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 .cr1 = SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_CPOL | SPI_CR1_CPHA |
61 SPI_CR1_8BIT_MODE,
62 .cr2 = SPI_CR2_8BIT_MODE
63};

Referenced by initAccelerometer().

◆ AccelType

AccelType_t AccelType = ACCEL_UNK
static

Definition at line 173 of file accelerometer.cpp.

Referenced by initAccelerometer().

◆ instance

AccelController instance
static

Definition at line 215 of file accelerometer.cpp.

Referenced by initAccelerometer().

◆ LIS2DH12

LSM303AGRDriver LIS2DH12
static

Definition at line 118 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 93 of file accelerometer.cpp.

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

Referenced by initAccelerometer().

◆ LIS2DW12

LIS2DW12Driver LIS2DW12
static

Definition at line 87 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 69 of file accelerometer.cpp.

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

Referenced by initAccelerometer().

◆ LIS302DL

LIS302DLDriver LIS302DL
static

Definition at line 140 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 123 of file accelerometer.cpp.

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

Referenced by initAccelerometer().

◆ LIS3DSH

LIS3DSHDriver LIS3DSH
static

Definition at line 161 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 146 of file accelerometer.cpp.

146 {
147#if LIS3DSH_USE_SPI
148 .spip = NULL,
149 .spicfg = &accelerometerSpiCfg,
150#endif
151 .accsensitivity = NULL,
152 .accbias = NULL,
153 .accfullscale = LIS3DSH_ACC_FS_4G,
154 .accodr = LIS3DSH_ACC_ODR_50HZ,
155#if LIS3DSH_USE_ADVANCED
156 .accantialiasing = LIS3DSH_ACC_BW_50HZ,
157 .accblockdataupdate = LIS3DSH_ACC_BDU_CONTINUOUS,
158#endif
159};

Referenced by initAccelerometer().

Go to the source code of this file.