41
41
42
42
#include "max1704x.h"
43
43
44
- #define I2C_FREQ_HZ 400000
44
+ #define I2C_MASTER_NUM 0 /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */
45
+ #define I2C_MASTER_FREQ_HZ 400000 /*!< I2C master clock frequency */
46
+ #define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
47
+ #define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
48
+ #define I2C_MASTER_TIMEOUT_MS 1000
45
49
46
50
/**
47
51
* MAX1704X registers
@@ -119,7 +123,6 @@ int16_t le16_to_cpu_signed(const uint8_t data[2])
119
123
memcpy (& r , & u , sizeof r );
120
124
return r ;
121
125
}
122
-
123
126
/**
124
127
* Public functions
125
128
*/
@@ -128,21 +131,40 @@ esp_err_t max1704x_init_desc(max1704x_t *dev, i2c_port_t port, gpio_num_t sda_gp
128
131
{
129
132
CHECK_ARG (dev );
130
133
131
- dev -> i2c_dev .port = port ;
132
- dev -> i2c_dev .addr = MAX1704X_I2C_ADDR ;
133
- dev -> i2c_dev .cfg .sda_io_num = sda_gpio ;
134
- dev -> i2c_dev .cfg .scl_io_num = scl_gpio ;
135
- #if HELPER_TARGET_IS_ESP32
136
- dev -> i2c_dev .cfg .master .clk_speed = I2C_FREQ_HZ ;
137
- #endif
138
- return i2c_dev_create_mutex (& dev -> i2c_dev );
134
+ /* Initialize and configure the software I2C bus */
135
+ int i2c_master_port = I2C_MASTER_NUM ;
136
+
137
+ i2c_config_t conf = {
138
+ .mode = I2C_MODE_MASTER ,
139
+ .sda_io_num = sda_gpio ,
140
+ .scl_io_num = scl_gpio ,
141
+ .sda_pullup_en = GPIO_PULLUP_ENABLE ,
142
+ .scl_pullup_en = GPIO_PULLUP_ENABLE ,
143
+ .master .clk_speed = I2C_MASTER_FREQ_HZ ,
144
+ };
145
+
146
+ i2c_param_config (i2c_master_port , & conf );
147
+ return i2c_driver_install (i2c_master_port , conf .mode , I2C_MASTER_RX_BUF_DISABLE , I2C_MASTER_TX_BUF_DISABLE , 0 );
148
+ }
149
+ /**
150
+ * @brief Read a sequence of bytes from a MPU9250 sensor registers
151
+ */
152
+ static esp_err_t max1704x_register_read (uint8_t reg_addr , uint8_t * data , size_t len )
153
+ {
154
+ return i2c_master_write_read_device (I2C_MASTER_NUM , MAX1704X_I2C_ADDR , & reg_addr , 1 , data , len , I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS );
139
155
}
140
156
141
- esp_err_t max1704x_free_desc (max1704x_t * dev )
157
+ /**
158
+ * @brief Write a byte to a MPU9250 sensor register
159
+ */
160
+ static esp_err_t max1704x_register_write_byte (uint8_t reg_addr , uint8_t data )
142
161
{
143
- CHECK_ARG (dev );
162
+ int ret ;
163
+ uint8_t write_buf [2 ] = {reg_addr , data };
164
+
165
+ ret = i2c_master_write_to_device (I2C_MASTER_NUM , MAX1704X_I2C_ADDR , write_buf , sizeof (write_buf ), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS );
144
166
145
- return i2c_dev_delete_mutex ( & dev -> i2c_dev ) ;
167
+ return ret ;
146
168
}
147
169
148
170
esp_err_t max1704x_quickstart (max1704x_t * dev )
@@ -151,9 +173,7 @@ esp_err_t max1704x_quickstart(max1704x_t *dev)
151
173
152
174
uint8_t data [2 ] = { 0x40 , 0x00 };
153
175
154
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
155
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_write_reg (& dev -> i2c_dev , MAX1704X_REGISTER_MODE , data , 2 ));
156
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
176
+ ESP_ERROR_CHECK ( max1704x_register_write_byte (MAX1704X_REGISTER_MODE , data ));
157
177
158
178
ESP_LOGD (TAG , "MAX1704X Quickstart" );
159
179
@@ -167,9 +187,7 @@ esp_err_t max1704x_get_voltage(max1704x_t *dev, float *voltage)
167
187
uint8_t data [2 ];
168
188
int value ;
169
189
170
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
171
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_read_reg (& dev -> i2c_dev , MAX1704X_REGISTER_VCELL , data , 2 ));
172
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
190
+ ESP_ERROR_CHECK ( max1704x_register_read (MAX1704X_REGISTER_VCELL , data , 2 ));
173
191
// ESP_LOG_BUFFER_HEXDUMP("voltage", data, 2, ESP_LOG_INFO);
174
192
175
193
if (dev -> model == MAX17043_4 ) {
@@ -187,9 +205,7 @@ esp_err_t max1704x_get_soc(max1704x_t *dev, float *soc)
187
205
188
206
uint8_t data [2 ];
189
207
190
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
191
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_read_reg (& dev -> i2c_dev , MAX1704X_REGISTER_SOC , data , 2 ));
192
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
208
+ ESP_ERROR_CHECK ( max1704x_register_read (MAX1704X_REGISTER_SOC , data , 2 ));
193
209
// ESP_LOG_BUFFER_HEXDUMP("soc", data, 2, ESP_LOG_INFO);
194
210
195
211
* soc = (float )data [0 ] + ((float )data [1 ]) / 256 ;
@@ -206,9 +222,7 @@ esp_err_t max1704x_get_crate(max1704x_t *dev, float *crate)
206
222
int16_t crate_value ;
207
223
uint8_t data [2 ];
208
224
209
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
210
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_read_reg (& dev -> i2c_dev , MAX1704X_REGISTER_CRATE , data , 2 ));
211
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
225
+ ESP_ERROR_CHECK ( max1704x_register_read (MAX1704X_REGISTER_CRATE , data , 2 ));
212
226
213
227
if (dev -> model == MAX17043_4 ) {
214
228
ESP_LOGE (TAG , "MAX1704X_REGISTER_CRATE is not supported by MAX17043" );
@@ -226,9 +240,7 @@ esp_err_t max1704x_get_version(max1704x_t *dev, uint16_t *version)
226
240
227
241
uint8_t data [2 ];
228
242
229
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
230
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_read_reg (& dev -> i2c_dev , MAX1704X_REGISTER_VERSION , data , 2 ));
231
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
243
+ ESP_ERROR_CHECK ( max1704x_register_read (MAX1704X_REGISTER_VERSION , data , 2 ));
232
244
233
245
* version = (data [0 ] << 8 ) | data [1 ];
234
246
return ESP_OK ;
@@ -240,9 +252,7 @@ esp_err_t max1704x_get_config(max1704x_t *dev)
240
252
241
253
uint8_t data [2 ];
242
254
243
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
244
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_read_reg (& dev -> i2c_dev , MAX1704X_REGISTER_CONFIG , data , 2 ));
245
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
255
+ ESP_ERROR_CHECK ( max1704x_register_read (MAX1704X_REGISTER_CONFIG , data , 2 ));
246
256
247
257
dev -> config .rcomp = data [0 ];
248
258
dev -> config .sleep_mode = (data [1 ] & MAX1704X_CONFIG_SLEEP_BIT ) ? true : false;
@@ -283,9 +293,7 @@ esp_err_t max1704x_set_config(max1704x_t *dev, max1704x_config_t *config)
283
293
dev -> config .empty_alert_thresh = 32 - config -> empty_alert_thresh ;
284
294
data [1 ] |= (32 - config -> empty_alert_thresh ) << MAX1704X_CONFIG_ATHD_SHIFT ;
285
295
286
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
287
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_write_reg (& dev -> i2c_dev , MAX1704X_REGISTER_CONFIG , data , 2 ));
288
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
296
+ ESP_ERROR_CHECK ( max1704x_register_write_byte (MAX1704X_REGISTER_CONFIG , data ));
289
297
290
298
return ESP_OK ;
291
299
}
@@ -301,9 +309,7 @@ esp_err_t max1704x_get_status(max1704x_t *dev)
301
309
return ESP_ERR_NOT_SUPPORTED ;
302
310
}
303
311
304
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
305
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_read_reg (& dev -> i2c_dev , MAX1704X_REGISTER_STATUS , data , 2 ));
306
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
312
+ ESP_ERROR_CHECK ( max1704x_register_read (MAX1704X_REGISTER_STATUS , data , 2 ));
307
313
308
314
dev -> status .reset_indicator = (data [0 ] & MAX1704X_STATUS_RI_BIT ) ? true : false;
309
315
dev -> status .voltage_high = (data [0 ] & MAX1704X_STATUS_VH_BIT ) ? true : false;
@@ -351,8 +357,6 @@ esp_err_t max1704x_set_status(max1704x_t *dev, max1704x_status_t *status)
351
357
}
352
358
data [1 ] = 0 ;
353
359
354
- I2C_DEV_TAKE_MUTEX (& dev -> i2c_dev );
355
- I2C_DEV_CHECK (& dev -> i2c_dev , i2c_dev_write_reg (& dev -> i2c_dev , MAX1704X_REGISTER_STATUS , data , 2 ));
356
- I2C_DEV_GIVE_MUTEX (& dev -> i2c_dev );
360
+ ESP_ERROR_CHECK ( max1704x_register_write_byte (MAX1704X_REGISTER_STATUS , data ));
357
361
return ESP_OK ;
358
- }
362
+ }
0 commit comments