49#if (LIS3DSH_USE_SPI) || defined(__DOXYGEN__)
65 spiSend(spip, 1, &cmd);
66 spiReceive(spip, n, b);
85 spiSend(spip, 1, &cmd);
126 osalDbgCheck((ip != NULL) && (axes != NULL));
132 "acc_read_raw(), invalid state");
135#if LIS3DSH_SHARED_SPI
136 osalDbgAssert((devp->config->spip->state == SPI_READY),
137 "acc_read_raw(), channel not ready");
139 spiAcquireBus(devp->config->spip);
140 spiStart(devp->config->spip,
141 devp->config->spicfg);
147#if LIS3DSH_SHARED_SPI
148 spiReleaseBus(devp->config->spip);
153 tmp = buff[2 * i] + (buff[2 * i + 1] << 8);
154 axes[i] = (int32_t)tmp;
182 osalDbgCheck((ip != NULL) && (axes != NULL));
188 "acc_read_cooked(), invalid state");
192 axes[i] = (raw[i] * devp->accsensitivity[i]) - devp->accbias[i];
214 osalDbgCheck((ip != NULL) && (bp != NULL));
220 "acc_set_bias(), invalid state");
223 devp->accbias[i] = bp[i];
243 osalDbgCheck(ip != NULL);
249 "acc_reset_bias(), invalid state");
276 osalDbgCheck((ip != NULL) && (sp != NULL));
279 "acc_set_sensivity(), invalid state");
282 devp->accsensitivity[i] = sp[i];
302 osalDbgCheck(ip != NULL);
308 "acc_reset_sensivity(), invalid state");
327 "acc_reset_sensivity(), accelerometer full scale issue");
351 osalDbgCheck(devp != NULL);
354 "acc_set_full_scale(), invalid state");
355 osalDbgAssert((devp->config->spip->state == SPI_READY),
356 "acc_set_full_scale(), channel not ready");
383 if((msg == MSG_OK) &&
384 (newfs != devp->accfullscale)) {
386 scale = newfs / devp->accfullscale;
387 devp->accfullscale = newfs;
390#if LIS3DSH_SHARED_SPI
391 spiAcquireBus(devp->config->spip);
392 spiStart(devp->config->spip,
393 devp->config->spicfg);
399#if LIS3DSH_SHARED_SPI
400 spiReleaseBus(devp->config->spip);
408#if LIS3DSH_SHARED_SPI
409 spiAcquireBus(devp->config->spip);
410 spiStart(devp->config->spip,
411 devp->config->spicfg);
417#if LIS3DSH_SHARED_SPI
418 spiReleaseBus(devp->config->spip);
424 devp->accsensitivity[i] *= scale;
425 devp->accbias[i] *= scale;
475 osalDbgCheck((devp != NULL) && (config != NULL));
479 "lis3dshStart(), invalid state");
481 devp->config = config;
486 devp->config->accodr;
487#if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__)
488 cr |= devp->config->accbdu;
493#if LIS3DSH_SHARED_SPI
494 spiAcquireBus(devp->config->spip);
496 spiStart(devp->config->spip, devp->config->spicfg);
500#if LIS3DSH_SHARED_SPI
501 spiReleaseBus(devp->config->spip);
507 cr = devp->config->accfullscale;
508#if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__)
509 cr |= devp->config->accantialiasing;
514#if LIS3DSH_SHARED_SPI
515 spiAcquireBus(devp->config->spip);
516 spiStart(devp->config->spip, devp->config->spicfg);
521#if LIS3DSH_SHARED_SPI
522 spiReleaseBus(devp->config->spip);
529#if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__)
530 cr |= devp->config->accbdu;
535#if LIS3DSH_SHARED_SPI
536 spiAcquireBus(devp->config->spip);
537 spiStart(devp->config->spip, devp->config->spicfg);
542#if LIS3DSH_SHARED_SPI
543 spiReleaseBus(devp->config->spip);
550 if(devp->config->accsensitivity == NULL)
555 devp->accsensitivity[i] = devp->config->accsensitivity[i];
559 if(devp->config->accsensitivity == NULL)
564 devp->accsensitivity[i] = devp->config->accsensitivity[i];
568 if(devp->config->accsensitivity == NULL)
573 devp->accsensitivity[i] = devp->config->accsensitivity[i];
577 if(devp->config->accsensitivity == NULL)
582 devp->accsensitivity[i] = devp->config->accsensitivity[i];
586 if(devp->config->accsensitivity == NULL)
591 devp->accsensitivity[i] = devp->config->accsensitivity[i];
594 osalDbgAssert(FALSE,
"lis3dshStart(), accelerometer full scale issue");
598 if(devp->config->accbias != NULL)
600 devp->accbias[i] = devp->config->accbias[i];
606 osalThreadSleepMilliseconds(10);
620 osalDbgCheck(devp != NULL);
624 "lis3dshStop(), invalid state");
628#if LIS3DSH_SHARED_SPI
629 spiAcquireBus(devp->config->spip);
630 spiStart(devp->config->spip,
631 devp->config->spicfg);
638 spiStop(devp->config->spip);
639#if LIS3DSH_SHARED_SPI
640 spiReleaseBus(devp->config->spip);
static size_t acc_get_axes_number(void *ip)
Return the number of axes of the BaseAccelerometer.
static msg_t acc_reset_sensivity(void *ip)
Reset sensitivity values for the BaseAccelerometer.
static msg_t acc_set_bias(void *ip, float *bp)
Set bias values for the BaseAccelerometer.
static msg_t acc_reset_bias(void *ip)
Reset bias values for the BaseAccelerometer.
static msg_t acc_set_sensivity(void *ip, float *sp)
Set sensitivity values for the BaseAccelerometer.
static msg_t acc_read_cooked(void *ip, float axes[])
Retrieves cooked data from the BaseAccelerometer.
static msg_t acc_read_raw(void *ip, int32_t axes[])
Retrieves raw data from the BaseAccelerometer.
static const struct BaseAccelerometerVMT vmt_accelerometer
static const struct ADXL317VMT vmt_device
static msg_t acc_set_full_scale(ADXL355Driver *devp, adxl355_acc_fs_t fs)
Changes the ADXL355Driver accelerometer fullscale value.
#define LIS3DSH_ACC_NUMBER_OF_AXES
LIS3DSH accelerometer subsystem characteristics.
static size_t acc_get_axes_number(void *ip)
Return the number of axes of the BaseAccelerometer.
#define LIS3DSH_AD_CTRL_REG5
#define LIS3DSH_ACC_SENS_8G
#define LIS3DSH_CTRL_REG4_ZEN
#define LIS3DSH_ACC_SENS_16G
static void lis3dshSPIWriteRegister(SPIDriver *spip, uint8_t reg, size_t n, uint8_t *b)
Writes a value into a generic register using SPI.
static msg_t acc_reset_sensivity(void *ip)
Reset sensitivity values for the BaseAccelerometer.
void lis3dshStart(LIS3DSHDriver *devp, const LIS3DSHConfig *config)
Configures and activates LIS3DSH Complex Driver peripheral.
static msg_t acc_set_bias(void *ip, float *bp)
Set bias values for the BaseAccelerometer.
#define LIS3DSH_AD_CTRL_REG6
#define LIS3DSH_ACC_SENS_4G
#define LIS3DSH_CTRL_REG6_ADD_INC
#define LIS3DSH_CTRL_REG4_XEN
static void lis3dshSPIReadRegister(SPIDriver *spip, uint8_t reg, size_t n, uint8_t *b)
Reads a generic register value using SPI.
#define LIS3DSH_ACC_SENS_2G
lis3dsh_acc_fs_t
LIS3DSH full scale.
static msg_t acc_reset_bias(void *ip)
Reset bias values for the BaseAccelerometer.
#define LIS3DSH_CTRL_REG5_FS_MASK
static msg_t acc_set_sensivity(void *ip, float *sp)
Set sensitivity values for the BaseAccelerometer.
static msg_t acc_read_cooked(void *ip, float axes[])
Retrieves cooked data from the BaseAccelerometer.
static msg_t acc_read_raw(void *ip, int32_t axes[])
Retrieves raw data from the BaseAccelerometer.
static msg_t acc_set_full_scale(LIS3DSHDriver *devp, lis3dsh_acc_fs_t fs)
Changes the LIS3DSHDriver accelerometer fullscale value.
#define LIS3DSH_AD_CTRL_REG4
void lis3dshStop(LIS3DSHDriver *devp)
Deactivates the LIS3DSH Complex Driver peripheral.
#define LIS3DSH_AD_OUT_X_L
#define LIS3DSH_CTRL_REG4_YEN
void lis3dshObjectInit(LIS3DSHDriver *devp)
Initializes an instance.
#define LIS3DSH_ACC_SENS_6G
LIS3DSH MEMS interface module header.
Base accelerometer class.
const struct BaseAccelerometerVMT * vmt
Virtual Methods Table.
BaseAccelerometer virtual methods table.
LIS3DSH configuration structure.
LIS3DSH 3-axis accelerometer class.
const struct LIS3DSHVMT * vmt
Virtual Methods Table.
BaseAccelerometer acc_if
Base accelerometer interface.
LIS3DSH virtual methods table.