49 #if (LIS3DSH_USE_SPI) || defined(__DOXYGEN__)
63 cmd = reg | LIS3DSH_RW;
65 spiSend(spip, 1, &cmd);
66 spiReceive(spip, n, b);
85 spiSend(spip, 1, &cmd);
126 osalDbgCheck((ip != NULL) && (axes != NULL));
132 "acc_read_raw(), invalid state");
135 #if LIS3DSH_SHARED_SPI
136 osalDbgAssert((devp->config->spip->state == SPI_READY),
137 "acc_read_raw(), channel not ready");
139 spiAcquireBus(devp->config->spip);
140 spiStart(devp->config->spip,
141 devp->config->spicfg);
147 #if LIS3DSH_SHARED_SPI
148 spiReleaseBus(devp->config->spip);
153 tmp = buff[2 * i] + (buff[2 * i + 1] << 8);
154 axes[i] = (int32_t)tmp;
182 osalDbgCheck((ip != NULL) && (axes != NULL));
188 "acc_read_cooked(), invalid state");
192 axes[i] = (raw[i] * devp->accsensitivity[i]) - devp->accbias[i];
214 osalDbgCheck((ip != NULL) && (bp != NULL));
220 "acc_set_bias(), invalid state");
223 devp->accbias[i] = bp[i];
243 osalDbgCheck(ip != NULL);
249 "acc_reset_bias(), invalid state");
252 devp->accbias[i] = LIS3DSH_ACC_BIAS;
276 osalDbgCheck((ip != NULL) && (sp != NULL));
279 "acc_set_sensivity(), invalid state");
282 devp->accsensitivity[i] = sp[i];
302 osalDbgCheck(ip != NULL);
308 "acc_reset_sensivity(), invalid state");
312 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_2G;
315 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_4G;
318 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_6G;
321 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_8G;
324 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_16G;
327 "acc_reset_sensivity(), accelerometer full scale issue");
351 osalDbgCheck(devp != NULL);
354 "acc_set_full_scale(), invalid state");
355 osalDbgAssert((devp->config->spip->state == SPI_READY),
356 "acc_set_full_scale(), channel not ready");
360 newfs = LIS3DSH_ACC_2G;
363 newfs = LIS3DSH_ACC_4G;
366 newfs = LIS3DSH_ACC_6G;
369 newfs = LIS3DSH_ACC_8G;
372 newfs = LIS3DSH_ACC_16G;
379 if(newfs != devp->accfullscale) {
381 scale = newfs / devp->accfullscale;
382 devp->accfullscale = newfs;
385 #if LIS3DSH_SHARED_SPI
386 spiAcquireBus(devp->config->spip);
387 spiStart(devp->config->spip,
388 devp->config->spicfg);
394 #if LIS3DSH_SHARED_SPI
395 spiReleaseBus(devp->config->spip);
399 cr &= ~(LIS3DSH_CTRL_REG5_FS_MASK);
403 #if LIS3DSH_SHARED_SPI
404 spiAcquireBus(devp->config->spip);
405 spiStart(devp->config->spip,
406 devp->config->spicfg);
412 #if LIS3DSH_SHARED_SPI
413 spiReleaseBus(devp->config->spip);
419 devp->accsensitivity[i] *= scale;
420 devp->accbias[i] *= scale;
449 devp->
vmt = &vmt_device;
470 osalDbgCheck((devp != NULL) && (config != NULL));
474 "lis3dshStart(), invalid state");
476 devp->config = config;
480 cr = LIS3DSH_CTRL_REG4_XEN | LIS3DSH_CTRL_REG4_YEN | LIS3DSH_CTRL_REG4_ZEN |
481 devp->config->accoutputdatarate;
482 #if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__)
483 cr |= devp->config->accblockdataupdate;
488 #if LIS3DSH_SHARED_SPI
489 spiAcquireBus(devp->config->spip);
491 spiStart(devp->config->spip, devp->config->spicfg);
495 #if LIS3DSH_SHARED_SPI
496 spiReleaseBus(devp->config->spip);
502 cr = devp->config->accfullscale;
503 #if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__)
504 cr |= devp->config->accantialiasing;
509 #if LIS3DSH_SHARED_SPI
510 spiAcquireBus(devp->config->spip);
511 spiStart(devp->config->spip, devp->config->spicfg);
516 #if LIS3DSH_SHARED_SPI
517 spiReleaseBus(devp->config->spip);
523 cr = LIS3DSH_CTRL_REG6_ADD_INC;
524 #if LIS3DSH_USE_ADVANCED || defined(__DOXYGEN__)
525 cr |= devp->config->accblockdataupdate;
530 #if LIS3DSH_SHARED_SPI
531 spiAcquireBus(devp->config->spip);
532 spiStart(devp->config->spip, devp->config->spicfg);
537 #if LIS3DSH_SHARED_SPI
538 spiReleaseBus(devp->config->spip);
544 devp->accfullscale = LIS3DSH_ACC_2G;
545 if(devp->config->accsensitivity == NULL)
547 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_2G;
550 devp->accsensitivity[i] = devp->config->accsensitivity[i];
553 devp->accfullscale = LIS3DSH_ACC_4G;
554 if(devp->config->accsensitivity == NULL)
556 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_4G;
559 devp->accsensitivity[i] = devp->config->accsensitivity[i];
562 devp->accfullscale = LIS3DSH_ACC_6G;
563 if(devp->config->accsensitivity == NULL)
565 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_6G;
568 devp->accsensitivity[i] = devp->config->accsensitivity[i];
571 devp->accfullscale = LIS3DSH_ACC_8G;
572 if(devp->config->accsensitivity == NULL)
574 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_8G;
577 devp->accsensitivity[i] = devp->config->accsensitivity[i];
580 devp->accfullscale = LIS3DSH_ACC_16G;
581 if(devp->config->accsensitivity == NULL)
583 devp->accsensitivity[i] = LIS3DSH_ACC_SENS_16G;
586 devp->accsensitivity[i] = devp->config->accsensitivity[i];
589 osalDbgAssert(FALSE,
"lis3dshStart(), accelerometer full scale issue");
593 if(devp->config->accbias != NULL)
595 devp->accbias[i] = devp->config->accbias[i];
598 devp->accbias[i] = LIS3DSH_ACC_BIAS;
601 osalThreadSleepMilliseconds(10);
615 osalDbgCheck(devp != NULL);
619 "lis3dshStop(), invalid state");
622 #if (LIS3DSH_USE_SPI)
623 #if LIS3DSH_SHARED_SPI
624 spiAcquireBus(devp->config->spip);
625 spiStart(devp->config->spip,
626 devp->config->spicfg);
633 spiStop(devp->config->spip);
634 #if LIS3DSH_SHARED_SPI
635 spiReleaseBus(devp->config->spip);