Skip to content

Commit b68ee42

Browse files
authored
Merge branch 'master' into scan-response-fix
2 parents 5919d11 + 9e7b13e commit b68ee42

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1769
-228
lines changed

boards.txt

Lines changed: 375 additions & 69 deletions
Large diffs are not rendered by default.

cores/esp32/Arduino.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
#define interrupts() sei()
7979
#define noInterrupts() cli()
8080

81-
#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
81+
#define clockCyclesPerMicrosecond() ( (long int)getCpuFrequencyMhz() )
8282
#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )
8383
#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() )
8484

cores/esp32/Esp.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,33 @@ uint8_t EspClass::getChipRevision(void)
218218
return chip_info.revision;
219219
}
220220

221+
const char * EspClass::getChipModel(void)
222+
{
223+
uint32_t chip_ver = REG_GET_FIELD(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_VER_PKG);
224+
uint32_t pkg_ver = chip_ver & 0x7;
225+
switch (pkg_ver) {
226+
case EFUSE_RD_CHIP_VER_PKG_ESP32D0WDQ6 :
227+
return "ESP32-D0WDQ6";
228+
case EFUSE_RD_CHIP_VER_PKG_ESP32D0WDQ5 :
229+
return "ESP32-D0WDQ5";
230+
case EFUSE_RD_CHIP_VER_PKG_ESP32D2WDQ5 :
231+
return "ESP32-D2WDQ5";
232+
case EFUSE_RD_CHIP_VER_PKG_ESP32PICOD2 :
233+
return "ESP32-PICO-D2";
234+
case EFUSE_RD_CHIP_VER_PKG_ESP32PICOD4 :
235+
return "ESP32-PICO-D4";
236+
default:
237+
return "Unknown";
238+
}
239+
}
240+
241+
uint8_t EspClass::getChipCores(void)
242+
{
243+
esp_chip_info_t chip_info;
244+
esp_chip_info(&chip_info);
245+
return chip_info.cores;
246+
}
247+
221248
const char * EspClass::getSdkVersion(void)
222249
{
223250
return esp_get_idf_version();
@@ -309,6 +336,20 @@ bool EspClass::flashRead(uint32_t offset, uint32_t *data, size_t size)
309336
return spi_flash_read(offset, (uint32_t*) data, size) == ESP_OK;
310337
}
311338

339+
bool EspClass::partitionEraseRange(const esp_partition_t *partition, uint32_t offset, size_t size)
340+
{
341+
return esp_partition_erase_range(partition, offset, size) == ESP_OK;
342+
}
343+
344+
bool EspClass::partitionWrite(const esp_partition_t *partition, uint32_t offset, uint32_t *data, size_t size)
345+
{
346+
return esp_partition_write(partition, offset, data, size) == ESP_OK;
347+
}
348+
349+
bool EspClass::partitionRead(const esp_partition_t *partition, uint32_t offset, uint32_t *data, size_t size)
350+
{
351+
return esp_partition_read(partition, offset, data, size) == ESP_OK;
352+
}
312353

313354
uint64_t EspClass::getEfuseMac(void)
314355
{

cores/esp32/Esp.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#define ESP_H
2222

2323
#include <Arduino.h>
24+
#include <esp_partition.h>
2425

2526
/**
2627
* AVR macros for WDT managment
@@ -75,6 +76,8 @@ class EspClass
7576
uint32_t getMaxAllocPsram();
7677

7778
uint8_t getChipRevision();
79+
const char * getChipModel();
80+
uint8_t getChipCores();
7881
uint32_t getCpuFreqMHz(){ return getCpuFrequencyMhz(); }
7982
inline uint32_t getCycleCount() __attribute__((always_inline));
8083
const char * getSdkVersion();
@@ -97,6 +100,10 @@ class EspClass
97100
bool flashWrite(uint32_t offset, uint32_t *data, size_t size);
98101
bool flashRead(uint32_t offset, uint32_t *data, size_t size);
99102

103+
bool partitionEraseRange(const esp_partition_t *partition, uint32_t offset, size_t size);
104+
bool partitionWrite(const esp_partition_t *partition, uint32_t offset, uint32_t *data, size_t size);
105+
bool partitionRead(const esp_partition_t *partition, uint32_t offset, uint32_t *data, size_t size);
106+
100107
uint64_t getEfuseMac();
101108

102109
};

cores/esp32/HardwareSerial.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in
5353
}
5454

5555
_uart = uartBegin(_uart_nr, baud ? baud : 9600, config, rxPin, txPin, 256, invert);
56+
_tx_pin = txPin;
57+
_rx_pin = rxPin;
5658

5759
if(!baud) {
5860
uartStartDetectBaudrate(_uart);
@@ -70,6 +72,8 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in
7072
} else {
7173
log_e("Could not detect baudrate. Serial data at the port must be present within the timeout for detection to be possible");
7274
_uart = NULL;
75+
_tx_pin = 255;
76+
_rx_pin = 255;
7377
}
7478
}
7579
}
@@ -84,7 +88,8 @@ void HardwareSerial::end()
8488
if(uartGetDebug() == _uart_nr) {
8589
uartSetDebug(0);
8690
}
87-
uartEnd(_uart);
91+
log_v("pins %d %d",_tx_pin, _rx_pin);
92+
uartEnd(_uart, _tx_pin, _rx_pin);
8893
_uart = 0;
8994
}
9095

@@ -179,3 +184,8 @@ HardwareSerial::operator bool() const
179184
{
180185
return true;
181186
}
187+
188+
void HardwareSerial::setRxInvert(bool invert)
189+
{
190+
uartSetRxInvert(_uart, invert);
191+
}

cores/esp32/HardwareSerial.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,14 @@ class HardwareSerial: public Stream
100100

101101
size_t setRxBufferSize(size_t);
102102
void setDebugOutput(bool);
103+
104+
void setRxInvert(bool);
103105

104106
protected:
105107
int _uart_nr;
106108
uart_t* _uart;
109+
uint8_t _tx_pin;
110+
uint8_t _rx_pin;
107111
};
108112

109113
extern void serialEventRun(void) __attribute__((weak));

cores/esp32/Print.cpp

Lines changed: 62 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -110,24 +110,37 @@ size_t Print::print(unsigned int n, int base)
110110
}
111111

112112
size_t Print::print(long n, int base)
113+
{
114+
int t = 0;
115+
if (base == 10 && n < 0) {
116+
t = print('-');
117+
n = -n;
118+
}
119+
return printNumber(static_cast<unsigned long>(n), base) + t;
120+
}
121+
122+
size_t Print::print(unsigned long n, int base)
113123
{
114124
if(base == 0) {
115125
return write(n);
116-
} else if(base == 10) {
117-
if(n < 0) {
118-
int t = print('-');
119-
n = -n;
120-
return printNumber(n, 10) + t;
121-
}
122-
return printNumber(n, 10);
123126
} else {
124127
return printNumber(n, base);
125128
}
126129
}
127130

128-
size_t Print::print(unsigned long n, int base)
131+
size_t Print::print(long long n, int base)
129132
{
130-
if(base == 0) {
133+
int t = 0;
134+
if (base == 10 && n < 0) {
135+
t = print('-');
136+
n = -n;
137+
}
138+
return printNumber(static_cast<unsigned long long>(n), base) + t;
139+
}
140+
141+
size_t Print::print(unsigned long long n, int base)
142+
{
143+
if (base == 0) {
131144
return write(n);
132145
} else {
133146
return printNumber(n, base);
@@ -226,6 +239,20 @@ size_t Print::println(unsigned long num, int base)
226239
return n;
227240
}
228241

242+
size_t Print::println(long long num, int base)
243+
{
244+
size_t n = print(num, base);
245+
n += println();
246+
return n;
247+
}
248+
249+
size_t Print::println(unsigned long long num, int base)
250+
{
251+
size_t n = print(num, base);
252+
n += println();
253+
return n;
254+
}
255+
229256
size_t Print::println(double num, int digits)
230257
{
231258
size_t n = print(num, digits);
@@ -251,7 +278,7 @@ size_t Print::println(struct tm * timeinfo, const char * format)
251278

252279
size_t Print::printNumber(unsigned long n, uint8_t base)
253280
{
254-
char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
281+
char buf[8 * sizeof(n) + 1]; // Assumes 8-bit chars plus zero byte.
255282
char *str = &buf[sizeof(buf) - 1];
256283

257284
*str = '\0';
@@ -262,11 +289,34 @@ size_t Print::printNumber(unsigned long n, uint8_t base)
262289
}
263290

264291
do {
265-
unsigned long m = n;
292+
char c = n % base;
293+
n /= base;
294+
295+
*--str = c < 10 ? c + '0' : c + 'A' - 10;
296+
} while (n);
297+
298+
return write(str);
299+
}
300+
301+
size_t Print::printNumber(unsigned long long n, uint8_t base)
302+
{
303+
char buf[8 * sizeof(n) + 1]; // Assumes 8-bit chars plus zero byte.
304+
char* str = &buf[sizeof(buf) - 1];
305+
306+
*str = '\0';
307+
308+
// prevent crash if called with base == 1
309+
if (base < 2) {
310+
base = 10;
311+
}
312+
313+
do {
314+
auto m = n;
266315
n /= base;
267316
char c = m - base * n;
317+
268318
*--str = c < 10 ? c + '0' : c + 'A' - 10;
269-
} while(n);
319+
} while (n);
270320

271321
return write(str);
272322
}

cores/esp32/Print.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Print
3636
private:
3737
int write_error;
3838
size_t printNumber(unsigned long, uint8_t);
39+
size_t printNumber(unsigned long long, uint8_t);
3940
size_t printFloat(double, uint8_t);
4041
protected:
4142
void setWriteError(int err = 1)
@@ -81,6 +82,8 @@ class Print
8182
size_t print(unsigned int, int = DEC);
8283
size_t print(long, int = DEC);
8384
size_t print(unsigned long, int = DEC);
85+
size_t print(long long, int = DEC);
86+
size_t print(unsigned long long, int = DEC);
8487
size_t print(double, int = 2);
8588
size_t print(const Printable&);
8689
size_t print(struct tm * timeinfo, const char * format = NULL);
@@ -94,6 +97,8 @@ class Print
9497
size_t println(unsigned int, int = DEC);
9598
size_t println(long, int = DEC);
9699
size_t println(unsigned long, int = DEC);
100+
size_t println(long long, int = DEC);
101+
size_t println(unsigned long long, int = DEC);
97102
size_t println(double, int = 2);
98103
size_t println(const Printable&);
99104
size_t println(struct tm * timeinfo, const char * format = NULL);

cores/esp32/WMath.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ long random(long howsmall, long howbig)
6666
}
6767

6868
long map(long x, long in_min, long in_max, long out_min, long out_max) {
69-
long divisor = (in_max - in_min);
70-
if(divisor == 0){
71-
return -1; //AVR returns -1, SAM returns 0
72-
}
73-
return (x - in_min) * (out_max - out_min) / divisor + out_min;
69+
const long dividend = out_max - out_min;
70+
const long divisor = in_max - in_min;
71+
const long delta = x - in_min;
72+
73+
return (delta * dividend + (divisor / 2)) / divisor + out_min;
7474
}
7575

7676
unsigned int makeWord(unsigned int w)

cores/esp32/esp32-hal-i2c.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,14 @@ static void IRAM_ATTR i2c_isr_handler_default(void* arg)
945945
activeInt &=~I2C_RXFIFO_FULL_INT_ST;
946946
}
947947

948+
if(activeInt & I2C_RXFIFO_OVF_INT_ST) {
949+
emptyRxFifo(p_i2c);
950+
p_i2c->dev->int_clr.rx_fifo_full=1;
951+
p_i2c->dev->int_ena.rx_fifo_full=1; //why?
952+
953+
activeInt &=~I2C_RXFIFO_OVF_INT_ST;
954+
}
955+
948956
if (activeInt & I2C_ACK_ERR_INT_ST_M) {//fatal error, abort i2c service
949957
if (p_i2c->mode == I2C_MASTER) {
950958
i2c_update_error_byte_cnt(p_i2c); // calc which byte caused ack Error, check if address or data

cores/esp32/esp32-hal-spi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ extern "C" {
5454
struct spi_struct_t;
5555
typedef struct spi_struct_t spi_t;
5656

57-
spi_t * spiStartBus(uint8_t spi_num, uint32_t freq, uint8_t dataMode, uint8_t bitOrder);
57+
spi_t * spiStartBus(uint8_t spi_num, uint32_t clockDiv, uint8_t dataMode, uint8_t bitOrder);
5858
void spiStopBus(spi_t * spi);
5959

6060
//Attach/Detach Signal Pins

0 commit comments

Comments
 (0)