56 cmd.v.regAddr = reg_addr;
58 if (!
i2cSendCmdAlt(dev, addr, &cmd.d[REG_OFFSET], TRX_SIZE, &rpl.d[REG_OFFSET], TRX_SIZE))
return errRebase(
"AHRS");
61 if (rpl.v.regAddr != reg_addr)
return errSet(
ERROR(E_AHRS_REGSDIFFER));
63 if (readback != NULL) *readback = rpl.v.val;
70 assert(value != NULL);
77 if (rpl.v.regAddr != reg_addr)
return errSet(
ERROR(E_AHRS_REGSDIFFER));
89 if (!
ahrsReadReg(dev, addr, AHRS_REG_VERSION, &f))
return false;
92 *version = (uint8_t) ((
fltToI32(f, 100) + 5) / 10);
105 memcpy((
void *)data, ahrsdata + 1,
sizeof(
CompassData));
void ahrsOff()
Switch off the AHRS.
This driver is to read and configure the AHRS I2C sensor.
void ahrsOn()
Switch on the AHRS.
bool ahrsGetVersion(I2C_Device *dev, uint8_t addr, uint8_t *version)
Reads the AHRS version.
void gpioPinConf(int pin, GpioPinDir dir)
Configure PIN directionality.
Structure defines OpenCores I2C Device.
bool i2cSendCmdAlt(I2C_Device *dev, i2cAddr addr, uint8_t *cmd, int cmd_len, uint8_t *answer, int answer_len)
Writes a command to the I2C device and receive the answer.
void gpioPinSet(int pin, bool high)
Sets the pin state.
Structure defines data from a compass/tilt/gyro sensor.
Manages the global system error.
bool ahrsWriteReg(I2C_Device *dev, uint8_t addr, uint8_t reg_addr, f32_t newvalue, f32_t *readback)
Writes an AHRS register.
bool i2cReadRegAlt(I2C_Device *dev, i2cAddr addr, uint8_t reg_addr, uint8_t *answer, int len)
Reads a register from a I2C device.
bool ahrsRead(I2C_Device *dev, uint8_t addr, CompassData *data)
Reads all data from the AHRS.
uint32_t f32_t
32 bit representation for float.
#define GPIO_AHRS_ENABLE
Defines GPIO pins.
static bool errRebase(const char *name)
Rebases the cause of the error message.
bool errSet(uint32_t code, const char *error, const char *name)
Sets an error.
#define ERROR(CODE,...)
Expands an error code to an error code with a description (if ERROR_W_DESCR is declared).
bool ahrsReadReg(I2C_Device *dev, uint8_t addr, uint8_t reg_addr, f32_t *value)
Reads an AHRS register.
OpenCores I2C device driver.
int32_t fltToI32(f32_t value, uint32_t multiplier)
This takes a f32_t IEEE 754 single precision floating point, and converts it to a multiplied integer...