49 #if (LIS302DL_USE_SPI) || defined(__DOXYGEN__) 62 (n == 1) ? (cmd = reg | LIS302DL_RW) : (cmd = reg | LIS302DL_RW | LIS302DL_MS);
81 (n == 1) ? (cmd = reg) : (cmd = reg | LIS302DL_MS);
129 "acc_read_raw(), invalid state");
132 #if LIS302DL_SHARED_SPI 134 "acc_read_raw(), channel not ready");
138 devp->config->spicfg);
143 LIS302DL_AD_OUT_X + (i * 2), 1, &tmp);
144 axes[i] = (int32_t)((int8_t)tmp);
147 #if LIS302DL_SHARED_SPI 183 "acc_read_cooked(), invalid state");
187 axes[i] = (raw[i] * devp->accsensitivity[i]) - devp->accbias[i];
215 "acc_set_bias(), invalid state");
218 devp->accbias[i] = bp[i];
244 "acc_reset_bias(), invalid state");
247 devp->accbias[i] = LIS302DL_ACC_BIAS;
274 "acc_set_sensivity(), invalid state");
277 devp->accsensitivity[i] = sp[i];
303 "acc_reset_sensivity(), invalid state");
307 devp->accsensitivity[i] = LIS302DL_ACC_SENS_2G;
310 devp->accsensitivity[i] = LIS302DL_ACC_SENS_8G;
313 "acc_reset_sensivity(), accelerometer full scale issue");
340 "acc_set_full_scale(), invalid state");
342 "acc_set_full_scale(), channel not ready");
346 newfs = LIS302DL_ACC_2G;
349 newfs = LIS302DL_ACC_8G;
356 if(newfs != devp->accfullscale) {
358 scale = newfs / devp->accfullscale;
359 devp->accfullscale = newfs;
362 #if LIS302DL_SHARED_SPI 365 devp->config->spicfg);
371 #if LIS302DL_SHARED_SPI 376 cr &= ~(LIS302DL_CTRL_REG1_FS_MASK);
380 #if LIS302DL_SHARED_SPI 383 devp->config->spicfg);
389 #if LIS302DL_SHARED_SPI 396 devp->accsensitivity[i] *= scale;
397 devp->accbias[i] *= scale;
426 devp->
vmt = &vmt_device;
446 uint8_t cr[2] = {0, 0};
450 "lis302dlStart(), invalid state");
452 devp->config = config;
456 cr[0] = LIS302DL_CTRL_REG1_XEN | LIS302DL_CTRL_REG1_YEN |
457 LIS302DL_CTRL_REG1_ZEN | LIS302DL_CTRL_REG1_PD |
458 devp->config->accoutputdatarate |
459 devp->config->accfullscale;
464 #if LIS302DL_USE_ADVANCED || defined(__DOXYGEN__) 465 if(devp->config->hpmode != LIS302DL_HPM_BYPASSED)
466 cr[1] = devp->config->acchighpass;
471 #if LIS302DL_SHARED_SPI 479 #if LIS302DL_SHARED_SPI 486 devp->accfullscale = LIS302DL_ACC_2G;
487 if(devp->config->accsensitivity == NULL)
489 devp->accsensitivity[i] = LIS302DL_ACC_SENS_2G;
491 for(i = 0; i < LIS302DL_ACC_NUMBER_OF_AXES; i++)
492 devp->accsensitivity[i] = devp->config->accsensitivity[i];
495 devp->accfullscale = LIS302DL_ACC_8G;
496 if(devp->config->accsensitivity == NULL)
498 devp->accsensitivity[i] = LIS302DL_ACC_SENS_8G;
500 for(i = 0; i < LIS302DL_ACC_NUMBER_OF_AXES; i++)
501 devp->accsensitivity[i] = devp->config->accsensitivity[i];
508 if(devp->config->accbias != NULL)
510 devp->accbias[i] = devp->config->accbias[i];
512 for(i = 0; i < LIS302DL_ACC_NUMBER_OF_AXES; i++)
513 devp->accbias[i] = LIS302DL_ACC_BIAS;
534 "lis302dlStop(), invalid state");
538 #if LIS302DL_SHARED_SPI 541 (devp)->config->spicfg);
547 #if LIS302DL_SHARED_SPI static msg_t acc_set_full_scale(LIS302DLDriver *devp, lis302dl_acc_fs_t fs)
Changes the LIS302DLDriver accelerometer fullscale value.
void spiUnselect(SPIDriver *spip)
Deasserts the slave select signal.
void spiSelect(SPIDriver *spip)
Asserts the slave select signal and prepares for transfers.
void lis302dlStop(LIS302DLDriver *devp)
Deactivates the LIS302DL Complex Driver peripheral.
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.
static msg_t acc_read_raw(void *ip, int32_t axes[])
Retrieves raw data from the BaseAccelerometer.
void spiReleaseBus(SPIDriver *spip)
Releases exclusive access to the SPI bus.
#define objGetInstance(type, ip)
Returns the instance pointer starting from an interface pointer.
SPIDriver * spip
SPI driver associated to this LIS302DL.
const SPIConfig * config
Current configuration data.
void spiAcquireBus(SPIDriver *spip)
Gains exclusive access to the SPI bus.
static msg_t acc_set_sensivity(void *ip, float *sp)
Set sensitivity values for the BaseAccelerometer.
void lis302dlStart(LIS302DLDriver *devp, const LIS302DLConfig *config)
Configures and activates LIS302DL Complex Driver peripheral.
BaseAccelerometer acc_if
Base accelerometer interface.
#define osalThreadSleepMilliseconds(msecs)
Delays the invoking thread for the specified number of milliseconds.
static size_t acc_get_axes_number(void *ip)
Return the number of axes of the BaseAccelerometer.
const struct LIS302DLVMT * vmt
Virtual Methods Table.
#define LIS302DL_ACC_NUMBER_OF_AXES
LIS302DL accelerometer subsystem characteristics.
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.
#define osalDbgCheck(c)
Function parameters check.
LIS302DL 3-axis accelerometer class.
lis302dl_acc_fs_t
LIS302DL full scale.
#define MSG_OK
Normal wakeup message.
LIS302DL configuration structure.
static void lis302dlSPIWriteRegister(SPIDriver *spip, uint8_t reg, size_t n, uint8_t *b)
Writes a value into a generic register using SPI.
void spiSend(SPIDriver *spip, size_t n, const void *txbuf)
Sends data over the SPI bus.
static void lis302dlSPIReadRegister(SPIDriver *spip, uint8_t reg, size_t n, uint8_t *b)
Reads a generic register value using SPI.
#define osalDbgAssert(c, remark)
Condition assertion.
void lis302dlObjectInit(LIS302DLDriver *devp)
Initializes an instance.
static msg_t acc_reset_sensivity(void *ip)
Reset sensitivity values for the BaseAccelerometer.
BaseAccelerometer virtual methods table.
Base accelerometer class.
const struct BaseAccelerometerVMT * vmt
Virtual Methods Table.
LIS302DL MEMS interface module header.
void spiStop(SPIDriver *spip)
Deactivates the SPI peripheral.
static msg_t acc_read_cooked(void *ip, float axes[])
Retrieves cooked data from the BaseAccelerometer.
LIS302DL accelerometer virtual methods table.
Structure representing an SPI driver.
#define FALSE
Generic 'false' preprocessor boolean constant.
#define MSG_RESET
Wakeup caused by a reset condition.