49 #if (LIS3MDL_USE_I2C) || defined(__DOXYGEN__)
63 uint8_t* rxbuf,
size_t n) {
66 txbuf |= LIS3MDL_SUB_MS;
88 (*txbuf) |= LIS3MDL_SUB_MS;
136 "comp_read_raw(), invalid state");
138 "comp_read_raw(), channel not ready");
140 #if LIS3MDL_SHARED_I2C
143 devp->config->i2ccfg);
146 LIS3MDL_AD_OUT_X_L, buff,
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");
255 devp->compbias[i] = LIS3MDL_COMP_BIAS;
282 "comp_set_sensivity(), invalid state");
285 devp->compsensitivity[i] = sp[i];
311 "comp_reset_sensivity(), invalid state");
315 devp->compsensitivity[i] = LIS3MDL_COMP_SENS_4GA;
318 devp->compsensitivity[i] = LIS3MDL_COMP_SENS_8GA;
321 devp->compsensitivity[i] = LIS3MDL_COMP_SENS_12GA;
324 devp->compsensitivity[i] = LIS3MDL_COMP_SENS_16GA;
353 "comp_set_full_scale(), invalid state");
355 "comp_set_full_scale(), channel not ready");
359 newfs = LIS3MDL_COMP_4GA;
362 newfs = LIS3MDL_COMP_8GA;
365 newfs = LIS3MDL_COMP_12GA;
368 newfs = LIS3MDL_COMP_16GA;
375 if(newfs != devp->compfullscale) {
377 scale = newfs / devp->compfullscale;
378 devp->compfullscale = newfs;
380 #if LIS3MDL_SHARED_I2C
382 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
387 LIS3MDL_AD_CTRL_REG2, &buff[1], 1);
389 #if LIS3MDL_SHARED_I2C
395 buff[1] &= ~(LIS3MDL_CTRL_REG2_FS_MASK);
397 buff[0] = LIS3MDL_AD_CTRL_REG2;
399 #if LIS3MDL_SHARED_I2C
401 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
405 devp->config->slaveaddress,
408 #if LIS3MDL_SHARED_I2C
417 devp->compsensitivity[i] *= scale;
418 devp->compbias[i] *= scale;
447 devp->
vmt = &vmt_device;
471 "lis3mdlStart(), invalid state");
473 devp->config = config;
477 cr[0] = LIS3MDL_AD_CTRL_REG1;
478 cr[1] = devp->config->compoutputdatarate;
479 #if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
480 cr[1] |= devp->config->compoperationmodexy;
482 cr[1] |= LIS3MDL_CTRL_REG1_OM0 | LIS3MDL_CTRL_REG1_OM1;
488 cr[2] = devp->config->compfullscale;
494 #if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
495 cr[3] = devp->config->compconversionmode;
502 #if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
503 cr[4] = devp->config->compoperationmodez | devp->config->endianness;
510 #if LIS3MDL_USE_ADVANCED || defined(__DOXYGEN__)
511 cr[5] = devp->config->blockdataupdate;
516 #if LIS3MDL_SHARED_I2C
525 #if LIS3MDL_SHARED_I2C
531 devp->compfullscale = LIS3MDL_COMP_4GA;
533 if(devp->config->compsensitivity == NULL) {
534 devp->compsensitivity[i] = LIS3MDL_COMP_SENS_4GA;
537 devp->compsensitivity[i] = devp->config->compsensitivity[i];
542 devp->compfullscale = LIS3MDL_COMP_8GA;
544 if(devp->config->compsensitivity == NULL) {
545 devp->compsensitivity[i] = LIS3MDL_COMP_SENS_8GA;
548 devp->compsensitivity[i] = devp->config->compsensitivity[i];
553 devp->compfullscale = LIS3MDL_COMP_12GA;
555 if(devp->config->compsensitivity == NULL) {
556 devp->compsensitivity[i] = LIS3MDL_COMP_SENS_12GA;
559 devp->compsensitivity[i] = devp->config->compsensitivity[i];
564 devp->compfullscale = LIS3MDL_COMP_16GA;
566 if(devp->config->compsensitivity == NULL) {
567 devp->compsensitivity[i] = LIS3MDL_COMP_SENS_16GA;
570 devp->compsensitivity[i] = devp->config->compsensitivity[i];
578 if(devp->config->compbias != NULL)
580 devp->compbias[i] = devp->config->compbias[i];
583 devp->compbias[i] = LIS3MDL_COMP_BIAS;
603 "lis3mdlStop(), invalid state");
606 #if (LIS3MDL_USE_I2C)
607 #if LIS3MDL_SHARED_I2C
610 (devp)->config->i2ccfg);
614 cr[0] = LIS3MDL_AD_CTRL_REG3;
615 cr[1] = LIS3MDL_CTRL_REG3_MD0 | LIS3MDL_CTRL_REG3_MD1;
620 #if LIS3MDL_SHARED_I2C