Skip to content

Commit e147627

Browse files
authored
Merge pull request #16 from junkfix/junkfix-patch-1
Possible compatiblity with ESP32C3
2 parents c8d7849 + 9036888 commit e147627

File tree

3 files changed

+15
-18
lines changed

3 files changed

+15
-18
lines changed

OneWireESP32.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#define OW_SLOT_RECOVERY 5
2222
#define OW_TIMEOUT 50
2323

24-
const size_t owbuflen = 64 * sizeof(rmt_symbol_word_t);
2524

2625
static rmt_symbol_word_t ow_bit0 = {
2726
.duration0 = OW_SLOT_START + OW_SLOT_BIT,
@@ -74,7 +73,7 @@ OneWire32::OneWire32(uint8_t pin){
7473
.gpio_num = owpin,
7574
.clk_src = RMT_CLK_SRC_APB,
7675
.resolution_hz = 1000000,
77-
.mem_block_symbols = 64
76+
.mem_block_symbols = MAX_BLOCKS
7877
};
7978

8079
if(rmt_new_rx_channel(&rxconf, &(owrx)) != ESP_OK) {
@@ -85,15 +84,15 @@ OneWire32::OneWire32(uint8_t pin){
8584
.gpio_num = owpin,
8685
.clk_src = RMT_CLK_SRC_APB,
8786
.resolution_hz = 1000000,
88-
.mem_block_symbols = 64,
87+
.mem_block_symbols = MAX_BLOCKS,
8988
.trans_queue_depth = 4,
9089
.flags = {
9190
.io_loop_back = 1,
9291
.io_od_mode = 1
9392
}
9493
};
9594

96-
if(rmt_new_tx_channel(&txconf, &(owtx)) != ESP_OK) {
95+
if(rmt_new_tx_channel(&txconf, &owtx) != ESP_OK) {
9796
return;
9897
}
9998

@@ -102,11 +101,6 @@ OneWire32::OneWire32(uint8_t pin){
102101
return;
103102
}
104103

105-
owbuf = (rmt_symbol_word_t *)malloc(owbuflen);
106-
if(owbuf == NULL) {
107-
return;
108-
}
109-
110104
rmt_rx_event_callbacks_t rx_callbacks = {
111105
.on_recv_done = owrxdone
112106
};
@@ -154,9 +148,6 @@ OneWire32::~OneWire32(){
154148
if(owqueue) {
155149
vQueueDelete(owqueue);
156150
}
157-
if(owbuf != NULL) {
158-
free(owbuf);
159-
}
160151
drv = 0;
161152
}
162153

@@ -178,7 +169,7 @@ bool OneWire32::reset(){
178169
};
179170

180171
rmt_rx_done_event_data_t evt;
181-
rmt_receive(owrx, owbuf, owbuflen, &owrxconf);
172+
rmt_receive(owrx, owbuf, sizeof(owbuf), &owrxconf);
182173
rmt_transmit(owtx, owcenc, &symbol_reset, sizeof(rmt_symbol_word_t), &owtxconf);
183174
bool found = false;
184175
if(xQueueReceive(owqueue, &evt, pdMS_TO_TICKS(OW_TIMEOUT)) == pdTRUE) {
@@ -209,7 +200,7 @@ bool OneWire32::reset(){
209200
bool OneWire32::read(uint8_t &data, uint8_t len){
210201

211202
rmt_rx_done_event_data_t evt;
212-
rmt_receive(owrx, owbuf, owbuflen, &owrxconf);
203+
rmt_receive(owrx, owbuf, sizeof(owbuf), &owrxconf);
213204

214205
if(!write((len > 1)? 0xff : 1, len) || xQueueReceive(owqueue, &evt, pdMS_TO_TICKS(OW_TIMEOUT)) != pdTRUE) {
215206
return false;
@@ -230,7 +221,6 @@ bool OneWire32::read(uint8_t &data, uint8_t len){
230221

231222

232223
bool OneWire32::write(const uint8_t data, uint8_t len){
233-
size_t ssz = sizeof(rmt_symbol_word_t);
234224

235225
if(len < 8){
236226
const rmt_symbol_word_t *sb;
@@ -239,7 +229,7 @@ bool OneWire32::write(const uint8_t data, uint8_t len){
239229
if((data & (1 << i)) != 0) {
240230
sb = &ow_bit1;
241231
}
242-
if(rmt_transmit(owtx, owcenc, sb, ssz, &owtxconf) != ESP_OK){
232+
if(rmt_transmit(owtx, owcenc, sb, sizeof(rmt_symbol_word_t), &owtxconf) != ESP_OK){
243233
return false;
244234
}
245235
}

OneWireESP32.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
#include "freertos/queue.h"
1111
#include "driver/rmt_tx.h"
1212
#include "driver/rmt_rx.h"
13+
#include "sdkconfig.h"
14+
15+
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2
16+
#define MAX_BLOCKS 64
17+
#else
18+
#define MAX_BLOCKS 48
19+
#endif
1320

1421
IRAM_ATTR bool owrxdone(rmt_channel_handle_t ch, const rmt_rx_done_event_data_t *edata, void *udata);
1522

@@ -20,7 +27,7 @@ class OneWire32 {
2027
rmt_channel_handle_t owrx;
2128
rmt_encoder_handle_t owcenc;
2229
rmt_encoder_handle_t owbenc;
23-
rmt_symbol_word_t *owbuf;
30+
rmt_symbol_word_t owbuf[MAX_BLOCKS];
2431
QueueHandle_t owqueue;
2532
uint8_t drv = 0;
2633
public:

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=esp32-ds18b20
2-
version=2.0.0
2+
version=2.0.1
33
author=junkfix
44
maintainer=junkfix
55
sentence=Minimal, non-blocking, DS18B20 sensor library for ESP32 using RMT pheripheral, supports multiple sensors, lightweight, no dependencies, will need Arduino esp32 3.x based on IDF 5.X

0 commit comments

Comments
 (0)