@@ -145,7 +145,7 @@ void common_hal_busio_i2c_deinit(busio_i2c_obj_t *self) {
145
145
}
146
146
147
147
bool common_hal_busio_i2c_probe (busio_i2c_obj_t * self , uint8_t addr ) {
148
- return common_hal_busio_i2c_write (self , addr , NULL , 0 , true ) == 0 ;
148
+ return common_hal_busio_i2c_write (self , addr , NULL , 0 ) == 0 ;
149
149
}
150
150
151
151
bool common_hal_busio_i2c_try_lock (busio_i2c_obj_t * self ) {
@@ -165,7 +165,7 @@ void common_hal_busio_i2c_unlock(busio_i2c_obj_t *self) {
165
165
self -> has_lock = false;
166
166
}
167
167
168
- uint8_t common_hal_busio_i2c_write (busio_i2c_obj_t * self , uint16_t addr ,
168
+ STATIC uint8_t _common_hal_busio_i2c_write (busio_i2c_obj_t * self , uint16_t addr ,
169
169
const uint8_t * data , size_t len , bool transmit_stop_bit ) {
170
170
if (len == 0 ) {
171
171
// The RP2040 I2C peripheral will not perform 0 byte writes.
@@ -203,6 +203,11 @@ uint8_t common_hal_busio_i2c_write(busio_i2c_obj_t *self, uint16_t addr,
203
203
}
204
204
}
205
205
206
+ uint8_t common_hal_busio_i2c_write (busio_i2c_obj_t * self , uint16_t addr ,
207
+ const uint8_t * data , size_t len ) {
208
+ return _common_hal_busio_i2c_write (self , addr , data , len , true);
209
+ }
210
+
206
211
uint8_t common_hal_busio_i2c_read (busio_i2c_obj_t * self , uint16_t addr ,
207
212
uint8_t * data , size_t len ) {
208
213
int result = i2c_read_timeout_us (self -> peripheral , addr , data , len , false, BUS_TIMEOUT_US );
@@ -219,6 +224,16 @@ uint8_t common_hal_busio_i2c_read(busio_i2c_obj_t *self, uint16_t addr,
219
224
}
220
225
}
221
226
227
+ uint8_t common_hal_busio_i2c_write_read (busio_i2c_obj_t * self , uint16_t addr ,
228
+ uint8_t * out_data , size_t out_len , uint8_t * in_data , size_t in_len ) {
229
+ uint8_t result = _common_hal_busio_i2c_write (self , addr , out_data , out_len , false);
230
+ if (result != 0 ) {
231
+ return result ;
232
+ }
233
+
234
+ return common_hal_busio_i2c_read (self , addr , in_data , in_len );
235
+ }
236
+
222
237
void common_hal_busio_i2c_never_reset (busio_i2c_obj_t * self ) {
223
238
never_reset_i2c [i2c_hw_index (self -> peripheral )] = true;
224
239
0 commit comments