49#if (LIS3MDL_USE_I2C) || defined(__DOXYGEN__)
63 uint8_t* rxbuf,
size_t n) {
136 "comp_read_raw(), invalid state");
138 "comp_read_raw(), channel not ready");
140#if LIS3MDL_SHARED_I2C
143 devp->config->i2ccfg);
149#if LIS3MDL_SHARED_I2C
155 tmp = buff[2 * i] + (buff[2 * i + 1] << 8);
156 axes[i] = (int32_t)tmp;
191 "comp_read_cooked(), invalid state");
195 axes[i] = (raw[i] * devp->compsensitivity[i]) - devp->compbias[i];
223 "comp_set_bias(), invalid state");
226 devp->compbias[i] = bp[i];
252 "comp_reset_bias(), invalid state");
282 "comp_set_sensivity(), invalid state");
285 devp->compsensitivity[i] = sp[i];
311 "comp_reset_sensivity(), invalid state");
353 "comp_set_full_scale(), invalid state");
355 "comp_set_full_scale(), channel not ready");
379 (newfs != devp->compfullscale)) {
381 scale = newfs / devp->compfullscale;
382 devp->compfullscale = newfs;
384#if LIS3MDL_SHARED_I2C
386 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
393#if LIS3MDL_SHARED_I2C
403#if LIS3MDL_SHARED_I2C
405 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
409 devp->config->slaveaddress,
412#if LIS3MDL_SHARED_I2C
420 devp->compsensitivity[i] *= scale;
421 devp->compbias[i] *= scale;
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
529#if LIS3MDL_SHARED_I2C
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];
582 if(devp->config->compbias != NULL)
584 devp->compbias[i] = devp->config->compbias[i];
607 "lis3mdlStop(), invalid state");
611#if LIS3MDL_SHARED_I2C
614 (devp)->config->i2ccfg);
624#if LIS3MDL_SHARED_I2C
static const struct ADXL317VMT vmt_device
#define objGetInstance(type, ip)
Returns the instance pointer starting from an interface pointer.
msg_t i2cStart(I2CDriver *i2cp, const I2CConfig *config)
Configures and activates the I2C peripheral.
msg_t i2cMasterTransmitTimeout(I2CDriver *i2cp, i2caddr_t addr, const uint8_t *txbuf, size_t txbytes, uint8_t *rxbuf, size_t rxbytes, sysinterval_t timeout)
Sends data via the I2C bus.
void i2cReleaseBus(I2CDriver *i2cp)
Releases exclusive access to the I2C bus.
void i2cStop(I2CDriver *i2cp)
Deactivates the I2C peripheral.
void i2cAcquireBus(I2CDriver *i2cp)
Gains exclusive access to the I2C bus.
struct hal_i2c_driver I2CDriver
Type of a structure representing an I2C driver.
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
#define osalDbgAssert(c, remark)
Condition assertion.
#define osalDbgCheck(c)
Function parameters check.
#define osalThreadSleepMilliseconds(msecs)
Delays the invoking thread for the specified number of milliseconds.
#define FALSE
Generic 'false' preprocessor boolean constant.
#define MSG_OK
Normal wakeup message.
#define MSG_RESET
Wakeup caused by a reset condition.
#define TIME_INFINITE
Infinite interval specification for all functions with a timeout specification.
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.
const I2CConfig * config
Current configuration data.