49#if (LIS3MDL_USE_I2C) || defined(__DOXYGEN__)
63 uint8_t* rxbuf,
size_t n) {
68 return i2cMasterTransmitTimeout(i2cp, sad, &txbuf, 1, rxbuf, n,
90 return i2cMasterTransmitTimeout(i2cp, sad, txbuf, n + 1, NULL, 0,
104 osalDbgCheck(ip != NULL);
130 osalDbgCheck((ip != NULL) && (axes != NULL));
136 "comp_read_raw(), invalid state");
137 osalDbgAssert((devp->config->i2cp->state == I2C_READY),
138 "comp_read_raw(), channel not ready");
140#if LIS3MDL_SHARED_I2C
141 i2cAcquireBus(devp->config->i2cp);
142 i2cStart(devp->config->i2cp,
143 devp->config->i2ccfg);
149#if LIS3MDL_SHARED_I2C
150 i2cReleaseBus(devp->config->i2cp);
155 tmp = buff[2 * i] + (buff[2 * i + 1] << 8);
156 axes[i] = (int32_t)tmp;
184 osalDbgCheck((ip != NULL) && (axes != NULL));
191 "comp_read_cooked(), invalid state");
195 axes[i] = (raw[i] * devp->compsensitivity[i]) - devp->compbias[i];
217 osalDbgCheck((ip != NULL) && (bp != NULL));
223 "comp_set_bias(), invalid state");
226 devp->compbias[i] = bp[i];
246 osalDbgCheck(ip != NULL);
252 "comp_reset_bias(), invalid state");
279 osalDbgCheck((ip != NULL) && (sp != NULL));
282 "comp_set_sensivity(), invalid state");
285 devp->compsensitivity[i] = sp[i];
305 osalDbgCheck(ip != NULL);
311 "comp_reset_sensivity(), invalid state");
326 osalDbgAssert(FALSE,
"comp_reset_sensivity(), compass full scale issue");
350 osalDbgCheck(devp != NULL);
353 "comp_set_full_scale(), invalid state");
354 osalDbgAssert((devp->config->i2cp->state == I2C_READY),
355 "comp_set_full_scale(), channel not ready");
378 if((msg == MSG_OK) &&
379 (newfs != devp->compfullscale)) {
381 scale = newfs / devp->compfullscale;
382 devp->compfullscale = newfs;
384#if LIS3MDL_SHARED_I2C
385 i2cAcquireBus(devp->config->i2cp);
386 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
393#if LIS3MDL_SHARED_I2C
394 i2cReleaseBus(devp->config->i2cp);
403#if LIS3MDL_SHARED_I2C
404 i2cAcquireBus(devp->config->i2cp);
405 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
409 devp->config->slaveaddress,
412#if LIS3MDL_SHARED_I2C
413 i2cReleaseBus(devp->config->i2cp);
420 devp->compsensitivity[i] *= scale;
421 devp->compbias[i] *= scale;
472 osalDbgCheck((devp != NULL) && (config != NULL));
475 "lis3mdlStart(), invalid state");
477 devp->config = config;
482 cr[1] = devp->config->compodr;
483#if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
484 cr[1] |= devp->config->compopmodexy;
492 cr[2] = devp->config->compfullscale;
498#if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
499 cr[3] = devp->config->compconvmode;
506#if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
507 cr[4] = devp->config->compopmodez | devp->config->endianness;
514#if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
515 cr[5] = devp->config->bdu;
520#if LIS3MDL_SHARED_I2C
521 i2cAcquireBus((devp)->config->
i2cp);
523 i2cStart((devp)->config->
i2cp,
524 (devp)->config->i2ccfg);
529#if LIS3MDL_SHARED_I2C
530 i2cReleaseBus((devp)->config->
i2cp);
537 if(devp->config->compsensitivity == NULL) {
541 devp->compsensitivity[i] = devp->config->compsensitivity[i];
548 if(devp->config->compsensitivity == NULL) {
552 devp->compsensitivity[i] = devp->config->compsensitivity[i];
559 if(devp->config->compsensitivity == NULL) {
563 devp->compsensitivity[i] = devp->config->compsensitivity[i];
570 if(devp->config->compsensitivity == NULL) {
574 devp->compsensitivity[i] = devp->config->compsensitivity[i];
579 osalDbgAssert(FALSE,
"lis3mdlStart(), compass full scale issue");
582 if(devp->config->compbias != NULL)
584 devp->compbias[i] = devp->config->compbias[i];
590 osalThreadSleepMilliseconds(5);
604 osalDbgCheck(devp != NULL);
607 "lis3mdlStop(), invalid state");
611#if LIS3MDL_SHARED_I2C
612 i2cAcquireBus((devp)->config->i2cp);
613 i2cStart((devp)->config->i2cp,
614 (devp)->config->i2ccfg);
623 i2cStop((devp)->config->i2cp);
624#if LIS3MDL_SHARED_I2C
625 i2cReleaseBus((devp)->config->i2cp);
static const struct ADXL317VMT vmt_device
void lis3mdlStart(LIS3MDLDriver *devp, const LIS3MDLConfig *config)
Configures and activates LIS3MDL Complex Driver peripheral.
msg_t lis3mdlI2CWriteRegister(I2CDriver *i2cp, lis3mdl_sad_t sad, uint8_t *txbuf, uint8_t n)
Writes a value into a register using I2C.
#define LIS3MDL_COMP_SENS_4GA
static size_t comp_get_axes_number(void *ip)
Return the number of axes of the BaseCompass.
static msg_t comp_set_full_scale(LIS3MDLDriver *devp, lis3mdl_comp_fs_t fs)
Changes the LIS3MDLDriver compass fullscale value.
static msg_t comp_set_sensivity(void *ip, float *sp)
Set sensitivity values for the BaseCompass.
#define LIS3MDL_CTRL_REG3_MD1
static msg_t comp_reset_bias(void *ip)
Reset bias values for the BaseCompass.
#define LIS3MDL_COMP_SENS_12GA
#define LIS3MDL_CTRL_REG1_OM1
static msg_t comp_set_bias(void *ip, float *bp)
Set bias values for the BaseCompass.
#define LIS3MDL_COMP_16GA
static msg_t comp_reset_sensivity(void *ip)
Reset sensitivity values for the BaseCompass.
#define LIS3MDL_AD_OUT_X_L
static msg_t comp_read_cooked(void *ip, float axes[])
Retrieves cooked data from the BaseCompass.
#define LIS3MDL_COMP_SENS_16GA
void lis3mdlObjectInit(LIS3MDLDriver *devp)
Initializes an instance.
#define LIS3MDL_CTRL_REG2_FS_MASK
void lis3mdlStop(LIS3MDLDriver *devp)
Deactivates the LIS3MDL Complex Driver peripheral.
#define LIS3MDL_AD_CTRL_REG2
#define LIS3MDL_AD_CTRL_REG3
lis3mdl_comp_fs_t
LIS3MDL full scale.
msg_t lis3mdlI2CReadRegister(I2CDriver *i2cp, lis3mdl_sad_t sad, uint8_t reg, uint8_t *rxbuf, size_t n)
Reads registers value using I2C.
#define LIS3MDL_CTRL_REG1_OM0
#define LIS3MDL_AD_CTRL_REG1
#define LIS3MDL_COMP_12GA
lis3mdl_sad_t
LIS3MDL slave address.
#define LIS3MDL_CTRL_REG3_MD0
static const struct BaseCompassVMT vmt_compass
#define LIS3MDL_COMP_BIAS
#define LIS3MDL_COMP_NUMBER_OF_AXES
LIS3MDL compass subsystem characteristics.
static msg_t comp_read_raw(void *ip, int32_t axes[])
Retrieves raw data from the BaseCompass.
#define LIS3MDL_COMP_SENS_8GA
LIS3MDL MEMS interface module header.
const struct BaseCompassVMT * vmt
Virtual Methods Table.
BaseCompass virtual methods table.
LIS3MDL configuration structure.
I2CDriver * i2cp
I2C driver associated to this LIS3MDL.
LIS3MDL 3-axis compass class.
const struct LIS3MDLVMT * vmt
Virtual Methods Table.
BaseCompass comp_if
Base compass interface.
LIS3MDL virtual methods table.