KM3NeT CLB  2.0
KM3NeT CLB v2 Embedded Software
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
lsm303.c
1 /*
2  * KM3NeT CLB v2 Firmware
3  * ----------------------
4  *
5  * Copyright 2012-2019 KM3NeT Collaboration
6  *
7  * All Rights Reserved.
8  *
9  * Author: Vincent van Beveren
10  * Date : 19 Jun 2019
11  */
12 #include "drv/i2c/lsm303.h"
13 
14 
15 void _lsm303RawDataToAxis(uint8_t * data, Lsm303Axis * axis)
16 {
17  axis->x = _lsm303RawDataToI16(data);
18  axis->y = _lsm303RawDataToI16(data + 2);
19  axis->z = _lsm303RawDataToI16(data + 4);
20 }
21 
22 bool _lsm303RmwReg(I2C_Device * dev, uint8_t addr, uint8_t reg, uint8_t val, uint8_t mask)
23 {
24  uint8_t reg_val = 0;
25  if (!i2cReadReg(dev, addr, reg, &reg_val, 1)) return errRebase("LSM303");
26  reg_val = (reg_val & ~mask) | (val & mask);
27  if (!i2cWriteReg(dev, addr, reg, &reg_val, 1)) return errRebase("LSM303");
28  return true;
29 }
Axis structure for 3D information.
Definition: lsm303.h:31
bool _lsm303RmwReg(I2C_Device *dev, uint8_t addr, uint8_t reg, uint8_t val, uint8_t mask)
Internal function shared for both LSM303 drivers.
Definition: lsm303.c:22
static uint16_t _lsm303RawDataToI16(uint8_t *data)
Function shared for both LSM303 drivers.
Definition: lsm303.h:41
void _lsm303RawDataToAxis(uint8_t *data, Lsm303Axis *axis)
Internal function shared for both LSM303 drivers.
Definition: lsm303.c:15
Structure defines OpenCores I2C Device.
Definition: dev_i2c.h:55
bool i2cReadReg(I2C_Device *dev, i2cAddr addr, uint8_t regNo, uint8_t *rd, int rdLen)
Reads from the I2C device register.
Definition: i2c.c:188
bool i2cWriteReg(I2C_Device *dev, i2cAddr addr, uint8_t regNo, uint8_t *wr, int wrLen)
Writes to the I2C device register.
Definition: i2c.c:247
static bool errRebase(const char *name)
Rebases the cause of the error message.
Definition: err.h:104