bool lps25hSetEnabled(bool enable) { uint8_t enable_mask; bool status; if (!isInit) return false; if (enable) { enable_mask = 0b11000110; // Power on, 25Hz, BDU, reset zero status = i2cdevWrite(I2Cx, devAddr, LPS25H_CTRL_REG1, 1, &enable_mask); enable_mask = 0b00001111; // AVG-P 512, AVG-T 64 status = i2cdevWrite(I2Cx, devAddr, LPS25H_RES_CONF, 1, &enable_mask); // FIFO averaging. This requres temp reg to be read in different read as reg auto inc // wraps back to LPS25H_PRESS_OUT_L after LPS25H_PRESS_OUT_H is read. enable_mask = 0b11000011; // FIFO Mean mode, 4 moving average status = i2cdevWrite(I2Cx, devAddr, LPS25H_FIFO_CTRL, 1, &enable_mask); enable_mask = 0b01000000; // FIFO Enable status = i2cdevWrite(I2Cx, devAddr, LPS25H_CTRL_REG2, 1, &enable_mask); } else { enable_mask = 0x00; // Power off and default values status = i2cdevWrite(I2Cx, devAddr, LPS25H_CTRL_REG1, 1, &enable_mask); } return status; }
bool lps25hSetEnabled(bool enable) { uint8_t enable_mask; bool status; if (!isInit) return false; if (enable) { enable_mask = 0b11000110; // Power on, 25Hz, BDU, reset zero status = i2cdevWrite(I2Cx, devAddr, LPS25H_CTRL_REG1, 1, &enable_mask); enable_mask = 0b00001111; // AVG-P 512, AVG-T 64 status = i2cdevWrite(I2Cx, devAddr, LPS25H_RES_CONF, 1, &enable_mask); // TODO: Investigate why temp values becomes wrong when FIFO averaging is enabled. // enable_mask = 0b11000011; // FIFO Mean mode, 4 moving average // status = i2cdevWrite(I2Cx, devAddr, LPS25H_FIFO_CTRL, 1, &enable_mask); // enable_mask = 0b01000000; // FIFO Enable // status = i2cdevWrite(I2Cx, devAddr, LPS25H_CTRL_REG2, 1, &enable_mask); } else { enable_mask = 0x00; // Power off and default values status = i2cdevWrite(I2Cx, devAddr, LPS25H_CTRL_REG1, 1, &enable_mask); } return status; }
void ak8963SetAdjustment(int8_t x, int8_t y, int8_t z) { buffer[0] = x; buffer[1] = y; buffer[2] = z; i2cdevWrite(I2Cx, devAddr, AK8963_RA_ASAX, 3, buffer); }
/*! * @brief Generic burst write * * @param [out] dev_id I2C address, SPI chip select or user desired identifier * * @return Zero if successful, otherwise an error code */ static bstdr_ret_t bmi088_burst_write(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len) { /**< Burst write code comes here */ if (i2cdevWrite(I2C3_DEV, dev_id,reg_addr,(uint16_t) len, reg_data)) { return BSTDR_OK; } else { return BSTDR_E_CON_ERROR; } }
/** Do a self test. * @return True if self test passed, false otherwise */ bool hmc5883lSelfTest() { bool testStatus = true; int16_t mxp, myp, mzp; // positive magnetometer measurements int16_t mxn, myn, mzn; // negative magnetometer measurements struct { uint8_t configA; uint8_t configB; uint8_t mode; } regSave; // Save register values if (i2cdevRead(I2Cx, devAddr, HMC5883L_RA_CONFIG_A, sizeof(regSave), (uint8_t *)®Save) == false) { // TODO: error handling return false; } // Set gain (sensitivity) hmc5883lSetGain(HMC5883L_ST_GAIN); // Write CONFIG_A register and do positive test i2cdevWriteByte(I2Cx, devAddr, HMC5883L_RA_CONFIG_A, (HMC5883L_AVERAGING_1 << (HMC5883L_CRA_AVERAGE_BIT - HMC5883L_CRA_AVERAGE_LENGTH + 1)) | (HMC5883L_RATE_15 << (HMC5883L_CRA_RATE_BIT - HMC5883L_CRA_RATE_LENGTH + 1)) | (HMC5883L_BIAS_POSITIVE << (HMC5883L_CRA_BIAS_BIT - HMC5883L_CRA_BIAS_LENGTH + 1))); /* Perform test measurement & check results */ hmc5883lSetMode(HMC5883L_MODE_SINGLE); vTaskDelay(M2T(HMC5883L_ST_DELAY_MS)); hmc5883lGetHeading(&mxp, &myp, &mzp); // Write CONFIG_A register and do negative test i2cdevWriteByte(I2Cx, devAddr, HMC5883L_RA_CONFIG_A, (HMC5883L_AVERAGING_1 << (HMC5883L_CRA_AVERAGE_BIT - HMC5883L_CRA_AVERAGE_LENGTH + 1)) | (HMC5883L_RATE_15 << (HMC5883L_CRA_RATE_BIT - HMC5883L_CRA_RATE_LENGTH + 1)) | (HMC5883L_BIAS_NEGATIVE << (HMC5883L_CRA_BIAS_BIT - HMC5883L_CRA_BIAS_LENGTH + 1))); /* Perform test measurement & check results */ hmc5883lSetMode(HMC5883L_MODE_SINGLE); vTaskDelay(M2T(HMC5883L_ST_DELAY_MS)); hmc5883lGetHeading(&mxn, &myn, &mzn); if (hmc5883lEvaluateSelfTest(HMC5883L_ST_X_MIN, HMC5883L_ST_X_MAX, mxp, "pos X") && hmc5883lEvaluateSelfTest(HMC5883L_ST_Y_MIN, HMC5883L_ST_Y_MAX, myp, "pos Y") && hmc5883lEvaluateSelfTest(HMC5883L_ST_Z_MIN, HMC5883L_ST_Z_MAX, mzp, "pos Z") && hmc5883lEvaluateSelfTest(-HMC5883L_ST_X_MAX, -HMC5883L_ST_X_MIN, mxn, "neg X") && hmc5883lEvaluateSelfTest(-HMC5883L_ST_Y_MAX, -HMC5883L_ST_Y_MIN, myn, "neg Y") && hmc5883lEvaluateSelfTest(-HMC5883L_ST_Z_MAX, -HMC5883L_ST_Z_MIN, mzn, "neg Z")) { DEBUG_PRINT("Self test [OK].\n"); } else { testStatus = false; } // Restore registers if (i2cdevWrite(I2Cx, devAddr, HMC5883L_RA_CONFIG_A, sizeof(regSave), (uint8_t *)®Save) == false) { // TODO: error handling return false; } return true; //testStatus; }