49 #if (LIS3MDL_USE_I2C) || defined(__DOXYGEN__)
63 uint8_t* rxbuf,
size_t n) {
66 txbuf |= LIS3MDL_SUB_MS;
68 return i2cMasterTransmitTimeout(i2cp, sad, &txbuf, 1, rxbuf, n,
88 (*txbuf) |= LIS3MDL_SUB_MS;
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);
146 LIS3MDL_AD_OUT_X_L, buff,
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");
255 devp->compbias[i] = LIS3MDL_COMP_BIAS;
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");
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;
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");
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
381 i2cAcquireBus(devp->config->i2cp);
382 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
387 LIS3MDL_AD_CTRL_REG2, &buff[1], 1);
389 #if LIS3MDL_SHARED_I2C
390 i2cReleaseBus(devp->config->i2cp);
395 buff[1] &= ~(LIS3MDL_CTRL_REG2_FS_MASK);
397 buff[0] = LIS3MDL_AD_CTRL_REG2;
399 #if LIS3MDL_SHARED_I2C
400 i2cAcquireBus(devp->config->i2cp);
401 i2cStart(devp->config->i2cp, devp->config->i2ccfg);
405 devp->config->slaveaddress,
408 #if LIS3MDL_SHARED_I2C
409 i2cReleaseBus(devp->config->i2cp);
417 devp->compsensitivity[i] *= scale;
418 devp->compbias[i] *= scale;
447 devp->
vmt = &vmt_device;
468 osalDbgCheck((devp != NULL) && (config != NULL));
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
517 i2cAcquireBus((devp)->config->
i2cp);
519 i2cStart((devp)->config->
i2cp,
520 (devp)->config->i2ccfg);
525 #if LIS3MDL_SHARED_I2C
526 i2cReleaseBus((devp)->config->
i2cp);
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];
575 osalDbgAssert(FALSE,
"lis3mdlStart(), compass full scale issue");
578 if(devp->config->compbias != NULL)
580 devp->compbias[i] = devp->config->compbias[i];
583 devp->compbias[i] = LIS3MDL_COMP_BIAS;
586 osalThreadSleepMilliseconds(5);
600 osalDbgCheck(devp != NULL);
603 "lis3mdlStop(), invalid state");
606 #if (LIS3MDL_USE_I2C)
607 #if LIS3MDL_SHARED_I2C
608 i2cAcquireBus((devp)->config->i2cp);
609 i2cStart((devp)->config->i2cp,
610 (devp)->config->i2ccfg);
614 cr[0] = LIS3MDL_AD_CTRL_REG3;
615 cr[1] = LIS3MDL_CTRL_REG3_MD0 | LIS3MDL_CTRL_REG3_MD1;
619 i2cStop((devp)->config->i2cp);
620 #if LIS3MDL_SHARED_I2C
621 i2cReleaseBus((devp)->config->i2cp);