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
}
@@ -436,15 +422,15 @@ void ESP8266::_packet_handler()
436
422
pdu_len = sizeof (struct packet ) + amount;
437
423
438
424
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 );
425
+ MBED_WARNING1 ( MBED_MAKE_ERROR (MBED_MODULE_DRIVER, MBED_ERROR_CODE_ENOBUFS), \
426
+ " ESP8266::_packet_handler(), Buffer size %u exceeded " , _MAX_HEAP_USAGE );
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;
@@ -456,8 +442,9 @@ void ESP8266::_packet_handler()
456
442
457
443
if (_parser.read ((char *)(packet + 1 ), amount) < amount) {
458
444
free (packet);
445
+ MBED_WARNING (MBED_MAKE_ERROR (MBED_MODULE_DRIVER, MBED_ERROR_CODE_INVALID_DATA_DETECTED), \
446
+ " ESP8266::_packet_handler(), AT parser returning less data than expected" );
459
447
_heap_usage -= pdu_len;
460
- MBED_ASSERT (_heap_usage >= 0 );
461
448
return ;
462
449
}
463
450
@@ -498,11 +485,10 @@ int32_t ESP8266::recv_tcp(int id, void *data, uint32_t amount, uint32_t timeout)
498
485
499
486
_smutex.unlock ();
500
487
501
- uint32_t alloc_len = q->alloc_len ;
488
+ uint32_t pdu_len = sizeof ( struct packet ) + q->alloc_len ;
502
489
uint32_t len = q->len ;
503
490
free (q);
504
- _heap_usage -= sizeof (struct packet ) + alloc_len;
505
- MBED_ASSERT (_heap_usage >= 0 );
491
+ _heap_usage -= pdu_len;
506
492
return len;
507
493
} else { // return only partial packet
508
494
memcpy (data, q+1 , amount);
@@ -555,11 +541,9 @@ int32_t ESP8266::recv_udp(int id, void *data, uint32_t amount, uint32_t timeout)
555
541
*p = (*p)->next ;
556
542
_smutex.unlock ();
557
543
558
- uint32_t alloc_len = q->alloc_len ;
544
+ uint32_t pdu_len = sizeof ( struct packet ) + q->alloc_len ;
559
545
free (q);
560
- _heap_usage -= sizeof (struct packet ) + alloc_len;
561
- MBED_ASSERT (_heap_usage >= 0 );
562
-
546
+ _heap_usage -= pdu_len;
563
547
return len;
564
548
}
565
549
}
@@ -575,23 +559,19 @@ void ESP8266::_clear_socket_packets(int id)
575
559
while (*p) {
576
560
if ((*p)->id == id || id == ESP8266_ALL_SOCKET_IDS) {
577
561
struct packet *q = *p;
578
- int alloc_len = q->alloc_len ;
562
+ int pdu_len = sizeof ( struct packet ) + q->alloc_len ;
579
563
580
564
if (_packets_end == &(*p)->next ) {
581
565
_packets_end = p; // Set last packet next field/_packets
582
566
}
583
567
*p = (*p)->next ;
584
- _heap_usage -= sizeof (struct packet ) + alloc_len;
585
-
586
568
free (q);
569
+ _heap_usage -= pdu_len;
587
570
} else {
588
571
// Point to last packet next field
589
572
p = &(*p)->next ;
590
573
}
591
574
}
592
- if (id == ESP8266_ALL_SOCKET_IDS) {
593
- MBED_ASSERT (_heap_usage == 0 );
594
- }
595
575
}
596
576
597
577
bool ESP8266::close (int id)
0 commit comments