uint8_t MPU9250::read_reg(unsigned reg, uint32_t speed) { uint8_t buf; if (_whoami == ICM_WHOAMI_20948) { select_register_bank(REG_BANK(reg)); _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(reg), speed), &buf, 1); } else { _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(reg), speed), &buf, 1); } return buf; }
uint8_t MPU9250::read_reg_range(unsigned start_reg, uint32_t speed, uint8_t *buf, uint16_t count) { uint8_t ret; if (buf == NULL) { return PX4_ERROR; } if (_whoami == ICM_WHOAMI_20948) { select_register_bank(REG_BANK(start_reg)); ret = _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(start_reg), speed), buf, count); } else { ret = _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(start_reg), speed), buf, count); } return ret; }
uint8_t MPU9250::read_reg_range(unsigned start_reg, uint32_t speed, uint8_t *buf, uint16_t count) { if (buf == NULL) { return PX4_ERROR; } return _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(start_reg), speed), buf, count); }
uint8_t MPU9250::read_reg(unsigned reg, uint32_t speed) { uint8_t buf{}; _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(reg), speed), &buf, 1); return buf; }
void MPU9250::write_reg(unsigned reg, uint8_t value) { // general register transfer at low clock speed if (_whoami == ICM_WHOAMI_20948) { select_register_bank(REG_BANK(reg)); _interface->write(MPU9250_LOW_SPEED_OP(REG_ADDRESS(reg)), &value, 1); } else { _interface->write(MPU9250_LOW_SPEED_OP(reg), &value, 1); } }
uint16_t MPU9250::read_reg16(unsigned reg) { uint8_t buf[2]; // general register transfer at low clock speed if (_whoami == ICM_WHOAMI_20948) { select_register_bank(REG_BANK(reg)); _interface->read(MPU9250_LOW_SPEED_OP(REG_ADDRESS(reg)), &buf, arraySize(buf)); } else { _interface->read(MPU9250_LOW_SPEED_OP(reg), &buf, arraySize(buf)); } return (uint16_t)(buf[0] << 8) | buf[1]; }