| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368 |
- /*
- H3LIS331DL.cpp
- A library for 3-Axis Digital Accelerometer(±400g)
- Copyright (c) 2014 seeed technology inc.
- Website : www.seeed.cc
- Author : lawliet zou
- Create Time: April 2014
- Change Log :
- The MIT License (MIT)
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- */
- #include "H3LIS331DL.h"
- #include <Wire.h>
- void H3LIS331DL::init(H3LIS331DL_ODR_t odr, H3LIS331DL_Mode_t mode, H3LIS331DL_Fullscale_t fullScale) {
- Wire.begin();
- //set output data rate
- setODR(odr);
- //set PowerMode
- setMode(mode);
- //set Fullscale
- setFullScale(fullScale);
- //set axis Enable
- setAxis(H3LIS331DL_X_ENABLE | H3LIS331DL_Y_ENABLE | H3LIS331DL_Z_ENABLE);
- }
- void H3LIS331DL::importPara(int16_t val_x, int16_t val_y, int16_t val_z) {
- _adjVal[0] = val_x;
- _adjVal[1] = val_y;
- _adjVal[2] = val_z;
- }
- void H3LIS331DL::readXYZ(int16_t* x, int16_t* y, int16_t* z) {
- //get Acceleration Raw data
- AxesRaw_t data;
- status_t response = getAccAxesRaw(&data);
- if (MEMS_SUCCESS == response) {
- *x = (data.AXIS_X - _adjVal[0]);
- *y = (data.AXIS_Y - _adjVal[1]);
- *z = (data.AXIS_Z - _adjVal[2]);
- }
- }
- void H3LIS331DL::getAcceleration(double* xyz) {
- AxesRaw_t data;
- double gains = 0.003;
- getAccAxesRaw(&data);
- xyz[0] = (data.AXIS_X - _adjVal[0]) * gains;
- xyz[1] = (data.AXIS_Y - _adjVal[1]) * gains;
- xyz[2] = (data.AXIS_Z - _adjVal[2]) * gains;
- }
- /*******************************************************************************
- Function Name : getWHO_AM_I
- Description : Read identification code from H3LIS331DL::WHO_AM_I register
- Input : char to be filled with the Device identification Value
- Output : None
- Return : Status [value of FSS]
- *******************************************************************************/
- status_t H3LIS331DL::getWHO_AM_I(byte* val) {
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_WHO_AM_I, val)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setODR
- Description : Sets H3LIS331DL Accelerometer Output Data Rate
- Input : Output Data Rate
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setODR(H3LIS331DL_ODR_t dr) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xE7;
- value |= dr << H3LIS331DL_DR;
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setMode
- Description : Sets H3LIS331DLH Accelerometer Operating Mode
- Input : Modality (H3LIS331DL_LOW_POWER, H3LIS331DL_NORMAL, H3LIS331DL_POWER_DOWN...)
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setMode(H3LIS331DL_Mode_t pm) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x1F;
- value |= (pm << H3LIS331DL_PM);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setAxis
- Description : Enable/Disable LIS331DLH Axis
- Input : H3LIS331DL_X_ENABLE/H3LIS331DL_X_DISABLE | H3LIS331DL_Y_ENABLE/H3LIS331DL_Y_DISABLE
- | H3LIS331DL_Z_ENABLE/H3LIS331DL_Z_DISABLE
- Output : None
- Note : You MUST use all input variable in the argument, as example
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setAxis(H3LIS331DL_Axis_t axis) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xF8;
- value |= (0x07 & axis);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG1, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setFullScale
- Description : Sets the LIS331DLH FullScale
- Input : H3LIS331DL_FULLSCALE_2/H3LIS331DL_FULLSCALE_4/H3LIS331DL_FULLSCALE_8
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setFullScale(H3LIS331DL_Fullscale_t fs) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xCF;
- value |= (fs << H3LIS331DL_FS);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setBDU
- Description : Enable/Disable Block Data Update Functionality
- Input : MEMS_ENABLE/MEMS_DISABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setBDU(State_t bdu) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x7F;
- value |= (bdu << H3LIS331DL_BDU);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setBLE
- Description : Set Endianess (MSB/LSB)
- Input : H3LIS331DL_BLE_LSB / H3LIS331DL_BLE_MSB
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setBLE(H3LIS331DL_Endianess_t ble) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xBF;
- value |= (ble << H3LIS331DL_BLE);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setFDS
- Description : Set Filter Data Selection
- Input : MEMS_ENABLE/MEMS_DISABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setFDS(State_t fds) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xEF;
- value |= (fds << H3LIS331DL_FDS);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setBOOT
- Description : Rebot memory content
- Input : MEMS_ENABLE/MEMS_DISABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setBOOT(State_t boot) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x7F;
- value |= (boot << H3LIS331DL_BOOT);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setSelfTest
- Description : Set Self Test Modality
- Input : MEMS_DISABLE/MEMS_ENABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setSelfTest(State_t st) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xFD;
- value |= (st << H3LIS331DL_ST);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setSelfTestSign
- Description : Set Self Test Sign (Disable = st_plus, Enable = st_minus)
- Input : MEMS_DISABLE/MEMS_ENABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setSelfTestSign(State_t st_sign) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xF7;
- value |= (st_sign << H3LIS331DL_ST_SIGN);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setIntHighLow
- Description : Set Interrupt active state (Disable = active high, Enable = active low)
- Input : MEMS_DISABLE/MEMS_ENABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setIntHighLow(State_t ihl) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x7F;
- value |= (ihl << H3LIS331DL_IHL);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setIntPPOD
- Description : Set Interrupt Push-Pull/OpenDrain Pad (Disable = Push-Pull, Enable = OpenDrain)
- Input : MEMS_DISABLE/MEMS_ENABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setIntPPOD(State_t pp_od) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xBF;
- value |= (pp_od << H3LIS331DL_PP_OD);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt1DataSign
- Description : Set Data signal Interrupt 1 pad
- Input : Modality by H3LIS331DL_INT_Conf_t Typedef
- (H3LIS331DL_INT_SOURCE, H3LIS331DL_INT_1OR2_SOURCE, H3LIS331DL_DATA_READY, H3LIS331DL_BOOT_RUNNING)
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt1DataSign(H3LIS331DL_INT_Conf_t i_cfg) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xFC;
- value |= (i_cfg << H3LIS331DL_I1_CFG);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt2DataSign
- Description : Set Data signal Interrupt 2 pad
- Input : Modality by H3LIS331DL_INT_Conf_t Typedef
- (H3LIS331DL_INT_SOURCE, H3LIS331DL_INT_1OR2_SOURCE, H3LIS331DL_DATA_READY, H3LIS331DL_BOOT_RUNNING)
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt2DataSign(H3LIS331DL_INT_Conf_t i_cfg) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xE7;
- value |= (i_cfg << H3LIS331DL_I2_CFG);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setSPI34Wire
- Description : Set SPI mode
- Input : Modality by H3LIS331DL_SPIMode_t Typedef (H3LIS331DL_SPI_4_WIRE, H3LIS331DL_SPI_3_WIRE)
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setSPI34Wire(H3LIS331DL_SPIMode_t sim) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xFE;
- value |= (sim << H3LIS331DL_SIM);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG4, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : turnONEnable
- Description : TurnON Mode selection for sleep to wake function
- Input : H3LIS331DL_SLEEP_TO_WAKE_DIS/H3LIS331DL_SLEEP_TO_WAKE_ENA
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::turnONEnable(H3LIS331DL_Sleep_To_Wake_Conf_t stw) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG5, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x00;
- value |= (stw << H3LIS331DL_TURN_ON);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG5, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- #if 0
- /*******************************************************************************
- Function Name : HPFilterReset
- Description : Reading register for reset the content of internal HP filter
- Input : None
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::HPFilterReset(void) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_HP_FILTER_RESET, &value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- #endif
- /*******************************************************************************
- Function Name : setReference
- Description : Sets Reference register acceleration value as a reference for HP filter
- Input : Value of reference acceleration value (0-255)
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setReference(int8_t ref) {
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_REFERENCE_REG, ref)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setHPFMode
- Description : Set High Pass Filter Modality
- Input : H3LIS331DL_HPM_NORMAL_MODE_RES/H3LIS331DL_HPM_REF_SIGNAL/H3LIS331DL_HPM_NORMAL_MODE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setHPFMode(H3LIS331DL_HPFMode_t hpm) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x9F;
- value |= (hpm << H3LIS331DL_HPM);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setHPFCutOFF
- Description : Set High Pass CUT OFF Freq
- Input : H3LIS331DL_HPFCF [0,3]
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setHPFCutOFF(H3LIS331DL_HPFCutOffFreq_t hpf) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xFC;
- value |= (hpf << H3LIS331DL_HPCF);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt2HPEnable
- Description : Set Interrupt2 hp filter enable/disable
- Input : MEMS_ENABLE/MEMS_DISABLE
- example : H3LIS331DL_SetInt2HPEnable(MEMS_ENABLE)
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt2HPEnable(State_t stat) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xF7;
- value |= stat << H3LIS331DL_HPEN2 ;
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt1HPEnable
- Description : Set Interrupt1 hp filter enable/disable
- Input : MEMS_ENABLE/MEMS_DISABLE
- example : H3LIS331DL_SetInt1HPEnable(MEMS_ENABLE)
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt1HPEnable(State_t stat) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xFB;
- value |= stat << H3LIS331DL_HPEN1 ;
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG2, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : int1LatchEnable
- Description : Enable Interrupt 1 Latching function
- Input : ENABLE/DISABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::int1LatchEnable(State_t latch) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xFB;
- value |= latch << H3LIS331DL_LIR1;
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : int2LatchEnable
- Description : Enable Interrupt 2 Latching function
- Input : ENABLE/DISABLE
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::int2LatchEnable(State_t latch) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, &value)) {
- return MEMS_ERROR;
- }
- value &= 0xDF;
- value |= latch << H3LIS331DL_LIR2;
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_CTRL_REG3, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : resetInt1Latch
- Description : Reset Interrupt 1 Latching function
- Input : None
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::resetInt1Latch(void) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_SRC, &value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : resetInt2Latch
- Description : Reset Interrupt 2 Latching function
- Input : None
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::resetInt2Latch(void) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_SRC, &value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt1Configuration
- Description : Interrupt 1 Configuration (without 6D_INT)
- Input : H3LIS331DL_INT_AND/OR | H3LIS331DL_INT_ZHIE_ENABLE/DISABLE | H3LIS331DL_INT_ZLIE_ENABLE/DISABLE...
- Output : None
- Note : You MUST use ALL input variable in the argument, as in example above
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt1Configuration(H3LIS331DL_IntConf_t ic) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_CFG, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x40;
- value |= ic;
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_CFG, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt2Configuration
- Description : Interrupt 2 Configuration (without 6D_INT)
- Input : H3LIS331DL_INT_AND/OR | H3LIS331DL_INT_ZHIE_ENABLE/DISABLE | H3LIS331DL_INT_ZLIE_ENABLE/DISABLE...
- Output : None
- Note : You MUST use all input variable in the argument, as example
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt2Configuration(H3LIS331DL_IntConf_t ic) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_CFG, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x40;
- value |= ic;
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_CFG, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt1Mode
- Description : Interrupt 1 Configuration mode (OR, 6D Movement, AND, 6D Position)
- Input : H3LIS331DL_INT_MODE_OR, H3LIS331DL_INT_MODE_6D_MOVEMENT, H3LIS331DL_INT_MODE_AND, H3LIS331DL_INT_MODE_6D_POSITION
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt1Mode(H3LIS331DL_IntMode_t int_mode) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_CFG, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x3F;
- value |= (int_mode << H3LIS331DL_INT_6D);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_CFG, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt2Mode
- Description : Interrupt 2 Configuration mode (OR, 6D Movement, AND, 6D Position)
- Input : H3LIS331DL_INT_MODE_OR, H3LIS331DL_INT_MODE_6D_MOVEMENT, H3LIS331DL_INT_MODE_AND, H3LIS331DL_INT_MODE_6D_POSITION
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt2Mode(H3LIS331DL_IntMode_t int_mode) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_CFG, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x3F;
- value |= (int_mode << H3LIS331DL_INT_6D);
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_CFG, value)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : get6DPositionInt1
- Description : 6D Interrupt 1 Position Detect
- Input : Byte to be filled with H3LIS331DL_POSITION_6D_t Typedef
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::get6DPositionInt1(byte* val) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_SRC, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x7F;
- switch (value) {
- case H3LIS331DL_UP_SX:
- *val = H3LIS331DL_UP_SX;
- break;
- case H3LIS331DL_UP_DX:
- *val = H3LIS331DL_UP_DX;
- break;
- case H3LIS331DL_DW_SX:
- *val = H3LIS331DL_DW_SX;
- break;
- case H3LIS331DL_DW_DX:
- *val = H3LIS331DL_DW_DX;
- break;
- case H3LIS331DL_TOP:
- *val = H3LIS331DL_TOP;
- break;
- case H3LIS331DL_BOTTOM:
- *val = H3LIS331DL_BOTTOM;
- break;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : get6DPositionInt2
- Description : 6D Interrupt 2 Position Detect
- Input : Byte to be filled with H3LIS331DL_POSITION_6D_t Typedef
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::get6DPositionInt2(byte* val) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_SRC, &value)) {
- return MEMS_ERROR;
- }
- value &= 0x7F;
- switch (value) {
- case H3LIS331DL_UP_SX:
- *val = H3LIS331DL_UP_SX;
- break;
- case H3LIS331DL_UP_DX:
- *val = H3LIS331DL_UP_DX;
- break;
- case H3LIS331DL_DW_SX:
- *val = H3LIS331DL_DW_SX;
- break;
- case H3LIS331DL_DW_DX:
- *val = H3LIS331DL_DW_DX;
- break;
- case H3LIS331DL_TOP:
- *val = H3LIS331DL_TOP;
- break;
- case H3LIS331DL_BOTTOM:
- *val = H3LIS331DL_BOTTOM;
- break;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt1Threshold
- Description : Sets Interrupt 1 Threshold
- Input : Threshold = [0,127]
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt1Threshold(byte ths) {
- if (ths > 127) {
- return MEMS_ERROR;
- }
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_THS, ths)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt1Duration
- Description : Sets Interrupt 1 Duration
- Input : Duration = [0,127]
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt1Duration(byte id) {
- if (id > 127) {
- return MEMS_ERROR;
- }
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_DURATION, id)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt2Threshold
- Description : Sets Interrupt 2 Threshold
- Input : Threshold = [0,127]
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt2Threshold(byte ths) {
- if (ths > 127) {
- return MEMS_ERROR;
- }
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_THS, ths)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : setInt2Duration
- Description : Sets Interrupt 2 Duration
- Input : Duration = [0,127]
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::setInt2Duration(byte id) {
- if (id > 127) {
- return MEMS_ERROR;
- }
- if (!writeReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_DURATION, id)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : getStatusReg
- Description : Read the status register
- Input : char to empty by Status Reg Value
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::getStatusReg(byte* val) {
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_STATUS_REG, val)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : getStatusBIT
- Description : Read the status register BIT
- Input : H3LIS331DL_STATUS_REG_ZYXOR, H3LIS331DL_STATUS_REG_ZOR, H3LIS331DL_STATUS_REG_YOR, H3LIS331DL_STATUS_REG_XOR,
- H3LIS331DL_STATUS_REG_ZYXDA, H3LIS331DL_STATUS_REG_ZDA, H3LIS331DL_STATUS_REG_YDA, H3LIS331DL_STATUS_REG_XDA,
- H3LIS331DL_DATAREADY_BIT
- Output : status register BIT
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::getStatusBit(byte statusBIT, byte* val) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_STATUS_REG, &value)) {
- return MEMS_ERROR;
- }
- switch (statusBIT) {
- case H3LIS331DL_STATUS_REG_ZYXOR:
- if (value &= H3LIS331DL_STATUS_REG_ZYXOR) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- case H3LIS331DL_STATUS_REG_ZOR:
- if (value &= H3LIS331DL_STATUS_REG_ZOR) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- case H3LIS331DL_STATUS_REG_YOR:
- if (value &= H3LIS331DL_STATUS_REG_YOR) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- case H3LIS331DL_STATUS_REG_XOR:
- if (value &= H3LIS331DL_STATUS_REG_XOR) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- case H3LIS331DL_STATUS_REG_ZYXDA:
- if (value &= H3LIS331DL_STATUS_REG_ZYXDA) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- case H3LIS331DL_STATUS_REG_ZDA:
- if (value &= H3LIS331DL_STATUS_REG_ZDA) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- case H3LIS331DL_STATUS_REG_YDA:
- if (value &= H3LIS331DL_STATUS_REG_YDA) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- case H3LIS331DL_STATUS_REG_XDA:
- if (value &= H3LIS331DL_STATUS_REG_XDA) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- return MEMS_ERROR;
- }
- /*******************************************************************************
- Function Name : getAccAxesRaw
- Description : Read the Acceleration Values Output Registers
- Input : buffer to empty by AccAxesRaw_t Typedef
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::getAccAxesRaw(AxesRaw_t* buff) {
- byte valueL = 0, valueH = 0;
- readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_X_L, &valueL);
- readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_X_H, &valueH);
- buff->AXIS_X = (valueH << 8) | valueL;
- readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_Y_L, &valueL);
- readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_Y_H, &valueH);
- buff->AXIS_Y = (valueH << 8) | valueL;
- readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_Z_L, &valueL);
- readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_OUT_Z_H, &valueH);
- buff->AXIS_Z = (valueH << 8) | valueL;
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : getInt1Src
- Description : Reset Interrupt 1 Latching function
- Input : buffer to empty by Int1 Source Value
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::getInt1Src(byte* val) {
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_SRC, val)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : getInt2Src
- Description : Reset Interrupt 2 Latching function
- Input : buffer to empty by Int2 Source Value
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::getInt2Src(byte* val) {
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_SRC, val)) {
- return MEMS_ERROR;
- }
- return MEMS_SUCCESS;
- }
- /*******************************************************************************
- Function Name : getInt1SrcBit
- Description : Reset Interrupt 1 Latching function
- Input : H3LIS331DL_INT1_SRC_IA, H3LIS331DL_INT1_SRC_ZH, H3LIS331DL_INT1_SRC_ZL .....
- Output : None
- Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::getInt1SrcBit(byte statusBIT, byte* val) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT1_SRC, &value)) {
- return MEMS_ERROR;
- }
- if (statusBIT == H3LIS331DL_INT_SRC_IA) {
- if (value &= H3LIS331DL_INT_SRC_IA) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_ZH) {
- if (value &= H3LIS331DL_INT_SRC_ZH) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_ZL) {
- if (value &= H3LIS331DL_INT_SRC_ZL) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_YH) {
- if (value &= H3LIS331DL_INT_SRC_YH) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_YL) {
- if (value &= H3LIS331DL_INT_SRC_YL) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_XH) {
- if (value &= H3LIS331DL_INT_SRC_XH) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_XL) {
- if (value &= H3LIS331DL_INT_SRC_XL) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- return MEMS_ERROR;
- }
- /*******************************************************************************
- Function Name : getInt2SrcBit
- Description : Reset Interrupt 2 Latching function
- Input : H3LIS331DL_INT_SRC_IA, H3LIS331DL_INT_SRC_ZH, H3LIS331DL_INT_SRC_ZL .....
- Output : None
- Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- status_t H3LIS331DL::getInt2SrcBit(byte statusBIT, byte* val) {
- byte value;
- if (!readReg(H3LIS331DL_MEMS_I2C_ADDRESS, H3LIS331DL_INT2_SRC, &value)) {
- return MEMS_ERROR;
- }
- if (statusBIT == H3LIS331DL_INT_SRC_IA) {
- if (value &= H3LIS331DL_INT_SRC_IA) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_ZH) {
- if (value &= H3LIS331DL_INT_SRC_ZH) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_ZL) {
- if (value &= H3LIS331DL_INT_SRC_ZL) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_YH) {
- if (value &= H3LIS331DL_INT_SRC_YH) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_YL) {
- if (value &= H3LIS331DL_INT_SRC_YL) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_XH) {
- if (value &= H3LIS331DL_INT_SRC_XH) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- if (statusBIT == H3LIS331DL_INT_SRC_XL) {
- if (value &= H3LIS331DL_INT_SRC_XL) {
- *val = MEMS_SET;
- return MEMS_SUCCESS;
- } else {
- *val = MEMS_RESET;
- return MEMS_SUCCESS;
- }
- }
- return MEMS_ERROR;
- }
- /*******************************************************************************
- Function Name : readReg
- Description : Generic Reading function. It must be full filled with either
- : I2C or SPI reading functions
- Input : Register Address
- Output : Data Read
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- uint8_t H3LIS331DL::readReg(byte deviceAddr, byte Reg, byte* Data) {
- //To be completed with either I2c or SPI reading function
- // i.e. *Data = SPI_Mems_Read_Reg( Reg );
- // i.e. if(!I2C_BufferRead(Data, deviceAddr, Reg, 1))
- // return MEMS_ERROR;
- // else
- // return MEMS_SUCCESS;
- // Reads num bytes starting from address register on device in to _buff array
- byte num = 1;
- Wire.beginTransmission(deviceAddr); // start transmission to device
- Wire.write(Reg); // sends address to read from
- Wire.endTransmission(); // end transmission
- Wire.beginTransmission(deviceAddr); // start transmission to device
- Wire.requestFrom(deviceAddr, num); // request 6 bytes from device
- if (Wire.available()) {
- *Data = Wire.read(); // receive a byte
- Wire.endTransmission(); // end transmission
- return MEMS_SUCCESS;
- } else {
- Wire.endTransmission();
- return MEMS_ERROR;
- }
- }
- /*******************************************************************************
- Function Name : writeReg
- Description : Generic Writing function. It must be full filled with either
- : I2C or SPI writing function
- Input : Register Address, Data to be written
- Output : None
- Return : Status [MEMS_ERROR, MEMS_SUCCESS]
- *******************************************************************************/
- uint8_t H3LIS331DL::writeReg(byte deviceAddress, byte WriteAddr, byte Data) {
- //To be completed with either I2c or SPI writing function
- // i.e. SPI_Mems_Write_Reg(Reg, Data);
- // i.e. I2C_ByteWrite(&Data, deviceAddress, WriteAddr);
- // return MEMS_SUCCESS;
- // Writes val to address register on device
- Wire.beginTransmission(deviceAddress); // start transmission to device
- Wire.write(WriteAddr); // send register address
- Wire.write(Data); // send value to write
- Wire.endTransmission(); // end transmission
- return MEMS_SUCCESS;
- }
|