17#define CTRL3_SW_RESET 0x01U
18#define RESET_POLLS 10U
34 return bus->xfer(bus->ctx, tx,
NULL, 2);
38 const uint8_t tx[2] = {(uint8_t)(
SPI_READ |
reg), 0};
40 int err = bus->xfer(bus->ctx, tx, rx, 2);
46 if (!bus || !bus->xfer || !bus->delay_ms) {
61 bus->delay_ms(bus->ctx, 1);
69 for (
size_t i = 0; i <
sizeof(
config) /
sizeof(
config[0]); ++i) {
92static int16_t
le16(
const uint8_t*
p) {
93 return (int16_t)(uint16_t)(
p[0] | (uint16_t)
p[1] << 8);
102 if (bus->xfer(bus->ctx, tx, rx,
sizeof(tx)) !=
DEV_OK) {
106 out->temp =
le16(&rx[1]);
107 for (
int i = 0; i < 3; ++i) {
108 out->gyro[i] =
le16(&rx[3 + 2 * i]);
109 out->accel[i] =
le16(&rx[9 + 2 * i]);
static int write_reg(const dev_bus_t *bus, uint8_t reg, uint8_t value)
int ism330_init(const dev_bus_t *bus)
int ism330_power_down(const dev_bus_t *bus)
static int16_t le16(const uint8_t *p)
int ism330_read(const dev_bus_t *bus, ism330_sample_t *out)
static int read_reg(const dev_bus_t *bus, uint8_t reg, uint8_t *value)
#define ISM330_WHO_AM_I_VALUE
static const idle_config_t config