Skip to content

Commit 29066a3

Browse files
committed
fix for readString not working on UDP example, changed read_needed to read_if_needed
1 parent 761681e commit 29066a3

File tree

7 files changed

+52
-25
lines changed

7 files changed

+52
-25
lines changed

libraries/WiFiS3/src/Modem.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,19 @@ 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+
rv = true;
162+
first_call = true;
163+
st = IDLE;
164+
}
165+
else {
166+
/* add 4 because OK\r\n is always added at the end of data */
167+
data_to_be_received = to_be_rx + 4;
168+
data_received = 0;
169+
st = WAIT_FOR_DATA;
170+
}
171+
rx.clear();
165172
}
166173
}
167174
break;
@@ -206,7 +213,9 @@ bool ModemClass::buf_read(const string &prompt, string &data_res) {
206213
found = true;
207214
read_by_size = false;
208215
res = true;
209-
data_res = data_res.substr(0, data_res.length() - (sizeof(RESULT_OK) - 1));
216+
if(data_res.size() > 0) {
217+
data_res = data_res.substr(0, data_res.length() - (sizeof(RESULT_OK) - 1));
218+
}
210219
}
211220
}
212221
else {

libraries/WiFiS3/src/WiFiClient.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,23 @@ 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+
this->flush();
134+
rv = 0;
129135
}
130136
}
131137
}
132138
return rv;
133139
}
134140

135141
/* -------------------------------------------------------------------------- */
136-
bool WiFiClient::read_needed(size_t s) {
142+
void WiFiClient::read_if_needed(size_t s) {
137143
/* -------------------------------------------------------------------------- */
138144
if(rx_buffer != nullptr) {
139145
if((size_t)rx_buffer->available() < s) {
@@ -155,7 +161,7 @@ int WiFiClient::read() {
155161
/* -------------------------------------------------------------------------- */
156162
int WiFiClient::read(uint8_t *buf, size_t size) {
157163
/* -------------------------------------------------------------------------- */
158-
read_needed(size);
164+
read_if_needed(size);
159165
int rv = 0;
160166
bool go_on = true;
161167
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: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,17 +124,23 @@ 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+
this->flush();
135+
rv = 0;
130136
}
131137
}
132138
}
133139
return rv;
134140
}
135141

136142
/* -------------------------------------------------------------------------- */
137-
bool WiFiSSLClient::read_needed(size_t s) {
143+
void WiFiSSLClient::read_if_needed(size_t s) {
138144
/* -------------------------------------------------------------------------- */
139145
if((size_t)rx_buffer->available() < s) {
140146
_read();
@@ -154,7 +160,7 @@ int WiFiSSLClient::read() {
154160
/* -------------------------------------------------------------------------- */
155161
int WiFiSSLClient::read(uint8_t *buf, size_t size) {
156162
/* -------------------------------------------------------------------------- */
157-
read_needed(size);
163+
read_if_needed(size);
158164
int rv = 0;
159165
bool go_on = true;
160166
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: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,23 @@ 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+
this->flush();
191+
rv = 0;
186192
}
187193
}
188194
}
189195
return rv;
190196
}
191197

192198
/* -------------------------------------------------------------------------- */
193-
bool WiFiUDP::read_needed(size_t s) {
199+
void WiFiUDP::read_if_needed(size_t s) {
194200
/* -------------------------------------------------------------------------- */
195201
if((size_t)rx_buffer.available() < s) {
196202
_read();
@@ -210,7 +216,7 @@ int WiFiUDP::read() {
210216
/* -------------------------------------------------------------------------- */
211217
int WiFiUDP::read(unsigned char* buf, size_t size) {
212218
/* -------------------------------------------------------------------------- */
213-
read_needed(size);
219+
read_if_needed(size);
214220
int rv = 0;
215221
bool go_on = true;
216222
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)