49 #if (LIS3DSH_USE_SPI) || defined(__DOXYGEN__) 63 cmd = reg | LIS3DSH_RW;
132 "acc_read_raw(), invalid state");
135 #if LIS3DSH_SHARED_SPI 137 "acc_read_raw(), channel not ready");
141 devp->config->spicfg);
147 #if LIS3DSH_SHARED_SPI 153 tmp = buff[2 * i] + (buff[2 * i + 1] << 8);
154 axes[i] = (int32_t)tmp;
188 "acc_read_cooked(), invalid state");
192 axes[i] = (raw[i] * devp->accsensitivity[i]) - devp->accbias[i];
220 "acc_set_bias(), invalid state");
223 devp->accbias[i] = bp[i];
249 "acc_reset_bias(), invalid state");
252 devp->accbias[i] = LIS3DSH_ACC_BIAS;
279 "acc_set_sensivity(), invalid state");
282 devp->accsensitivity[i] = sp[i];
308 "acc_reset_sensivity(), invalid state");
312 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_2G;
315 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_4G;
318 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_6G;
321 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_8G;
324 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_16G;
327 "acc_reset_sensivity(), accelerometer full scale issue");
354 "acc_set_full_scale(), invalid state");
356 "acc_set_full_scale(), channel not ready");
360 newfs = LIS3DSH_ACC_2G;
363 newfs = LIS3DSH_ACC_4G;
366 newfs = LIS3DSH_ACC_6G;
369 newfs = LIS3DSH_ACC_8G;
372 newfs = LIS3DSH_ACC_16G;
379 if(newfs != devp->accfullscale) {
381 scale = newfs / devp->accfullscale;
382 devp->accfullscale = newfs;
385 #if LIS3DSH_SHARED_SPI 388 devp->config->spicfg);
394 #if LIS3DSH_SHARED_SPI 399 cr &= ~(LIS3DSH_CTRL_REG5_FS_MASK);
403 #if LIS3DSH_SHARED_SPI 406 devp->config->spicfg);
412 #if LIS3DSH_SHARED_SPI 419 devp->accsensitivity[i] *= scale;
420 devp->accbias[i] *= scale;
449 devp->
vmt = &vmt_device;
474 "lis3dshStart(), invalid state");
476 devp->config = config;
480 cr = LIS3DSH_CTRL_REG4_XEN | LIS3DSH_CTRL_REG4_YEN | LIS3DSH_CTRL_REG4_ZEN |
481 devp->config->accoutputdatarate;
482 #if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__) 483 cr |= devp->config->accblockdataupdate;
488 #if LIS3DSH_SHARED_SPI 491 spiStart(devp->config->spip, devp->config->spicfg);
495 #if LIS3DSH_SHARED_SPI 502 cr = devp->config->accfullscale;
503 #if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__) 504 cr |= devp->config->accantialiasing;
509 #if LIS3DSH_SHARED_SPI 511 spiStart(devp->config->spip, devp->config->spicfg);
516 #if LIS3DSH_SHARED_SPI 523 cr = LIS3DSH_CTRL_REG6_ADD_INC;
524 #if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__) 525 cr |= devp->config->accblockdataupdate;
530 #if LIS3DSH_SHARED_SPI 532 spiStart(devp->config->spip, devp->config->spicfg);
537 #if LIS3DSH_SHARED_SPI 544 devp->accfullscale = LIS3DSH_ACC_2G;
545 if(devp->config->accsensitivity == NULL)
547 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_2G;
549 for(i = 0; i < LIS3DSH_ACC_NUMBER_OF_AXES; i++)
550 devp->accsensitivity[i] = devp->config->accsensitivity[i];
553 devp->accfullscale = LIS3DSH_ACC_4G;
554 if(devp->config->accsensitivity == NULL)
556 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_4G;
558 for(i = 0; i < LIS3DSH_ACC_NUMBER_OF_AXES; i++)
559 devp->accsensitivity[i] = devp->config->accsensitivity[i];
562 devp->accfullscale = LIS3DSH_ACC_6G;
563 if(devp->config->accsensitivity == NULL)
565 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_6G;
567 for(i = 0; i < LIS3DSH_ACC_NUMBER_OF_AXES; i++)
568 devp->accsensitivity[i] = devp->config->accsensitivity[i];
571 devp->accfullscale = LIS3DSH_ACC_8G;
572 if(devp->config->accsensitivity == NULL)
574 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_8G;
576 for(i = 0; i < LIS3DSH_ACC_NUMBER_OF_AXES; i++)
577 devp->accsensitivity[i] = devp->config->accsensitivity[i];
580 devp->accfullscale = LIS3DSH_ACC_16G;
581 if(devp->config->accsensitivity == NULL)
583 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_16G;
585 for(i = 0; i < LIS3DSH_ACC_NUMBER_OF_AXES; i++)
586 devp->accsensitivity[i] = devp->config->accsensitivity[i];
593 if(devp->config->accbias != NULL)
595 devp->accbias[i] = devp->config->accbias[i];
597 for(i = 0; i < LIS3DSH_ACC_NUMBER_OF_AXES; i++)
598 devp->accbias[i] = LIS3DSH_ACC_BIAS;
619 "lis3dshStop(), invalid state");
622 #if (LIS3DSH_USE_SPI) 623 #if LIS3DSH_SHARED_SPI 626 devp->config->spicfg);
634 #if LIS3DSH_SHARED_SPI
#define LIS3DSH_ACC_NUMBER_OF_AXES
LIS3DSH accelerometer subsystem characteristics.
void spiUnselect(SPIDriver *spip)
Deasserts the slave select signal.
const struct LIS3DSHVMT * vmt
Virtual Methods Table.
void spiSelect(SPIDriver *spip)
Asserts the slave select signal and prepares for transfers.
void spiReceive(SPIDriver *spip, size_t n, void *rxbuf)
Receives data from the SPI bus.
void spiStart(SPIDriver *spip, const SPIConfig *config)
Configures and activates the SPI peripheral.
lis3dsh_acc_fs_t
LIS3DSH full scale.
BaseAccelerometer acc_if
Base accelerometer interface.
void spiReleaseBus(SPIDriver *spip)
Releases exclusive access to the SPI bus.
void lis3dshStart(LIS3DSHDriver *devp, const LIS3DSHConfig *config)
Configures and activates LIS3DSH Complex Driver peripheral.
LIS3DSH 3-axis accelerometer class.
#define objGetInstance(type, ip)
Returns the instance pointer starting from an interface pointer.
void lis3dshObjectInit(LIS3DSHDriver *devp)
Initializes an instance.
void spiAcquireBus(SPIDriver *spip)
Gains exclusive access to the SPI bus.
#define osalThreadSleepMilliseconds(msecs)
Delays the invoking thread for the specified number of milliseconds.
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_read_cooked(void *ip, float axes[])
Retrieves cooked data from the BaseAccelerometer.
LIS3DSH MEMS interface module header.
#define osalDbgCheck(c)
Function parameters check.
#define MSG_OK
Normal wakeup message.
static msg_t acc_set_sensivity(void *ip, float *sp)
Set sensitivity values for the BaseAccelerometer.
static msg_t acc_reset_sensivity(void *ip)
Reset sensitivity values for the BaseAccelerometer.
static void lis3dshSPIReadRegister(SPIDriver *spip, uint8_t reg, size_t n, uint8_t *b)
Reads a generic register value using SPI.
void lis3dshStop(LIS3DSHDriver *devp)
Deactivates the LIS3DSH Complex Driver peripheral.
void spiSend(SPIDriver *spip, size_t n, const void *txbuf)
Sends data over the SPI bus.
static msg_t acc_read_raw(void *ip, int32_t axes[])
Retrieves raw data from the BaseAccelerometer.
static size_t acc_get_axes_number(void *ip)
Return the number of axes of the BaseAccelerometer.
LIS3DSH virtual methods table.
#define osalDbgAssert(c, remark)
Condition assertion.
static msg_t acc_reset_bias(void *ip)
Reset bias values for the BaseAccelerometer.
static msg_t acc_set_full_scale(LIS3DSHDriver *devp, lis3dsh_acc_fs_t fs)
Changes the LIS3DSHDriver accelerometer fullscale value.
BaseAccelerometer virtual methods table.
Base accelerometer class.
const struct BaseAccelerometerVMT * vmt
Virtual Methods Table.
void spiStop(SPIDriver *spip)
Deactivates the SPI peripheral.
LIS3DSH configuration structure.
Structure representing an SPI driver.
static msg_t acc_set_bias(void *ip, float *bp)
Set bias values for the BaseAccelerometer.
#define FALSE
Generic 'false' preprocessor boolean constant.
#define MSG_RESET
Wakeup caused by a reset condition.