Skip to content

Commit ec21701

Browse files
committed
Merge remote-tracking branch 'arduino/readString_not_working_fix' into HEAD
2 parents 89ab55b + bc086b1 commit ec21701

File tree

7 files changed

+55
-25
lines changed

7 files changed

+55
-25
lines changed

libraries/WiFiS3/src/Modem.cpp

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,22 @@ bool ModemClass::read_by_size_finished(string &rx) {
156156
int pos_space = rx.find(" ");
157157
if(pos != string::npos && pos_space != string::npos) {
158158
string n = rx.substr(pos_space,pos);
159-
/* add 4 because OK\r\n is always added at the end of data */
160-
data_to_be_received = atoi(n.c_str()) + 4;
161-
rx.clear();
162-
data_received = 0;
163-
st = WAIT_FOR_DATA;
164-
159+
int to_be_rx = atoi(n.c_str());
160+
if(to_be_rx <= 0) {
161+
while( _serial->available() ){
162+
_serial->read();
163+
}
164+
rv = true;
165+
first_call = true;
166+
st = IDLE;
167+
}
168+
else {
169+
/* add 4 because OK\r\n is always added at the end of data */
170+
data_to_be_received = to_be_rx + 4;
171+
data_received = 0;
172+
st = WAIT_FOR_DATA;
173+
}
174+
rx.clear();
165175
}
166176
}
167177
break;
@@ -206,7 +216,12 @@ bool ModemClass::buf_read(const string &prompt, string &data_res) {
206216
found = true;
207217
read_by_size = false;
208218
res = true;
209-
data_res = data_res.substr(0, data_res.length() - (sizeof(RESULT_OK) - 1));
219+
if(data_res.size() > 0) {
220+
data_res = data_res.substr(0, data_res.length() - (sizeof(RESULT_OK) - 1));
221+
}
222+
else {
223+
break;
224+
}
210225
}
211226
}
212227
else {

libraries/WiFiS3/src/WiFiClient.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,22 @@ int WiFiClient::_read() {
123123
modem.read_using_size();
124124

125125
if(modem.write(string(PROMPT(_CLIENTRECEIVE)),res, "%s%d,%d\r\n" , CMD_WRITE(_CLIENTRECEIVE), _sock, size)) {
126-
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
127-
rx_buffer->store((uint8_t)res[i]);
128-
rv++;
126+
if(res.size() > 0) {
127+
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
128+
rx_buffer->store((uint8_t)res[i]);
129+
rv++;
130+
}
131+
}
132+
else {
133+
rv = 0;
129134
}
130135
}
131136
}
132137
return rv;
133138
}
134139

135140
/* -------------------------------------------------------------------------- */
136-
bool WiFiClient::read_needed(size_t s) {
141+
void WiFiClient::read_if_needed(size_t s) {
137142
/* -------------------------------------------------------------------------- */
138143
if(rx_buffer != nullptr) {
139144
if((size_t)rx_buffer->available() < s) {
@@ -155,7 +160,7 @@ int WiFiClient::read() {
155160
/* -------------------------------------------------------------------------- */
156161
int WiFiClient::read(uint8_t *buf, size_t size) {
157162
/* -------------------------------------------------------------------------- */
158-
read_needed(size);
163+
read_if_needed(size);
159164
int rv = 0;
160165
bool go_on = true;
161166
if(_sock >= 0 && rx_buffer != nullptr) {

libraries/WiFiS3/src/WiFiClient.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class WiFiClient : public Client {
6767
void getSocket();
6868
std::shared_ptr<FifoBuffer<uint8_t,RX_BUFFER_DIM>> rx_buffer;
6969
int _read();
70-
bool read_needed(size_t s);
70+
void read_if_needed(size_t s);
7171
void clear_buffer();
7272
bool destroy_at_distructor;
7373

libraries/WiFiS3/src/WiFiSSLClient.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,17 +124,22 @@ int WiFiSSLClient::_read() {
124124
modem.avoid_trim_results();
125125
modem.read_using_size();
126126
if(modem.write(string(PROMPT(_SSLCLIENTRECEIVE)),res, "%s%d,%d\r\n" , CMD_WRITE(_SSLCLIENTRECEIVE), _sock, size)) {
127-
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
128-
rx_buffer->store((uint8_t)res[i]);
129-
rv++;
127+
if(res.size() > 0) {
128+
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
129+
rx_buffer->store((uint8_t)res[i]);
130+
rv++;
131+
}
132+
}
133+
else {
134+
rv = 0;
130135
}
131136
}
132137
}
133138
return rv;
134139
}
135140

136141
/* -------------------------------------------------------------------------- */
137-
bool WiFiSSLClient::read_needed(size_t s) {
142+
void WiFiSSLClient::read_if_needed(size_t s) {
138143
/* -------------------------------------------------------------------------- */
139144
if((size_t)rx_buffer->available() < s) {
140145
_read();
@@ -154,7 +159,7 @@ int WiFiSSLClient::read() {
154159
/* -------------------------------------------------------------------------- */
155160
int WiFiSSLClient::read(uint8_t *buf, size_t size) {
156161
/* -------------------------------------------------------------------------- */
157-
read_needed(size);
162+
read_if_needed(size);
158163
int rv = 0;
159164
bool go_on = true;
160165
for(int i = 0; i < size && go_on; i++) {

libraries/WiFiS3/src/WiFiSSLClient.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class WiFiSSLClient : public WiFiClient {
5959
bool _custom_root = false;
6060
void getSocket();
6161
int _read();
62-
bool read_needed(size_t s);
62+
void read_if_needed(size_t s);
6363

6464
private:
6565
void upload_default_Cert();

libraries/WiFiS3/src/WiFiUdp.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,22 @@ int WiFiUDP::_read() {
180180
modem.avoid_trim_results();
181181
modem.read_using_size();
182182
if(modem.write(string(PROMPT(_UDPREAD)),res, "%s%d,%d\r\n" , CMD_WRITE(_UDPREAD), _sock, size)) {
183-
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
184-
rx_buffer.store((uint8_t)res[i]);
185-
rv++;
183+
if(res.size() > 0) {
184+
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
185+
rx_buffer.store((uint8_t)res[i]);
186+
rv++;
187+
}
188+
}
189+
else {
190+
rv = 0;
186191
}
187192
}
188193
}
189194
return rv;
190195
}
191196

192197
/* -------------------------------------------------------------------------- */
193-
bool WiFiUDP::read_needed(size_t s) {
198+
void WiFiUDP::read_if_needed(size_t s) {
194199
/* -------------------------------------------------------------------------- */
195200
if((size_t)rx_buffer.available() < s) {
196201
_read();
@@ -210,7 +215,7 @@ int WiFiUDP::read() {
210215
/* -------------------------------------------------------------------------- */
211216
int WiFiUDP::read(unsigned char* buf, size_t size) {
212217
/* -------------------------------------------------------------------------- */
213-
read_needed(size);
218+
read_if_needed(size);
214219
int rv = 0;
215220
bool go_on = true;
216221
for(int i = 0; i < size && go_on; i++) {

libraries/WiFiS3/src/WiFiUdp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class WiFiUDP : public UDP {
3939

4040
protected:
4141
virtual int _read();
42-
virtual bool read_needed(size_t s);
42+
virtual void read_if_needed(size_t s);
4343

4444
public:
4545
WiFiUDP(); // Constructor

0 commit comments

Comments
 (0)