70 uint8_t reg, uint8_t *rxbuf,
size_t n) {
73 return i2cMasterTransmitTimeout(i2cp, sad, &txbuf, 1, rxbuf, n,
90 uint8_t *txbuf,
size_t n) {
93 return i2cMasterTransmitTimeout(i2cp, sad, txbuf, n + 1, NULL, 0,
132 osalDbgCheck((ip != NULL) && (axes != NULL));
138 "acc_read_raw(), invalid state");
139 osalDbgAssert((devp->config->i2cp->state == I2C_READY),
140 "acc_read_raw(), channel not ready");
142#if LSM303AGR_SHARED_I2C
143 i2cAcquireBus(devp->config->i2cp);
144 i2cStart(devp->config->i2cp,
145 devp->config->i2ccfg);
152#if LSM303AGR_SHARED_I2C
153 i2cReleaseBus(devp->config->i2cp);
158 tmp = buff[2 * i] + (buff[2 * i + 1] << 8);
159 axes[i] = (int32_t)tmp;
187 osalDbgCheck((ip != NULL) && (axes != NULL));
193 "acc_read_cooked(), invalid state");
197 axes[i] = (raw[i] * devp->accsensitivity[i]) - devp->accbias[i];
219 osalDbgCheck((ip != NULL) && (bp != NULL));
225 "acc_set_bias(), invalid state");
228 devp->accbias[i] = bp[i];
248 osalDbgCheck(ip != NULL);
254 "acc_reset_bias(), invalid state");
281 osalDbgCheck((ip != NULL) && (sp != NULL));
284 "acc_set_sensivity(), invalid state");
287 devp->accsensitivity[i] = sp[i];
307 osalDbgCheck(ip != NULL);
313 "acc_reset_sensivity(), invalid state");
336 osalDbgAssert(FALSE,
"reset_sensivity(), accelerometer full scale issue");
361 osalDbgCheck(devp != NULL);
364 "acc_set_full_scale(), invalid state");
365 osalDbgAssert((devp->config->i2cp->state == I2C_READY),
366 "acc_set_full_scale(), channel not ready");
389 if((msg == MSG_OK) &&
390 (newfs != devp->compfullscale)) {
392 scale = newfs / devp->accfullscale;
393 devp->accfullscale = newfs;
395#if LSM303AGR_SHARED_I2C
396 i2cAcquireBus(devp->config->i2cp);
397 i2cStart(devp->config->i2cp,
398 devp->config->i2ccfg);
407#if LSM303AGR_SHARED_I2C
408 i2cReleaseBus(devp->config->i2cp);
417#if LSM303AGR_SHARED_I2C
418 i2cAcquireBus(devp->config->i2cp);
419 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
425#if LSM303AGR_SHARED_I2C
426 i2cReleaseBus(devp->config->i2cp);
433 devp->accsensitivity[i] *= scale;
434 devp->accbias[i] *= scale;
450 osalDbgCheck(ip != NULL);
476 osalDbgCheck((ip != NULL) && (axes != NULL));
482 "comp_read_raw(), invalid state");
483 osalDbgAssert((devp->config->i2cp->state == I2C_READY),
484 "comp_read_raw(), channel not ready");
486#if LSM303AGR_SHARED_I2C
487 i2cAcquireBus(devp->config->i2cp);
488 i2cStart(devp->config->i2cp,
489 devp->config->i2ccfg);
495#if LSM303AGR_SHARED_I2C
496 i2cReleaseBus(devp->config->i2cp);
501 tmp = buff[2 * i] + (buff[2 * i + 1] << 8);
502 axes[i] = (int32_t)tmp;
530 osalDbgCheck((ip != NULL) && (axes != NULL));
537 "comp_read_cooked(), invalid state");
541 axes[i] = (raw[i] * devp->compsensitivity[i]) - devp->compbias[i];
563 osalDbgCheck((ip != NULL) && (bp != NULL));
569 "comp_set_bias(), invalid state");
572 devp->compbias[i] = bp[i];
592 osalDbgCheck(ip != NULL);
598 "comp_reset_bias(), invalid state");
625 osalDbgCheck((ip != NULL) && (sp != NULL));
628 "comp_set_sensivity(), invalid state");
631 devp->compsensitivity[i] = sp[i];
651 osalDbgCheck(ip != NULL);
657 "comp_reset_sensivity(), invalid state");
717 osalDbgCheck((devp != NULL) && (config != NULL));
721 "lsm303agrStart(), invalid state");
723 devp->config = config;
733#if LSM303AGR_USE_ADVANCED || defined(__DOXYGEN__)
751 cr[4] = devp->config->accfullscale;
752#if LSM303AGR_USE_ADVANCED || defined(__DOXYGEN__)
753 cr[4] |= devp->config->accendianess |
754 devp->config->accbdu;
764 if(devp->config->accsensitivity == NULL)
767 devp->accsensitivity[i] = devp->config->accsensitivity[i];
773 if(devp->config->accsensitivity == NULL)
776 devp->accsensitivity[i] = devp->config->accsensitivity[i];
782 if(devp->config->accsensitivity == NULL)
785 devp->accsensitivity[i] = devp->config->accsensitivity[i];
791 if(devp->config->accsensitivity == NULL)
794 devp->accsensitivity[i] = devp->config->accsensitivity[i];
798 osalDbgAssert(FALSE,
"lsm303dlhcStart(), accelerometer full scale issue");
801 if(devp->config->accbias != NULL)
803 devp->accbias[i] = devp->config->accbias[i];
808#if LSM303AGR_SHARED_I2C
809 i2cAcquireBus((devp)->config->
i2cp);
811 i2cStart((devp)->config->
i2cp, (devp)->config->i2ccfg);
815#if LSM303AGR_SHARED_I2C
816 i2cReleaseBus((devp)->config->
i2cp);
825 cr[1] = devp->config->compodr;
826#if LSM303AGR_USE_ADVANCED || defined(__DOXYGEN__)
827 cr[1] |= devp->config->compmode | devp->config->complp;
841#if LSM303AGR_SHARED_I2C
842 i2cAcquireBus((devp)->config->
i2cp);
843 i2cStart((devp)->config->
i2cp, (devp)->config->i2ccfg);
849#if LSM303AGR_SHARED_I2C
850 i2cReleaseBus((devp)->config->
i2cp);
855 if(devp->config->compsensitivity == NULL) {
859 devp->compsensitivity[i] = devp->config->compsensitivity[i];
864 osalThreadSleepMilliseconds(5);
878 osalDbgCheck(devp != NULL);
882 "lsm303agrStop(), invalid state");
885#if LSM303AGR_SHARED_I2C
886 i2cAcquireBus((devp)->config->i2cp);
887 i2cStart((devp)->config->i2cp, (devp)->config->i2ccfg);
902 i2cStop((devp)->config->i2cp);
903#if LSM303AGR_SHARED_I2C
904 i2cReleaseBus((devp)->config->i2cp);
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.
static size_t comp_get_axes_number(void *ip)
Return the number of axes of the BaseCompass.
static msg_t comp_set_sensivity(void *ip, float *sp)
Set sensitivity values for the BaseCompass.
static msg_t comp_reset_bias(void *ip)
Reset bias values for the BaseCompass.
static msg_t comp_set_bias(void *ip, float *bp)
Set bias values for the BaseCompass.
static msg_t comp_reset_sensivity(void *ip)
Reset sensitivity values for the BaseCompass.
static msg_t comp_read_cooked(void *ip, float axes[])
Retrieves cooked data from the BaseCompass.
static const struct BaseCompassVMT vmt_compass
static msg_t comp_read_raw(void *ip, int32_t axes[])
Retrieves raw data from the BaseCompass.
static msg_t acc_set_full_scale(LSM303AGRDriver *devp, lsm303agr_acc_fs_t fs)
Changes the LSM303AGRDriver accelerometer fullscale value.
#define LSM303AGR_COMP_50GA
static size_t comp_get_axes_number(void *ip)
Return the number of axes of the BaseCompass.
void lsm303agrObjectInit(LSM303AGRDriver *devp)
Initializes an instance.
static msg_t comp_set_sensivity(void *ip, float *sp)
Set sensitivity values for the BaseCompass.
#define LSM303AGR_CTRL_REG4_A_HR
static msg_t comp_reset_bias(void *ip)
Reset bias values for the BaseCompass.
#define LSM303AGR_COMP_BIAS
static size_t acc_get_axes_number(void *ip)
Return the number of axes of the BaseAccelerometer.
#define LSM303AGR_AD_OUTX_L_REG_M
void lsm303agrStart(LSM303AGRDriver *devp, const LSM303AGRConfig *config)
Configures and activates LSM303AGR Complex Driver peripheral.
void lsm303agrStop(LSM303AGRDriver *devp)
Deactivates the LSM303AGR Complex Driver peripheral.
#define LSM303AGR_ACC_SENS_8G
static msg_t acc_reset_sensivity(void *ip)
Reset sensitivity values for the BaseAccelerometer.
static msg_t comp_set_bias(void *ip, float *bp)
Set bias values for the BaseCompass.
static msg_t acc_set_bias(void *ip, float *bp)
Set bias values for the BaseAccelerometer.
static msg_t comp_reset_sensivity(void *ip)
Reset sensitivity values for the BaseCompass.
static msg_t lsm303agrI2CReadRegister(I2CDriver *i2cp, lsm303agr_sad_t sad, uint8_t reg, uint8_t *rxbuf, size_t n)
Reads registers value using I2C.
static msg_t lsm303agrI2CWriteRegister(I2CDriver *i2cp, lsm303agr_sad_t sad, uint8_t *txbuf, size_t n)
Writes a value into a register using I2C.
#define LSM303AGR_CTRL_REG4_A_FS_MASK
static msg_t comp_read_cooked(void *ip, float axes[])
Retrieves cooked data from the BaseCompass.
#define LSM303AGR_ACC_BIAS
#define LSM303AGR_COMP_SENS_50GA
#define LSM303AGR_ACC_SENS_2G
#define LSM303AGR_ACC_SENS_4G
static msg_t acc_reset_bias(void *ip)
Reset bias values for the BaseAccelerometer.
lsm303agr_acc_fs_t
LSM303AGR accelerometer subsystem full scale.
#define LSM303AGR_CTRL_REG1_A_LPEN
#define LSM303AGR_ACC_NUMBER_OF_AXES
LSM303AGR accelerometer subsystem characteristics.
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.
#define LSM303AGR_AD_CTRL_REG4_A
static msg_t acc_read_raw(void *ip, int32_t axes[])
Retrieves raw data from the BaseAccelerometer.
#define LSM303AGR_ACC_SENS_16G
#define LSM303AGR_COMP_NUMBER_OF_AXES
LSM303AGR compass subsystem characteristics.
lsm303agr_sad_t
Accelerometer and Compass Slave Address.
#define LSM303AGR_AD_OUT_X_L_A
#define LSM303AGR_ACC_16G
static msg_t comp_read_raw(void *ip, int32_t axes[])
Retrieves raw data from the BaseCompass.
#define LSM303AGR_AD_CTRL_REG1_A
#define LSM303AGR_AD_CFG_REG_A_M
@ LSM303AGR_ACC_AE_DISABLED
@ LSM303AGR_ACC_MODE_HRES
@ LSM303AGR_ACC_MODE_LPOW
@ LSM303AGR_COMP_MODE_IDLE
LSM303AGR MEMS interface module header.
Base accelerometer class.
const struct BaseAccelerometerVMT * vmt
Virtual Methods Table.
BaseAccelerometer virtual methods table.
const struct BaseCompassVMT * vmt
Virtual Methods Table.
BaseCompass virtual methods table.
LSM303AGR configuration structure.
I2CDriver * i2cp
I2C driver associated to this LSM303AGR.
LSM303AGR 6-axis accelerometer/compass class.
BaseAccelerometer acc_if
Base accelerometer interface.
BaseCompass comp_if
Base compass interface.
const struct LSM303AGRVMT * vmt
Virtual Methods Table.
LSM303AGR virtual methods table.