Merge branch 'master' into ci/test_report · espressif/arduino-esp32@0b93cf4 (original) (raw)

`@@ -23,40 +23,52 @@

`

23

23

`#define ARDUINO_SERIAL_EVENT_TASK_RUNNING_CORE -1

`

24

24

`#endif

`

25

25

``

``

26

`+

#if (SOC_UART_LP_NUM >= 1)

`

``

27

`+

#define UART_HW_FIFO_LEN(uart_num) ((uart_num < SOC_UART_HP_NUM) ? SOC_UART_FIFO_LEN : SOC_LP_UART_FIFO_LEN)

`

``

28

`+

#else

`

``

29

`+

#define UART_HW_FIFO_LEN(uart_num) SOC_UART_FIFO_LEN

`

``

30

`+

#endif

`

``

31

+

26

32

`void serialEvent(void) attribute((weak));

`

27

33

``

28

``

`-

#if SOC_UART_HP_NUM > 1

`

``

34

`+

#if SOC_UART_NUM > 1

`

29

35

`void serialEvent1(void) attribute((weak));

`

30

``

`-

#endif /* SOC_UART_HP_NUM > 1 */

`

``

36

`+

#endif /* SOC_UART_NUM > 1 */

`

31

37

``

32

``

`-

#if SOC_UART_HP_NUM > 2

`

``

38

`+

#if SOC_UART_NUM > 2

`

33

39

`void serialEvent2(void) attribute((weak));

`

34

``

`-

#endif /* SOC_UART_HP_NUM > 2 */

`

``

40

`+

#endif /* SOC_UART_NUM > 2 */

`

35

41

``

36

``

`-

#if SOC_UART_HP_NUM > 3

`

``

42

`+

#if SOC_UART_NUM > 3

`

37

43

`void serialEvent3(void) attribute((weak));

`

38

``

`-

#endif /* SOC_UART_HP_NUM > 3 */

`

``

44

`+

#endif /* SOC_UART_NUM > 3 */

`

39

45

``

40

``

`-

#if SOC_UART_HP_NUM > 4

`

``

46

`+

#if SOC_UART_NUM > 4

`

41

47

`void serialEvent4(void) attribute((weak));

`

42

``

`-

#endif /* SOC_UART_HP_NUM > 4 */

`

``

48

`+

#endif /* SOC_UART_NUM > 4 */

`

``

49

+

``

50

`+

#if SOC_UART_NUM > 5

`

``

51

`+

void serialEvent5(void) attribute((weak));

`

``

52

`+

#endif /* SOC_UART_NUM > 5 */

`

43

53

``

44

54

`#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL)

`

45

55

`// There is always Seria0 for UART0

`

46

56

`HardwareSerial Serial0(0);

`

47

``

`-

#if SOC_UART_HP_NUM > 1

`

``

57

`+

#if SOC_UART_NUM > 1

`

48

58

`HardwareSerial Serial1(1);

`

49

59

`#endif

`

50

``

`-

#if SOC_UART_HP_NUM > 2

`

``

60

`+

#if SOC_UART_NUM > 2

`

51

61

`HardwareSerial Serial2(2);

`

52

62

`#endif

`

53

``

`-

#if SOC_UART_HP_NUM > 3

`

``

63

`+

#if SOC_UART_NUM > 3

`

54

64

`HardwareSerial Serial3(3);

`

55

65

`#endif

`

56

``

`-

#if SOC_UART_HP_NUM > 4

`

``

66

`+

#if SOC_UART_NUM > 4

`

57

67

`HardwareSerial Serial4(4);

`

58

68

`#endif

`

59

``

-

``

69

`+

#if (SOC_UART_NUM > 5)

`

``

70

`+

HardwareSerial Serial5(5);

`

``

71

`+

#endif

`

60

72

`#if HWCDC_SERIAL_IS_DEFINED == 1 // Hardware JTAG CDC Event

`

61

73

`extern void HWCDCSerialEvent(void) attribute((weak));

`

62

74

`#endif

`

`@@ -81,26 +93,31 @@ void serialEventRun(void) {

`

81

93

`if (serialEvent && Serial0.available()) {

`

82

94

`serialEvent();

`

83

95

` }

`

84

``

`-

#if SOC_UART_HP_NUM > 1

`

``

96

`+

#if SOC_UART_NUM > 1

`

85

97

`if (serialEvent1 && Serial1.available()) {

`

86

98

`serialEvent1();

`

87

99

` }

`

88

100

`#endif

`

89

``

`-

#if SOC_UART_HP_NUM > 2

`

``

101

`+

#if SOC_UART_NUM > 2

`

90

102

`if (serialEvent2 && Serial2.available()) {

`

91

103

`serialEvent2();

`

92

104

` }

`

93

105

`#endif

`

94

``

`-

#if SOC_UART_HP_NUM > 3

`

``

106

`+

#if SOC_UART_NUM > 3

`

95

107

`if (serialEvent3 && Serial3.available()) {

`

96

108

`serialEvent3();

`

97

109

` }

`

98

110

`#endif

`

99

``

`-

#if SOC_UART_HP_NUM > 4

`

``

111

`+

#if SOC_UART_NUM > 4

`

100

112

`if (serialEvent4 && Serial4.available()) {

`

101

113

`serialEvent4();

`

102

114

` }

`

103

115

`#endif

`

``

116

`+

#if SOC_UART_NUM > 5

`

``

117

`+

if (serialEvent5 && Serial5.available()) {

`

``

118

`+

serialEvent5();

`

``

119

`+

}

`

``

120

`+

#endif

`

104

121

`}

`

105

122

`#endif

`

106

123

``

`@@ -185,7 +202,8 @@ void HardwareSerial::onReceive(OnReceiveCb function, bool onlyOnTimeout) {

`

185

202

``

186

203

`// in case that onReceive() shall work only with RX Timeout, FIFO shall be high

`

187

204

`// this is a work around for an IDF issue with events and low FIFO Full value (< 3)

`

188

``

`-

if (_onReceiveTimeout) {

`

``

205

`+

// Not valid for the LP UART

`

``

206

`+

if (_onReceiveTimeout && _uart_nr < SOC_UART_HP_NUM) {

`

189

207

`uartSetRxFIFOFull(_uart, 120);

`

190

208

`log_w("OnReceive is set to Timeout only, thus FIFO Full is now 120 bytes.");

`

191

209

` }

`

`@@ -207,12 +225,13 @@ bool HardwareSerial::setRxFIFOFull(uint8_t fifoBytes) {

`

207

225

`HSERIAL_MUTEX_LOCK();

`

208

226

`// in case that onReceive() shall work only with RX Timeout, FIFO shall be high

`

209

227

`// this is a work around for an IDF issue with events and low FIFO Full value (< 3)

`

210

``

`-

if (_onReceiveCB != NULL && _onReceiveTimeout) {

`

``

228

`+

// Not valid for the LP UART

`

``

229

`+

if (_onReceiveCB != NULL && _onReceiveTimeout && _uart_nr < SOC_UART_HP_NUM) {

`

211

230

` fifoBytes = 120;

`

212

231

`log_w("OnReceive is set to Timeout only, thus FIFO Full is now 120 bytes.");

`

213

232

` }

`

214

233

`bool retCode = uartSetRxFIFOFull(_uart, fifoBytes); // Set new timeout

`

215

``

`-

if (fifoBytes > 0 && fifoBytes < SOC_UART_FIFO_LEN - 1) {

`

``

234

`+

if (fifoBytes > 0 && fifoBytes < UART_HW_FIFO_LEN(_uart_nr) - 1) {

`

216

235

` _rxFIFOFull = fifoBytes;

`

217

236

` }

`

218

237

`HSERIAL_MUTEX_UNLOCK();

`

`@@ -298,8 +317,8 @@ void HardwareSerial::_uartEventTask(void *args) {

`

298

317

`}

`

299

318

``

300

319

`void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert, unsigned long timeout_ms, uint8_t rxfifo_full_thrhd) {

`

301

``

`-

if (_uart_nr >= SOC_UART_HP_NUM) {

`

302

``

`-

log_e("Serial number is invalid, please use a number from 0 to %u", SOC_UART_HP_NUM - 1);

`

``

320

`+

if (_uart_nr >= SOC_UART_NUM) {

`

``

321

`+

log_e("Serial number is invalid, please use a number from 0 to %u", SOC_UART_NUM - 1);

`

303

322

`return;

`

304

323

` }

`

305

324

``

`@@ -333,16 +352,16 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in

`

333

352

` txPin = _txPin < 0 ? (int8_t)SOC_TX0 : _txPin;

`

334

353

` }

`

335

354

`break;

`

336

``

`-

#if SOC_UART_HP_NUM > 1 // may save some flash bytes...

`

``

355

`+

#if SOC_UART_HP_NUM > 1

`

337

356

`case UART_NUM_1:

`

338

357

`if (rxPin < 0 && txPin < 0) {

`

339

358

`// do not change RX1/TX1 if it has already been set before

`

340

359

` rxPin = _rxPin < 0 ? (int8_t)RX1 : _rxPin;

`

341

360

` txPin = _txPin < 0 ? (int8_t)TX1 : _txPin;

`

342

361

` }

`

343

362

`break;

`

344

``

`-

#endif

`

345

``

`-

#if SOC_UART_HP_NUM > 2 // may save some flash bytes...

`

``

363

`+

#endif // UART_NUM_1

`

``

364

`+

#if SOC_UART_HP_NUM > 2

`

346

365

`case UART_NUM_2:

`

347

366

`if (rxPin < 0 && txPin < 0) {

`

348

367

`// do not change RX2/TX2 if it has already been set before

`

`@@ -354,11 +373,11 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in

`

354

373

`#endif

`

355

374

` }

`

356

375

`break;

`

357

``

`-

#endif

`

358

``

`-

#if SOC_UART_HP_NUM > 3 // may save some flash bytes...

`

``

376

`+

#endif // UART_NUM_2

`

``

377

`+

#if SOC_UART_HP_NUM > 3

`

359

378

`case UART_NUM_3:

`

360

379

`if (rxPin < 0 && txPin < 0) {

`

361

``

`-

// do not change RX2/TX2 if it has already been set before

`

``

380

`+

// do not change RX3/TX3 if it has already been set before

`

362

381

`#ifdef RX3

`

363

382

` rxPin = _rxPin < 0 ? (int8_t)RX3 : _rxPin;

`

364

383

`#endif

`

`@@ -367,11 +386,11 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in

`

367

386

`#endif

`

368

387

` }

`

369

388

`break;

`

370

``

`-

#endif

`

371

``

`-

#if SOC_UART_HP_NUM > 4 // may save some flash bytes...

`

``

389

`+

#endif // UART_NUM_3

`

``

390

`+

#if SOC_UART_HP_NUM > 4

`

372

391

`case UART_NUM_4:

`

373

392

`if (rxPin < 0 && txPin < 0) {

`

374

``

`-

// do not change RX2/TX2 if it has already been set before

`

``

393

`+

// do not change RX4/TX4 if it has already been set before

`

375

394

`#ifdef RX4

`

376

395

` rxPin = _rxPin < 0 ? (int8_t)RX4 : _rxPin;

`

377

396

`#endif

`

`@@ -380,7 +399,20 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in

`

380

399

`#endif

`

381

400

` }

`

382

401

`break;

`

``

402

`+

#endif // UART_NUM_4

`

``

403

`+

#if (SOC_UART_LP_NUM >= 1)

`

``

404

`+

case LP_UART_NUM_0:

`

``

405

`+

if (rxPin < 0 && txPin < 0) {

`

``

406

`+

// do not change RX0_LP/TX0_LP if it has already been set before

`

``

407

`+

#ifdef LP_RX0

`

``

408

`+

rxPin = _rxPin < 0 ? (int8_t)LP_RX0 : _rxPin;

`

``

409

`+

#endif

`

``

410

`+

#ifdef LP_TX0

`

``

411

`+

txPin = _txPin < 0 ? (int8_t)LP_TX0 : _txPin;

`

383

412

`#endif

`

``

413

`+

}

`

``

414

`+

break;

`

``

415

`+

#endif // LP_UART_NUM_0

`

384

416

` }

`

385

417

` }

`

386

418

``

`@@ -445,7 +477,8 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in

`

445

477

`if (!_rxFIFOFull) { // it has not being changed before calling begin()

`

446

478

`// set a default FIFO Full value for the IDF driver

`

447

479

`uint8_t fifoFull = 1;

`

448

``

`-

if (baud > 57600 || (_onReceiveCB != NULL && _onReceiveTimeout)) {

`

``

480

`+

// if baud rate is higher than 57600 or onReceive() is set, it will set FIFO Full to 120 bytes, except for LP UART

`

``

481

`+

if (_uart_nr < SOC_UART_HP_NUM && (baud > 57600 || (_onReceiveCB != NULL && _onReceiveTimeout))) {

`

449

482

` fifoFull = 120;

`

450

483

` }

`

451

484

`uartSetRxFIFOFull(_uart, fifoFull);

`

`@@ -477,6 +510,12 @@ void HardwareSerial::setDebugOutput(bool en) {

`

477

510

`if (_uart == 0) {

`

478

511

`return;

`

479

512

` }

`

``

513

`+

#if (SOC_UART_LP_NUM >= 1)

`

``

514

`+

if (_uart_nr >= SOC_UART_HP_NUM) {

`

``

515

`+

log_e("LP UART does not support Debug Output.");

`

``

516

`+

return;

`

``

517

`+

}

`

``

518

`+

#endif

`

480

519

`if (en) {

`

481

520

`uartSetDebug(_uart);

`

482

521

` } else {

`

`@@ -581,34 +620,37 @@ bool HardwareSerial::setMode(SerialMode mode) {

`

581

620

`}

`

582

621

``

583

622

`// minimum total RX Buffer size is the UART FIFO space (128 bytes for most SoC) + 1. IDF imposition.

`

``

623

`+

// LP UART has FIFO of 16 bytes

`

584

624

`size_t HardwareSerial::setRxBufferSize(size_t new_size) {

`

585

625

``

586

626

`if (_uart) {

`

587

627

`log_e("RX Buffer can't be resized when Serial is already running. Set it before calling begin().");

`

588

628

`return 0;

`

589

629

` }

`

590

``

-

591

``

`-

if (new_size <= SOC_UART_FIFO_LEN) {

`

592

``

`-

log_w("RX Buffer set to minimum value: %d.", SOC_UART_FIFO_LEN + 1); // ESP32, S2, S3 and C3 means higher than 128

`

593

``

`-

new_size = SOC_UART_FIFO_LEN + 1;

`

``

630

`+

uint8_t FIFOLen = UART_HW_FIFO_LEN(_uart_nr);

`

``

631

`+

// Valid value is higher than the FIFO length

`

``

632

`+

if (new_size <= FIFOLen) {

`

``

633

`+

new_size = FIFOLen + 1;

`

``

634

`+

log_w("RX Buffer set to minimum value: %d.", new_size);

`

594

635

` }

`

595

636

``

596

637

` _rxBufferSize = new_size;

`

597

638

`return _rxBufferSize;

`

598

639

`}

`

599

640

``

600

``

`-

// minimum total TX Buffer size is the UART FIFO space (128 bytes for most SoC).

`

``

641

`+

// minimum total TX Buffer size is the UART FIFO space (128 bytes for most SoC) + 1.

`

``

642

`+

// LP UART has FIFO of 16 bytes

`

601

643

`size_t HardwareSerial::setTxBufferSize(size_t new_size) {

`

602

644

``

603

645

`if (_uart) {

`

604

646

`log_e("TX Buffer can't be resized when Serial is already running. Set it before calling begin().");

`

605

647

`return 0;

`

606

648

` }

`

607

``

-

608

``

`-

if (new_size <= SOC_UART_FIFO_LEN) {

`

609

``

`-

log_w("TX Buffer set to minimum value: %d.", SOC_UART_FIFO_LEN); // ESP32, S2, S3 and C3 means higher than 128

`

610

``

`-

_txBufferSize = 0; // it will use just UART FIFO with SOC_UART_FIFO_LEN bytes (128 for most SoC)

`

611

``

`-

return SOC_UART_FIFO_LEN;

`

``

649

`+

uint8_t FIFOLen = UART_HW_FIFO_LEN(_uart_nr);

`

``

650

`+

// Valid values are zero or higher than the FIFO length

`

``

651

`+

if (new_size > 0 && new_size <= FIFOLen) {

`

``

652

`+

new_size = FIFOLen + 1;

`

``

653

`+

log_w("TX Buffer set to minimum value: %d.", new_size);

`

612

654

` }

`

613

655

`// if new_size is higher than SOC_UART_FIFO_LEN, TX Ringbuffer will be active and it will be used to report back "availableToWrite()"

`

614

656

` _txBufferSize = new_size;

`