@@ -56,7 +56,13 @@ extern ARM_DRIVER_I2C I2CDev_Driver;
56
56
#define i2c_receive_nack (dev_addr , data , len ) _i2c_receive(dev_addr, data, len, false)
57
57
58
58
59
-
59
+ /** Read several byte from an 8-bit device register.
60
+ * @param dev_addr I2C slave device address
61
+ * @param reg_addr Register regAddr to read from
62
+ * @param len How many bytes to read
63
+ * @param data Buffer to save data into
64
+ * @return Status of read operation (0 = success, <0 = error)
65
+ */
60
66
int8_t I2Cdev_readBytes (uint8_t dev_addr , uint8_t reg_addr , uint8_t len , uint8_t * data ) {
61
67
int8_t err = 0 ;
62
68
uint8_t reg_data [1 ] = {reg_addr };
@@ -73,17 +79,26 @@ int8_t I2Cdev_readBytes(uint8_t dev_addr, uint8_t reg_addr, uint8_t len, uint8_t
73
79
}
74
80
75
81
82
+ /** Read a single byte from a 8-bit device register.
83
+ * @param dev_addr I2C slave device address
84
+ * @param reg_addr Register reg_addr to read from
85
+ * @param data Buffer to save data into
86
+ * @return Status of read operation (0 = success, <0 = error)
87
+ */
76
88
int8_t I2Cdev_readByte (uint8_t dev_addr , uint8_t reg_addr , uint8_t * data ) {
77
- int8_t err ;
78
-
79
- err = I2Cdev_readBytes (dev_addr , reg_addr , 1 , data );
80
- return err ;
89
+ return I2Cdev_readBytes (dev_addr , reg_addr , 1 , data );
81
90
}
82
91
83
92
93
+ /** Read a several 16-bit words from a 16-bit device register.
94
+ * @param dev_addr I2C slave device address
95
+ * @param reg_addr Register reg_addr to read from
96
+ * @param len Number of words to read
97
+ * @param data Buffer to save data into
98
+ * @return Status of read operation (true = success)
99
+ */
84
100
int8_t I2Cdev_readWords (uint8_t dev_addr , uint8_t reg_addr , uint8_t len , uint16_t * data ) {
85
101
int8_t err ;
86
-
87
102
uint16_t bytes_num = len * 2 ;
88
103
89
104
uint8_t reg_info [1 ] = {reg_addr };
@@ -109,17 +124,25 @@ int8_t I2Cdev_readWords(uint8_t dev_addr, uint8_t reg_addr, uint8_t len, uint16
109
124
}
110
125
111
126
127
+ /** Read a single word from a 16-bit device register.
128
+ * @param dev_addr I2C slave device address
129
+ * @param reg_addr Register regAddr to read from
130
+ * @param data Container for single word
131
+ * @return Status of read operation (0 = success, <0 = error)
132
+ */
112
133
int8_t I2Cdev_readWord (uint8_t dev_addr , uint8_t reg_addr , uint16_t * data ) {
113
- int8_t err ;
114
-
115
- err = I2Cdev_readWords (dev_addr , reg_addr , 1 , data );
116
- return err ;
134
+ return I2Cdev_readWords (dev_addr , reg_addr , 1 , data );
117
135
}
118
136
119
137
120
- int8_t
121
- I2Cdev_readBit (uint8_t dev_addr , uint8_t reg_addr , uint8_t bitn , uint8_t * data )
122
- {
138
+ /** Read a single bit from a 8-bit device register.
139
+ * @param dev_addr I2C slave device address
140
+ * @param reg_addr Register regAddr to read from
141
+ * @param bitn Bit position to read (0-15)
142
+ * @param data Container for single bit value
143
+ * @return Status of read operation (0 = success, <0 = error)
144
+ */
145
+ int8_t I2Cdev_readBit (uint8_t dev_addr , uint8_t reg_addr , uint8_t bitn , uint8_t * data ) {
123
146
int8_t err ;
124
147
125
148
err = I2Cdev_readByte (dev_addr , reg_addr , data );
@@ -129,9 +152,16 @@ I2Cdev_readBit(uint8_t dev_addr, uint8_t reg_addr, uint8_t bitn, uint8_t *data)
129
152
}
130
153
131
154
132
- int8_t
133
- I2Cdev_readBits (uint8_t dev_addr , uint8_t reg_addr , uint8_t start_bit ,
134
- uint8_t len , uint8_t * data )
155
+ /** Read several bits from a 8-bit device register.
156
+ * @param dev_addr I2C slave device address
157
+ * @param reg_addr Register regAddr to read from
158
+ * @param start_bit First bit position to read (0-7)
159
+ * @param len Number of bits to read (<= 8)
160
+ * @param data Container for right-aligned value
161
+ * @return Status of read operation (0 = success, <0 = error)
162
+ */
163
+ int8_t I2Cdev_readBits (uint8_t dev_addr , uint8_t reg_addr , uint8_t start_bit ,
164
+ uint8_t len , uint8_t * data )
135
165
{
136
166
int8_t err ;
137
167
@@ -147,6 +177,13 @@ I2Cdev_readBits(uint8_t dev_addr, uint8_t reg_addr, uint8_t start_bit,
147
177
}
148
178
149
179
180
+ /** Read a single bit from a 16-bit device register.
181
+ * @param dev_addr I2C slave device address
182
+ * @param reg_addr Register regAddr to read from
183
+ * @param bit_n Bit position to read (0-15)
184
+ * @param data Container for single bit value
185
+ * @return Status of read operation (true = success)
186
+ */
150
187
int8_t I2Cdev_readBitW (uint8_t dev_addr , uint8_t reg_addr , uint8_t bit_n , uint16_t * data ) {
151
188
int8_t err ;
152
189
9E81
@@ -157,8 +194,15 @@ int8_t I2Cdev_readBitW(uint8_t dev_addr, uint8_t reg_addr, uint8_t bit_n, uint1
157
194
}
158
195
159
196
160
- int8_t
161
- I2Cdev_readBitsW (uint8_t dev_addr , uint8_t reg_addr , uint8_t start_bit ,
197
+ /** Read several bits from a 16-bit device register.
198
+ * @param dev_addr I2C slave device address
199
+ * @param reg_addr Register regAddr to read from
200
+ * @param start_bit First bit position to read (0-15)
201
+ * @param len Number of bits to read (<= 16)
202
+ * @param data Container for right-aligned value
203
+ * @return Status of read operation (0 = success, <0 = error)
204
+ */
205
+ int8_t I2Cdev_readBitsW (uint8_t dev_addr , uint8_t reg_addr , uint8_t start_bit ,
162
206
uint8_t len , uint16_t * data )
163
207
{
164
208
int8_t err ;
@@ -175,6 +219,13 @@ I2Cdev_readBitsW(uint8_t dev_addr, uint8_t reg_addr, uint8_t start_bit,
175
219
}
176
220
177
221
222
+ /** Write multiple bytes to an 8-bit device register.
223
+ * @param dev_addr I2C slave device address
224
+ * @param reg_addr First register address to write to
225
+ * @param len Number of bytes to write
226
+ * @param data Buffer to copy new data from
227
+ * @return Status of operation (0 = success, <0 = error)
228
+ */
178
229
int8_t I2Cdev_writeBytes (uint8_t dev_addr , uint8_t reg_addr , uint8_t len , uint8_t * data ) {
179
230
int8_t err ;
180
231
uint8_t ts_data [len + 1 ];
@@ -183,11 +234,16 @@ int8_t I2Cdev_writeBytes(uint8_t dev_addr, uint8_t reg_addr, uint8_t len, uint8
183
234
memcpy (ts_data + 1 , data , len );
184
235
185
236
err = i2c_transmit_nack (dev_addr , ts_data , len + 1 );
186
-
187
237
return err ;
188
238
}
189
239
190
240
241
+ /** Write single byte to an 8-bit device register.
242
+ * @param dev_addr I2C slave device address
243
+ * @param reg_addr Register address to write to
244
+ * @param data New byte value to write
245
+ * @return Status of operation (0 = success, <0 = error)
246
+ */
191
247
int8_t I2Cdev_writeByte (uint8_t dev_addr , uint8_t reg_addr , uint8_t data ) {
192
248
int8_t err ;
193
249
@@ -198,6 +254,12 @@ int8_t I2Cdev_writeByte(uint8_t dev_addr, uint8_t reg_addr, uint8_t data) {
198
254
}
199
255
200
256
257
+ /** Write single 16-bit word to an 16-bit device register.
258
+ * @param dev_addr I2C slave device address
259
+ * @param reg_addr Register address to write to
260
+ * @param data New byte value to write
261
+ * @return Status of operation (0 = success, <0 = error)
262
+ */
201
263
int8_t I2Cdev_writeWord (uint8_t dev_addr , uint8_t reg_addr , uint16_t data ) {
202
264
int8_t err ;
203
265
uint8_t ts_data [3 ] = {reg_addr , (data >> 8 ) & 0xFF , data & 0xFF };
@@ -207,6 +269,13 @@ int8_t I2Cdev_writeWord(uint8_t dev_addr, uint8_t reg_addr, uint16_t data) {
207
269
}
208
270
209
271
272
+ /** Write multiple words to a 16-bit device register.
273
+ * @param dev_addr I2C slave device address
274
+ * @param reg_addr First register address to write to
275
+ * @param len Number of words to write
276
+ * @param data Buffer to copy new data from
277
+ * @return Status of operation (0 = success, <0 = error)
278
+ */
210
279
int8_t I2Cdev_writeWords (uint8_t dev_addr , uint8_t reg_addr , uint8_t len , uint16_t * data ) {
211
280
uint16_t bytes_num = len * 2 + 1 ;
212
281
uint8_t bytes [bytes_num ];
@@ -225,6 +294,13 @@ int8_t I2Cdev_writeWords(uint8_t dev_addr, uint8_t reg_addr, uint8_t len, uint1
225
294
}
226
295
227
296
297
+ /** write a single bit in an 8-bit device register.
298
+ * @param dev_addr I2C slave device address
299
+ * @param reg_addr Register regAddr to write to
300
+ * @param bit_n Bit position to write (0-7)
301
+ * @param data New bit value to write
302
+ * @return Status of operation (0 = success, <0 = error)
303
+ */
228
304
int8_t I2Cdev_writeBit (uint8_t dev_addr , uint8_t reg_addr , uint8_t bit_n , uint8_t data ) {
229
305
uint8_t b ;
230
306
int8_t err ;
@@ -240,6 +316,13 @@ int8_t I2Cdev_writeBit(uint8_t dev_addr, uint8_t reg_addr, uint8_t bit_n, uint8
240
316
}
241
317
242
318
319
+ /** write a single bit in a 16-bit device register.
320
+ * @param dev_addr I2C slave device address
321
+ * @param reg_addr Register regAddr to write to
322
+ * @param bit_n Bit position to write (0-15)
323
+ * @param data New bit value to write
324
+ * @return Status of operation (0 = success, <0 = error)
325
+ */
243
326
int8_t I2Cdev_writeBitW (uint8_t dev_addr , uint8_t reg_addr , uint8_t bit_n , uint16_t data ) {
244
327
uint16_t w ;
245
328
I2Cdev_readWord (dev_addr , reg_addr , & w );
@@ -250,8 +333,15 @@ int8_t I2Cdev_writeBitW(uint8_t dev_addr, uint8_t reg_addr, uint8_t bit_n, uint
250
333
}
251
334
252
335
253
- int8_t
254
- I2Cdev_writeBits (uint8_t dev_addr , uint8_t reg_addr , uint8_t start_bit ,
336
+ /** Write multiple bits in an 8-bit device register.
337
+ * @param dev_addr I2C slave device address
338
+ * @param reg_addr Register regAddr to write to
339
+ * @param start_bit First bit position to write (0-7)
340
+ * @param len Number of bits to write (not more than 8)
341
+ * @param data Right-aligned value to write
342
+ * @return Status of operation (0 = success, <0 = error)
343
+ */
344
+ int8_t I2Cdev_writeBits (uint8_t dev_addr , uint8_t reg_addr , uint8_t start_bit ,
255
345
uint8_t len , uint8_t data )
256
346
{
257
347
uint8_t b ;
@@ -272,8 +362,15 @@ I2Cdev_writeBits(uint8_t dev_addr, uint8_t reg_addr, uint8_t start_bit,
272
362
}
273
363
274
364
275
- int8_t
276
- I2Cdev_writeBitsW (uint8_t dev_addr , uint8_t reg_addr , uint8_t start_bit ,
365
+ /** Write multiple bits in a 16-bit device register.
366
+ * @param dev_addr I2C slave device address
367
+ * @param reg_addr Register regAddr to write to
368
+ * @param start_bit First bit position to write (0-15)
369
+ * @param len Number of bits to write (not more than 16)
370
+ * @param data Right-aligned value to write
371
+ * @return Status of operation (0 = success, <0 = error)
372
+ */
373
+ int8_t I2Cdev_writeBitsW (uint8_t dev_addr , uint8_t reg_addr , uint8_t start_bit ,
277
374
uint8_t len , uint16_t data )
278
375
{
279
376
uint16_t w ;
0 commit comments