16
16
17
17
#include " ESP8266.h"
18
18
#include " Callback.h"
19
- #include " mbed_debug .h"
19
+ #include " mbed_error .h"
20
20
#include " nsapi_types.h"
21
21
#include " PinNames.h"
22
22
25
25
#define ESP8266_DEFAULT_BAUD_RATE 115200
26
26
#define ESP8266_ALL_SOCKET_IDS -1
27
27
28
- // Big enough, target specific
29
- #ifndef MBED_CONF_ESP8266_SOCKET_BUFSIZE
30
- #define MBED_CONF_ESP8266_SOCKET_BUFSIZE 102400
31
- #endif
32
-
33
28
ESP8266::ESP8266 (PinName tx, PinName rx, bool debug, PinName rts, PinName cts)
34
29
: _serial(tx, rx, ESP8266_DEFAULT_BAUD_RATE),
35
30
_serial_rts(rts),
@@ -83,33 +78,24 @@ int ESP8266::get_firmware_version()
83
78
bool ESP8266::start_uart_hw_flow_ctrl (void )
84
79
{
85
80
bool done = true ;
86
- static const int DATABITS_8 = 8 ; // 8-bit data
87
- static const int STOPBITS_1 = 1 ; // 1-bit stop bit
88
- static const int PARITY_NONE = 0 ; // None
89
- static const int FC_RTS = 1 ; // Flow Control RTS
90
- static const int FC_CTS = 2 ; // Flow Control CTS
91
- static const int FC_RTSCTS = 3 ; // Flow Control RTS&CTS
92
81
93
82
if (_serial_rts != NC && _serial_cts != NC) {
94
83
// Start board's flow control
95
84
_serial.set_flow_control (SerialBase::RTSCTS, _serial_rts, _serial_cts);
96
85
97
86
// Start ESP8266's flow control
98
- done = _parser.send (" AT+UART_CUR=%u,%u,%u,%u,%u " , ESP8266_DEFAULT_BAUD_RATE, DATABITS_8, STOPBITS_1,
99
- PARITY_NONE, FC_RTSCTS)
100
- && _parser. recv ( " OK \n " );
87
+ done = _parser.send (" AT+UART_CUR=%u,8,1,0,3 " , ESP8266_DEFAULT_BAUD_RATE)
88
+ && _parser. recv ( " OK \n " );
89
+
101
90
} else if (_serial_rts != NC) {
102
91
_serial.set_flow_control (SerialBase::RTS, _serial_rts, NC);
103
92
104
- // Start ESP8266's flow control
105
- done = _parser.send (" AT+UART_CUR=%u,%u,%u,%u,%u" , ESP8266_DEFAULT_BAUD_RATE, DATABITS_8, STOPBITS_1,
106
- PARITY_NONE, FC_CTS)
107
- && _parser.recv (" OK\n " );
93
+ done = _parser.send (" AT+UART_CUR=%u,8,1,0,2" , ESP8266_DEFAULT_BAUD_RATE)
94
+ && _parser.recv (" OK\n " );
95
+
108
96
} else if (_serial_cts != NC) {
109
- // Start ESP8266's flow control
110
- done = _parser.send (" AT+UART_CUR=%u,%u,%u,%u,%u" , ESP8266_DEFAULT_BAUD_RATE, DATABITS_8, STOPBITS_1,
111
- PARITY_NONE, FC_RTS)
112
- && _parser.recv (" OK\n " );
97
+ done = _parser.send (" AT+UART_CUR=%u,8,1,0,1" , ESP8266_DEFAULT_BAUD_RATE)
98
+ && _parser.recv (" OK\n " );
113
99
114
100
_serial.set_flow_control (SerialBase::CTS, NC, _serial_cts);
115
101
}
@@ -435,16 +421,16 @@ void ESP8266::_packet_handler()
435
421
436
422
pdu_len = sizeof (struct packet ) + amount;
437
423
438
- if ((_heap_usage + pdu_len) > _MAX_HEAP_USAGE ) {
439
- debug ( " ESP8266: socket buffer max memory limit exceeded, either increase socket buffer size from mbed_lib.json or enable UART HW flow control \n " );
440
- MBED_ASSERT ( false );
424
+ if ((_heap_usage + pdu_len) > MBED_CONF_ESP8266_SOCKET_BUFSIZE ) {
425
+ MBED_WARNING ( MBED_MAKE_ERROR (MBED_MODULE_DRIVER, MBED_ERROR_CODE_ENOBUFS), \
426
+ " ESP8266::_packet_handler(): \" esp8266.socket-bufsize \" -limit exceeded, packet dropped " );
441
427
return ;
442
428
}
443
429
444
430
struct packet *packet = (struct packet *)malloc (pdu_len);
445
431
if (!packet) {
446
- debug ( " ESP8266: could not allocate memory for RX data \n " );
447
- MBED_ASSERT (packet );
432
+ MBED_WARNING ( MBED_MAKE_ERROR (MBED_MODULE_DRIVER, MBED_ERROR_CODE_ENOMEM), \
433
+ " ESP8266::_packet_handler(): Could not allocate memory for RX data " );
448
434
return ;
449
435
}
450
436
_heap_usage += pdu_len;
@@ -457,7 +443,6 @@ void ESP8266::_packet_handler()
457
443
if (_parser.read ((char *)(packet + 1 ), amount) < amount) {
458
444
free (packet);
459
445
_heap_usage -= pdu_len;
460
- MBED_ASSERT (_heap_usage >= 0 );
461
446
return ;
462
447
}
463
448
@@ -498,11 +483,10 @@ int32_t ESP8266::recv_tcp(int id, void *data, uint32_t amount, uint32_t timeout)
498
483
499
484
_smutex.unlock ();
500
485
501
- uint32_t alloc_len = q->alloc_len ;
486
+ uint32_t pdu_len = sizeof ( struct packet ) + q->alloc_len ;
502
487
uint32_t len = q->len ;
503
488
free (q);
504
- _heap_usage -= sizeof (struct packet ) + alloc_len;
505
- MBED_ASSERT (_heap_usage >= 0 );
489
+ _heap_usage -= pdu_len;
506
490
return len;
507
491
} else { // return only partial packet
508
492
memcpy (data, q+1 , amount);
@@ -555,11 +539,9 @@ int32_t ESP8266::recv_udp(int id, void *data, uint32_t amount, uint32_t timeout)
555
539
*p = (*p)->next ;
556
540
_smutex.unlock ();
557
541
558
- uint32_t alloc_len = q->alloc_len ;
542
+ uint32_t pdu_len = sizeof ( struct packet ) + q->alloc_len ;
559
543
free (q);
560
- _heap_usage -= sizeof (struct packet ) + alloc_len;
561
- MBED_ASSERT (_heap_usage >= 0 );
562
-
544
+ _heap_usage -= pdu_len;
563
545
return len;
564
546
}
565
547
}
@@ -575,23 +557,19 @@ void ESP8266::_clear_socket_packets(int id)
575
557
while (*p) {
576
558
if ((*p)->id == id || id == ESP8266_ALL_SOCKET_IDS) {
577
559
struct packet *q = *p;
578
- int alloc_len = q->alloc_len ;
560
+ int pdu_len = sizeof ( struct packet ) + q->alloc_len ;
579
561
580
562
if (_packets_end == &(*p)->next ) {
581
563
_packets_end = p; // Set last packet next field/_packets
582
564
}
583
565
*p = (*p)->next ;
584
- _heap_usage -= sizeof (struct packet ) + alloc_len;
585
-
586
566
free (q);
567
+ _heap_usage -= pdu_len;
587
568
} else {
588
569
// Point to last packet next field
589
570
p = &(*p)->next ;
590
571
}
591
572
}
592
- if (id == ESP8266_ALL_SOCKET_IDS) {
593
- MBED_ASSERT (_heap_usage == 0 );
594
- }
595
573
}
596
574
597
575
bool ESP8266::close (int id)
0 commit comments