From e4528056c9d852ff51e82af5cc40d2708c746523 Mon Sep 17 00:00:00 2001 From: Austin's Creations <1mcneilaus@gmail.com> Date: Mon, 13 Jun 2022 18:10:11 -0400 Subject: [PATCH 1/3] add esp32 support --- src/Ethernet.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Ethernet.h b/src/Ethernet.h index 0045de88..3bc3959b 100644 --- a/src/Ethernet.h +++ b/src/Ethernet.h @@ -259,6 +259,12 @@ class EthernetServer : public Server { EthernetClient available(); EthernetClient accept(); virtual void begin(); +#ifdef ESP32 + void begin(uint16_t port) + { + _port = port; + } +#endif virtual size_t write(uint8_t); virtual size_t write(const uint8_t *buf, size_t size); virtual operator bool(); From f00f1f1212828d8c6469200804535ff83f4fd321 Mon Sep 17 00:00:00 2001 From: Austin's Creations <1mcneilaus@gmail.com> Date: Mon, 13 Jun 2022 18:20:37 -0400 Subject: [PATCH 2/3] implement SPIClass --- src/Ethernet.cpp | 94 ++++++++++++++++++++++++++++++------------- src/Ethernet.h | 8 ++++ src/utility/w5100.cpp | 60 ++++++++++++++------------- src/utility/w5100.h | 6 +++ 4 files changed, 112 insertions(+), 56 deletions(-) diff --git a/src/Ethernet.cpp b/src/Ethernet.cpp index 9257090c..36efae80 100644 --- a/src/Ethernet.cpp +++ b/src/Ethernet.cpp @@ -23,9 +23,47 @@ #include "utility/w5100.h" #include "Dhcp.h" +#ifdef CONFIG_IDF_TARGET_ESP32 + #ifdef ETH_USE_HSPI + SPIClass spiETH = SPIClass(HSPI); + #elif defined(ETH_USE_FSPI) + SPIClass spiETH = SPIClass(FSPI); + #else // use default VSPI port + SPIClass spiETH = SPIClass(VSPI); + #endif +#else + #ifdef ETH_USE_HSPI + SPIClass spiETH = SPIClass(HSPI); + #elif defined(ETH_USE_FSPI) + SPIClass spiETH = SPIClass(FSPI); + #else // use FSPI port + #ifdef ARDUINO_ARCH_SAMD + SPIClassSAMD spiETH = SPI; + #else + SPIClass spiETH = SPI; + #endif + #endif +#endif + IPAddress EthernetClass::_dnsServerAddress; DhcpClass* EthernetClass::_dhcp = NULL; +/*************************************************************************************** +** Function name: getSPIinstance +** Description: Get the instance of the SPI class +***************************************************************************************/ +#ifdef ARDUINO_ARCH_SAMD + SPIClassSAMD& EthernetClass::getSPIinstance(void) + { + return spiETH; + } +#else + SPIClass& EthernetClass::getSPIinstance(void) + { + return spiETH; + } +#endif + int EthernetClass::begin(uint8_t *mac, unsigned long timeout, unsigned long responseTimeout) { static DhcpClass s_dhcp; @@ -33,21 +71,21 @@ int EthernetClass::begin(uint8_t *mac, unsigned long timeout, unsigned long resp // Initialise the basic info if (W5100.init() == 0) return 0; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.setMACAddress(mac); W5100.setIPAddress(IPAddress(0,0,0,0).raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); // Now try to get our config info from a DHCP server int ret = _dhcp->beginWithDHCP(mac, timeout, responseTimeout); if (ret == 1) { // We've successfully found a DHCP server and got our configuration // info, so set things accordingly - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.setIPAddress(_dhcp->getLocalIp().raw_address()); W5100.setGatewayIp(_dhcp->getGatewayIp().raw_address()); W5100.setSubnetMask(_dhcp->getSubnetMask().raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); _dnsServerAddress = _dhcp->getDnsServerIp(); socketPortRand(micros()); } @@ -81,7 +119,7 @@ void EthernetClass::begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress g void EthernetClass::begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet) { if (W5100.init() == 0) return; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.setMACAddress(mac); #ifdef ESP8266 W5100.setIPAddress(&ip[0]); @@ -96,7 +134,7 @@ void EthernetClass::begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress g W5100.setGatewayIp(gateway._address); W5100.setSubnetMask(subnet._address); #endif - SPI.endTransaction(); + spiETH.endTransaction(); _dnsServerAddress = dns; } @@ -138,11 +176,11 @@ int EthernetClass::maintain() case DHCP_CHECK_RENEW_OK: case DHCP_CHECK_REBIND_OK: //we might have got a new IP. - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.setIPAddress(_dhcp->getLocalIp().raw_address()); W5100.setGatewayIp(_dhcp->getGatewayIp().raw_address()); W5100.setSubnetMask(_dhcp->getSubnetMask().raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); _dnsServerAddress = _dhcp->getDnsServerIp(); break; default: @@ -156,82 +194,82 @@ int EthernetClass::maintain() void EthernetClass::MACAddress(uint8_t *mac_address) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.getMACAddress(mac_address); - SPI.endTransaction(); + spiETH.endTransaction(); } IPAddress EthernetClass::localIP() { IPAddress ret; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.getIPAddress(ret.raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); return ret; } IPAddress EthernetClass::subnetMask() { IPAddress ret; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.getSubnetMask(ret.raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); return ret; } IPAddress EthernetClass::gatewayIP() { IPAddress ret; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.getGatewayIp(ret.raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); return ret; } void EthernetClass::setMACAddress(const uint8_t *mac_address) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.setMACAddress(mac_address); - SPI.endTransaction(); + spiETH.endTransaction(); } void EthernetClass::setLocalIP(const IPAddress local_ip) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); IPAddress ip = local_ip; W5100.setIPAddress(ip.raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); } void EthernetClass::setSubnetMask(const IPAddress subnet) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); IPAddress ip = subnet; W5100.setSubnetMask(ip.raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); } void EthernetClass::setGatewayIP(const IPAddress gateway) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); IPAddress ip = gateway; W5100.setGatewayIp(ip.raw_address()); - SPI.endTransaction(); + spiETH.endTransaction(); } void EthernetClass::setRetransmissionTimeout(uint16_t milliseconds) { if (milliseconds > 6553) milliseconds = 6553; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.setRetransmissionTime(milliseconds * 10); - SPI.endTransaction(); + spiETH.endTransaction(); } void EthernetClass::setRetransmissionCount(uint8_t num) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.setRetransmissionCount(num); - SPI.endTransaction(); + spiETH.endTransaction(); } diff --git a/src/Ethernet.h b/src/Ethernet.h index 3bc3959b..8163cfd0 100644 --- a/src/Ethernet.h +++ b/src/Ethernet.h @@ -49,6 +49,7 @@ #include +#include #include "Client.h" #include "Server.h" #include "Udp.h" @@ -108,6 +109,13 @@ class EthernetClass { friend class EthernetClient; friend class EthernetServer; friend class EthernetUDP; + +#ifdef ARDUINO_ARCH_SAMD + static SPIClassSAMD& getSPIinstance(void); // Get SPI class handle +#else + static SPIClass& getSPIinstance(void); // Get SPI class handle +#endif + private: // Opens a socket(TCP or UDP or IP_RAW mode) static uint8_t socketBegin(uint8_t protocol, uint16_t port); diff --git a/src/utility/w5100.cpp b/src/utility/w5100.cpp index 6e7dbd20..d1916d81 100644 --- a/src/utility/w5100.cpp +++ b/src/utility/w5100.cpp @@ -101,10 +101,14 @@ uint8_t W5100Class::init(void) delay(560); //Serial.println("w5100 init"); - SPI.begin(); +#if defined(ETH_SCLK) && defined(ETH_MISO) && defined(ETH_MOSI) && defined(ETHERNET_CS_PIN) + spiETH.begin(ETH_SCLK, ETH_MISO, ETH_MOSI, ETHERNET_CS_PIN); +#else + spiETH.begin(); +#endif initSS(); resetSS(); - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); // Attempt W5200 detection first, because W5200 does not properly // reset its SPI state when CS goes high (inactive). Communication @@ -189,10 +193,10 @@ uint8_t W5100Class::init(void) } else { //Serial.println("no chip :-("); chip = 0; - SPI.endTransaction(); + spiETH.endTransaction(); return 0; // no known chip is responding :-( } - SPI.endTransaction(); + spiETH.endTransaction(); initialized = true; return 1; // successful init } @@ -276,15 +280,15 @@ W5100Linkstatus W5100Class::getLinkStatus() if (!init()) return UNKNOWN; switch (chip) { case 52: - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); phystatus = readPSTATUS_W5200(); - SPI.endTransaction(); + spiETH.endTransaction(); if (phystatus & 0x20) return LINK_ON; return LINK_OFF; case 55: - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); phystatus = readPHYCFGR_W5500(); - SPI.endTransaction(); + spiETH.endTransaction(); if (phystatus & 0x01) return LINK_ON; return LINK_OFF; default: @@ -299,11 +303,11 @@ uint16_t W5100Class::write(uint16_t addr, const uint8_t *buf, uint16_t len) if (chip == 51) { for (uint16_t i=0; i> 8); - SPI.transfer(addr & 0xFF); + spiETH.transfer(0xF0); + spiETH.transfer(addr >> 8); + spiETH.transfer(addr & 0xFF); addr++; - SPI.transfer(buf[i]); + spiETH.transfer(buf[i]); resetSS(); } } else if (chip == 52) { @@ -312,13 +316,13 @@ uint16_t W5100Class::write(uint16_t addr, const uint8_t *buf, uint16_t len) cmd[1] = addr & 0xFF; cmd[2] = ((len >> 8) & 0x7F) | 0x80; cmd[3] = len & 0xFF; - SPI.transfer(cmd, 4); + spiETH.transfer(cmd, 4); #ifdef SPI_HAS_TRANSFER_BUF - SPI.transfer(buf, NULL, len); + spiETH.transfer(buf, NULL, len); #else // TODO: copy 8 bytes at a time to cmd[] and block transfer for (uint16_t i=0; i < len; i++) { - SPI.transfer(buf[i]); + spiETH.transfer(buf[i]); } #endif resetSS(); @@ -366,15 +370,15 @@ uint16_t W5100Class::write(uint16_t addr, const uint8_t *buf, uint16_t len) for (uint8_t i=0; i < len; i++) { cmd[i + 3] = buf[i]; } - SPI.transfer(cmd, len + 3); + spiETH.transfer(cmd, len + 3); } else { - SPI.transfer(cmd, 3); + spiETH.transfer(cmd, 3); #ifdef SPI_HAS_TRANSFER_BUF - SPI.transfer(buf, NULL, len); + spiETH.transfer(buf, NULL, len); #else // TODO: copy 8 bytes at a time to cmd[] and block transfer for (uint16_t i=0; i < len; i++) { - SPI.transfer(buf[i]); + spiETH.transfer(buf[i]); } #endif } @@ -391,17 +395,17 @@ uint16_t W5100Class::read(uint16_t addr, uint8_t *buf, uint16_t len) for (uint16_t i=0; i < len; i++) { setSS(); #if 1 - SPI.transfer(0x0F); - SPI.transfer(addr >> 8); - SPI.transfer(addr & 0xFF); + spiETH.transfer(0x0F); + spiETH.transfer(addr >> 8); + spiETH.transfer(addr & 0xFF); addr++; - buf[i] = SPI.transfer(0); + buf[i] = spiETH.transfer(0); #else cmd[0] = 0x0F; cmd[1] = addr >> 8; cmd[2] = addr & 0xFF; cmd[3] = 0; - SPI.transfer(cmd, 4); // TODO: why doesn't this work? + spiETH.transfer(cmd, 4); // TODO: why doesn't this work? buf[i] = cmd[3]; addr++; #endif @@ -413,9 +417,9 @@ uint16_t W5100Class::read(uint16_t addr, uint8_t *buf, uint16_t len) cmd[1] = addr & 0xFF; cmd[2] = (len >> 8) & 0x7F; cmd[3] = len & 0xFF; - SPI.transfer(cmd, 4); + spiETH.transfer(cmd, 4); memset(buf, 0, len); - SPI.transfer(buf, len); + spiETH.transfer(buf, len); resetSS(); } else { // chip == 55 setSS(); @@ -457,9 +461,9 @@ uint16_t W5100Class::read(uint16_t addr, uint8_t *buf, uint16_t len) cmd[2] = ((addr >> 6) & 0xE0) | 0x18; // 2K buffers #endif } - SPI.transfer(cmd, 3); + spiETH.transfer(cmd, 3); memset(buf, 0, len); - SPI.transfer(buf, len); + spiETH.transfer(buf, len); resetSS(); } return len; diff --git a/src/utility/w5100.h b/src/utility/w5100.h index b2e8ec83..850b474b 100644 --- a/src/utility/w5100.h +++ b/src/utility/w5100.h @@ -17,6 +17,12 @@ #include #include +#ifdef ARDUINO_ARCH_SAMD + extern SPIClassSAMD spiETH; +#else + extern SPIClass spiETH; +#endif + // Safe for all chips #define SPI_ETHERNET_SETTINGS SPISettings(14000000, MSBFIRST, SPI_MODE0) From ed44f4242504cbf8ff8e376512b42b913417e2e9 Mon Sep 17 00:00:00 2001 From: Austin's Creations <1mcneilaus@gmail.com> Date: Mon, 15 Aug 2022 05:31:08 -0400 Subject: [PATCH 3/3] missing spiETH changes --- src/EthernetClient.cpp | 12 +++---- src/socket.cpp | 82 +++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/src/EthernetClient.cpp b/src/EthernetClient.cpp index 5a20c748..e3860fdb 100644 --- a/src/EthernetClient.cpp +++ b/src/EthernetClient.cpp @@ -182,9 +182,9 @@ uint16_t EthernetClient::localPort() { if (_sockindex >= MAX_SOCK_NUM) return 0; uint16_t port; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); port = W5100.readSnPORT(_sockindex); - SPI.endTransaction(); + spiETH.endTransaction(); return port; } @@ -194,9 +194,9 @@ IPAddress EthernetClient::remoteIP() { if (_sockindex >= MAX_SOCK_NUM) return IPAddress((uint32_t)0); uint8_t remoteIParray[4]; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.readSnDIPR(_sockindex, remoteIParray); - SPI.endTransaction(); + spiETH.endTransaction(); return IPAddress(remoteIParray); } @@ -206,8 +206,8 @@ uint16_t EthernetClient::remotePort() { if (_sockindex >= MAX_SOCK_NUM) return 0; uint16_t port; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); port = W5100.readSnDPORT(_sockindex); - SPI.endTransaction(); + spiETH.endTransaction(); return port; } diff --git a/src/socket.cpp b/src/socket.cpp index 7dc83feb..7f26e6ce 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -71,7 +71,7 @@ uint8_t EthernetClass::socketBegin(uint8_t protocol, uint16_t port) if (chip == 51) maxindex = 4; // W5100 chip never supports more than 4 sockets #endif //Serial.printf("W5000socket begin, protocol=%d, port=%d\n", protocol, port); - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); // look at all the hardware sockets, use any that are closed (unused) for (s=0; s < maxindex; s++) { status[s] = W5100.readSnSR(s); @@ -95,7 +95,7 @@ uint8_t EthernetClass::socketBegin(uint8_t protocol, uint16_t port) if (stat == SnSR::CLOSE_WAIT) goto closemakesocket; } #endif - SPI.endTransaction(); + spiETH.endTransaction(); return MAX_SOCK_NUM; // all sockets are in use closemakesocket: //Serial.printf("W5000socket close\n"); @@ -119,7 +119,7 @@ uint8_t EthernetClass::socketBegin(uint8_t protocol, uint16_t port) state[s].RX_inc = 0; state[s].TX_FSR = 0; //Serial.printf("W5000socket prot=%d, RX_RD=%d\n", W5100.readSnMR(s), state[s].RX_RD); - SPI.endTransaction(); + spiETH.endTransaction(); return s; } @@ -135,7 +135,7 @@ uint8_t EthernetClass::socketBeginMulticast(uint8_t protocol, IPAddress ip, uint if (chip == 51) maxindex = 4; // W5100 chip never supports more than 4 sockets #endif //Serial.printf("W5000socket begin, protocol=%d, port=%d\n", protocol, port); - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); // look at all the hardware sockets, use any that are closed (unused) for (s=0; s < maxindex; s++) { status[s] = W5100.readSnSR(s); @@ -159,7 +159,7 @@ uint8_t EthernetClass::socketBeginMulticast(uint8_t protocol, IPAddress ip, uint if (stat == SnSR::CLOSE_WAIT) goto closemakesocket; } #endif - SPI.endTransaction(); + spiETH.endTransaction(); return MAX_SOCK_NUM; // all sockets are in use closemakesocket: //Serial.printf("W5000socket close\n"); @@ -191,16 +191,16 @@ uint8_t EthernetClass::socketBeginMulticast(uint8_t protocol, IPAddress ip, uint state[s].RX_inc = 0; state[s].TX_FSR = 0; //Serial.printf("W5000socket prot=%d, RX_RD=%d\n", W5100.readSnMR(s), state[s].RX_RD); - SPI.endTransaction(); + spiETH.endTransaction(); return s; } // Return the socket's status // uint8_t EthernetClass::socketStatus(uint8_t s) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); uint8_t status = W5100.readSnSR(s); - SPI.endTransaction(); + spiETH.endTransaction(); return status; } @@ -209,9 +209,9 @@ uint8_t EthernetClass::socketStatus(uint8_t s) // void EthernetClass::socketClose(uint8_t s) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.execCmdSn(s, Sock_CLOSE); - SPI.endTransaction(); + spiETH.endTransaction(); } @@ -219,13 +219,13 @@ void EthernetClass::socketClose(uint8_t s) // uint8_t EthernetClass::socketListen(uint8_t s) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); if (W5100.readSnSR(s) != SnSR::INIT) { - SPI.endTransaction(); + spiETH.endTransaction(); return 0; } W5100.execCmdSn(s, Sock_LISTEN); - SPI.endTransaction(); + spiETH.endTransaction(); return 1; } @@ -235,11 +235,11 @@ uint8_t EthernetClass::socketListen(uint8_t s) void EthernetClass::socketConnect(uint8_t s, uint8_t * addr, uint16_t port) { // set destination IP - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.writeSnDIPR(s, addr); W5100.writeSnDPORT(s, port); W5100.execCmdSn(s, Sock_CONNECT); - SPI.endTransaction(); + spiETH.endTransaction(); } @@ -248,9 +248,9 @@ void EthernetClass::socketConnect(uint8_t s, uint8_t * addr, uint16_t port) // void EthernetClass::socketDisconnect(uint8_t s) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.execCmdSn(s, Sock_DISCON); - SPI.endTransaction(); + spiETH.endTransaction(); } @@ -305,7 +305,7 @@ int EthernetClass::socketRecv(uint8_t s, uint8_t *buf, int16_t len) { // Check how much data is available int ret = state[s].RX_RSR; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); if (ret < len) { uint16_t rsr = getSnRX_RSR(s); ret = rsr - state[s].RX_inc; @@ -342,7 +342,7 @@ int EthernetClass::socketRecv(uint8_t s, uint8_t *buf, int16_t len) state[s].RX_inc = inc; } } - SPI.endTransaction(); + spiETH.endTransaction(); //Serial.printf("socketRecv, ret=%d\n", ret); return ret; } @@ -351,9 +351,9 @@ uint16_t EthernetClass::socketRecvAvailable(uint8_t s) { uint16_t ret = state[s].RX_RSR; if (ret == 0) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); uint16_t rsr = getSnRX_RSR(s); - SPI.endTransaction(); + spiETH.endTransaction(); ret = rsr - state[s].RX_inc; state[s].RX_RSR = ret; //Serial.printf("sockRecvAvailable s=%d, RX_RSR=%d\n", s, ret); @@ -366,10 +366,10 @@ uint16_t EthernetClass::socketRecvAvailable(uint8_t s) uint8_t EthernetClass::socketPeek(uint8_t s) { uint8_t b; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); uint16_t ptr = state[s].RX_RD; W5100.read((ptr & W5100.SMASK) + W5100.RBASE(s), &b, 1); - SPI.endTransaction(); + spiETH.endTransaction(); return b; } @@ -433,10 +433,10 @@ uint16_t EthernetClass::socketSend(uint8_t s, const uint8_t * buf, uint16_t len) // if freebuf is available, start. do { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); freesize = getSnTX_FSR(s); status = W5100.readSnSR(s); - SPI.endTransaction(); + spiETH.endTransaction(); if ((status != SnSR::ESTABLISHED) && (status != SnSR::CLOSE_WAIT)) { ret = 0; break; @@ -445,7 +445,7 @@ uint16_t EthernetClass::socketSend(uint8_t s, const uint8_t * buf, uint16_t len) } while (freesize < ret); // copy data - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); write_data(s, 0, (uint8_t *)buf, ret); W5100.execCmdSn(s, Sock_SEND); @@ -453,16 +453,16 @@ uint16_t EthernetClass::socketSend(uint8_t s, const uint8_t * buf, uint16_t len) while ( (W5100.readSnIR(s) & SnIR::SEND_OK) != SnIR::SEND_OK ) { /* m2008.01 [bj] : reduce code */ if ( W5100.readSnSR(s) == SnSR::CLOSED ) { - SPI.endTransaction(); + spiETH.endTransaction(); return 0; } - SPI.endTransaction(); + spiETH.endTransaction(); yield(); - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); } /* +2008.01 bj */ W5100.writeSnIR(s, SnIR::SEND_OK); - SPI.endTransaction(); + spiETH.endTransaction(); return ret; } @@ -470,10 +470,10 @@ uint16_t EthernetClass::socketSendAvailable(uint8_t s) { uint8_t status=0; uint16_t freesize=0; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); freesize = getSnTX_FSR(s); status = W5100.readSnSR(s); - SPI.endTransaction(); + spiETH.endTransaction(); if ((status == SnSR::ESTABLISHED) || (status == SnSR::CLOSE_WAIT)) { return freesize; } @@ -484,7 +484,7 @@ uint16_t EthernetClass::socketBufferData(uint8_t s, uint16_t offset, const uint8 { //Serial.printf(" bufferData, offset=%d, len=%d\n", offset, len); uint16_t ret =0; - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); uint16_t txfree = getSnTX_FSR(s); if (len > txfree) { ret = txfree; // check size not to exceed MAX size. @@ -492,7 +492,7 @@ uint16_t EthernetClass::socketBufferData(uint8_t s, uint16_t offset, const uint8 ret = len; } write_data(s, offset, buf, ret); - SPI.endTransaction(); + spiETH.endTransaction(); return ret; } @@ -502,16 +502,16 @@ bool EthernetClass::socketStartUDP(uint8_t s, uint8_t* addr, uint16_t port) ((port == 0x00)) ) { return false; } - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.writeSnDIPR(s, addr); W5100.writeSnDPORT(s, port); - SPI.endTransaction(); + spiETH.endTransaction(); return true; } bool EthernetClass::socketSendUDP(uint8_t s) { - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); W5100.execCmdSn(s, Sock_SEND); /* +2008.01 bj */ @@ -519,18 +519,18 @@ bool EthernetClass::socketSendUDP(uint8_t s) if (W5100.readSnIR(s) & SnIR::TIMEOUT) { /* +2008.01 [bj]: clear interrupt */ W5100.writeSnIR(s, (SnIR::SEND_OK|SnIR::TIMEOUT)); - SPI.endTransaction(); + spiETH.endTransaction(); //Serial.printf("sendUDP timeout\n"); return false; } - SPI.endTransaction(); + spiETH.endTransaction(); yield(); - SPI.beginTransaction(SPI_ETHERNET_SETTINGS); + spiETH.beginTransaction(SPI_ETHERNET_SETTINGS); } /* +2008.01 bj */ W5100.writeSnIR(s, SnIR::SEND_OK); - SPI.endTransaction(); + spiETH.endTransaction(); //Serial.printf("sendUDP ok\n"); /* Sent ok */