Lamp-Da 0.1
A compact lantern project
Loading...
Searching...
No Matches
i2c.h
Go to the documentation of this file.
1
5// do not use pragma once here, has this can be mocked
6#ifndef PLATFORM_I2C
7#define PLATFORM_I2C
8
9#include <stdint.h>
10
11#ifdef __cplusplus
12namespace lampda {
13namespace platform {
14namespace i2c {
15
16extern "C" {
17#endif
18
19 static const uint8_t pdNegociationI2cAddress = 0x22;
20 static const uint8_t chargeI2cAddress = 0x6B;
21 static const uint8_t imuI2cAddress = 0x6A;
22 static const uint8_t batteryBalancerI2cAddress = 0x08;
23
24/* Flags for i2c_xfer() */
25#define I2C_XFER_START (1 << 0) /* Start smbus session from idle state */
26#define I2C_XFER_STOP (1 << 1) /* Terminate smbus session with stop bit */
27#define I2C_XFER_SINGLE (I2C_XFER_START | I2C_XFER_STOP) /* One transaction */
28
42 extern void i2c_setup(uint8_t i2cIndex, uint32_t baudrate, uint32_t timeout);
43
49 extern void i2c_turn_off(uint8_t i2cIndex);
50
54 extern int i2c_check_existence(uint8_t i2cIndex, uint8_t deviceAddr);
55
56 int lock_i2c();
57 int unlock_i2c();
58
68 extern int i2c_writeData(
69 uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint8_t size, const uint8_t* buf, int stopBit);
70
80 extern int i2c_readData(
81 uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint8_t size, uint8_t* buf, int stopBit);
82
93 extern int i2c_xfer_unlocked(uint8_t i2cIndex,
94 uint8_t deviceAddr,
95 int out_size,
96 const uint8_t* out,
97 int in_size,
98 uint8_t* in,
99 uint8_t flags);
100
111 inline int i2c_xfer(uint8_t i2cIndex,
112 uint8_t deviceAddr,
113 int out_size,
114 const uint8_t* out,
115 int in_size,
116 uint8_t* in,
117 uint8_t flags)
118 {
119 lock_i2c();
120 const int res = i2c_xfer_unlocked(i2cIndex, deviceAddr, out_size, out, in_size, in, flags);
121 unlock_i2c();
122 return res;
123 }
124
125 // define simple low weight handler
126
135 inline int i2c_read8(uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint8_t* val, int stopBit)
136 {
137 return i2c_readData(i2cIndex, deviceAddr, registerAdd, 1, val, stopBit);
138 }
139
148 inline int i2c_write8(uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint8_t val, int stopBit)
149 {
150 return i2c_writeData(i2cIndex, deviceAddr, registerAdd, 1, &val, stopBit);
151 }
152
161 inline int i2c_read16(uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint16_t* val, int stopBit)
162 {
163 return i2c_readData(i2cIndex, deviceAddr, registerAdd, 2, (uint8_t*)val, stopBit);
164 }
165
174 inline int i2c_write16(uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint16_t val, int stopBit)
175 {
176 uint8_t data[2];
177 data[0] = val & 0xFF;
178 data[1] = (val >> 8) & 0xFF;
179 return i2c_writeData(i2cIndex, deviceAddr, registerAdd, 2, data, stopBit);
180 }
181
182#ifdef __cplusplus
183}
184
185} // namespace: i2c
186} // namespace: platform
187} // namespace: lampda
188#endif
189
190#endif
int i2c_write16(uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint16_t val, int stopBit)
Write 16bits from the two wire interface.
Definition: i2c.h:174
int i2c_read16(uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint16_t *val, int stopBit)
Read 16bits from the two wire interface.
Definition: i2c.h:161
int i2c_read8(uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint8_t *val, int stopBit)
Read 8bits from the two wire interface.
Definition: i2c.h:135
int i2c_xfer(uint8_t i2cIndex, uint8_t deviceAddr, int out_size, const uint8_t *out, int in_size, uint8_t *in, uint8_t flags)
Does a range read/write.
Definition: i2c.h:111
int i2c_write8(uint8_t i2cIndex, uint8_t deviceAddr, uint8_t registerAdd, uint8_t val, int stopBit)
Write 8bits from the two wire interface.
Definition: i2c.h:148
Program scope.
Definition: control_fixed_modes.hpp:12