Skip to content

Commit 92a6720

Browse files
committed
Merge branch 'eth-fix' into ide-1.5.x
Conflicts: build/shared/revisions.txt
2 parents b0dc317 + 88def54 commit 92a6720

File tree

7 files changed

+25
-12
lines changed

7 files changed

+25
-12
lines changed

build/shared/revisions.txt

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ ARDUINO 1.5.5 BETA
55
* avr: Fixed buffer overflow in File::doBuffer() (dreggy)
66
* avr: Fixed timeout in Bridge::transfer()
77
* sam: Fixed SPI initialization (when using extended API and multiple CS)
8+
* avr: Fixed behavior of EthernetClient::flush()
89

910
ARDUINO 1.5.4 BETA 2013.09.10
1011

libraries/Ethernet/arch/avr/utility/socket.cpp

+12-6
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ uint16_t recvfrom(SOCKET s, uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t
256256
switch (W5100.readSnMR(s) & 0x07)
257257
{
258258
case SnMR::UDP :
259-
W5100.read_data(s, (uint8_t *)ptr, head, 0x08);
259+
W5100.read_data(s, ptr, head, 0x08);
260260
ptr += 8;
261261
// read peer's IP address, port number.
262262
addr[0] = head[0];
@@ -268,14 +268,14 @@ uint16_t recvfrom(SOCKET s, uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t
268268
data_len = head[6];
269269
data_len = (data_len << 8) + head[7];
270270

271-
W5100.read_data(s, (uint8_t *)ptr, buf, data_len); // data copy.
271+
W5100.read_data(s, ptr, buf, data_len); // data copy.
272272
ptr += data_len;
273273

274274
W5100.writeSnRX_RD(s, ptr);
275275
break;
276276

277277
case SnMR::IPRAW :
278-
W5100.read_data(s, (uint8_t *)ptr, head, 0x06);
278+
W5100.read_data(s, ptr, head, 0x06);
279279
ptr += 6;
280280

281281
addr[0] = head[0];
@@ -285,19 +285,19 @@ uint16_t recvfrom(SOCKET s, uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t
285285
data_len = head[4];
286286
data_len = (data_len << 8) + head[5];
287287

288-
W5100.read_data(s, (uint8_t *)ptr, buf, data_len); // data copy.
288+
W5100.read_data(s, ptr, buf, data_len); // data copy.
289289
ptr += data_len;
290290

291291
W5100.writeSnRX_RD(s, ptr);
292292
break;
293293

294294
case SnMR::MACRAW:
295-
W5100.read_data(s,(uint8_t*)ptr,head,2);
295+
W5100.read_data(s, ptr, head, 2);
296296
ptr+=2;
297297
data_len = head[0];
298298
data_len = (data_len<<8) + head[1] - 2;
299299

300-
W5100.read_data(s,(uint8_t*) ptr,buf,data_len);
300+
W5100.read_data(s, ptr, buf, data_len);
301301
ptr += data_len;
302302
W5100.writeSnRX_RD(s, ptr);
303303
break;
@@ -310,6 +310,12 @@ uint16_t recvfrom(SOCKET s, uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t
310310
return data_len;
311311
}
312312

313+
/**
314+
* @brief Wait for buffered transmission to complete.
315+
*/
316+
void flush(SOCKET s) {
317+
// TODO
318+
}
313319

314320
uint16_t igmpsend(SOCKET s, const uint8_t * buf, uint16_t len)
315321
{

libraries/Ethernet/arch/avr/utility/w5100.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -98,21 +98,21 @@ void W5100Class::recv_data_processing(SOCKET s, uint8_t *data, uint16_t len, uin
9898
{
9999
uint16_t ptr;
100100
ptr = readSnRX_RD(s);
101-
read_data(s, (uint8_t *)ptr, data, len);
101+
read_data(s, ptr, data, len);
102102
if (!peek)
103103
{
104104
ptr += len;
105105
writeSnRX_RD(s, ptr);
106106
}
107107
}
108108

109-
void W5100Class::read_data(SOCKET s, volatile uint8_t *src, volatile uint8_t *dst, uint16_t len)
109+
void W5100Class::read_data(SOCKET s, volatile uint16_t src, volatile uint8_t *dst, uint16_t len)
110110
{
111111
uint16_t size;
112112
uint16_t src_mask;
113113
uint16_t src_ptr;
114114

115-
src_mask = (uint16_t)src & RMASK;
115+
src_mask = src & RMASK;
116116
src_ptr = RBASE[s] + src_mask;
117117

118118
if( (src_mask + len) > RSIZE )

libraries/Ethernet/arch/avr/utility/w5100.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class W5100Class {
138138
* the data from Receive buffer. Here also take care of the condition while it exceed
139139
* the Rx memory uper-bound of socket.
140140
*/
141-
void read_data(SOCKET s, volatile uint8_t * src, volatile uint8_t * dst, uint16_t len);
141+
void read_data(SOCKET s, volatile uint16_t src, volatile uint8_t * dst, uint16_t len);
142142

143143
/**
144144
* @brief This function is being called by send() and sendto() function also.

libraries/Ethernet/arch/sam/utility/socket.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,12 @@ uint16_t recvfrom(SOCKET s, uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t
310310
return data_len;
311311
}
312312

313+
/**
314+
* @brief Wait for buffered transmission to complete.
315+
*/
316+
void flush(SOCKET s) {
317+
// TODO
318+
}
313319

314320
uint16_t igmpsend(SOCKET s, const uint8_t * buf, uint16_t len)
315321
{

libraries/Ethernet/src/EthernetClient.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,7 @@ int EthernetClient::peek() {
120120
}
121121

122122
void EthernetClient::flush() {
123-
while (available())
124-
read();
123+
::flush(_sock);
125124
}
126125

127126
void EthernetClient::stop() {

libraries/Ethernet/src/utility/socket.h

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ extern int16_t recv(SOCKET s, uint8_t * buf, int16_t len); // Receive data (TCP)
1313
extern uint16_t peek(SOCKET s, uint8_t *buf);
1414
extern uint16_t sendto(SOCKET s, const uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port); // Send data (UDP/IP RAW)
1515
extern uint16_t recvfrom(SOCKET s, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t *port); // Receive data (UDP/IP RAW)
16+
extern void flush(SOCKET s); // Wait for transmission to complete
1617

1718
extern uint16_t igmpsend(SOCKET s, const uint8_t * buf, uint16_t len);
1819

0 commit comments

Comments
 (0)