From 1fb0f84c469805f6b002b2f143c1951dcea5e709 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 10 Jul 2015 12:05:55 +0200 Subject: [PATCH] WiFi: move init from constructor to method Zero SPI library is not responding correctly when invoked before main() AVR compatibility ok fixes arduino/ArduinoCore-samd#18 --- libraries/WiFi/src/WiFi.cpp | 2 -- libraries/WiFi/src/utility/spi_drv.cpp | 4 ++-- libraries/WiFi/src/utility/spi_drv.h | 10 +++++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/libraries/WiFi/src/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp index 4cb750e636a..88b18b0d252 100644 --- a/libraries/WiFi/src/WiFi.cpp +++ b/libraries/WiFi/src/WiFi.cpp @@ -32,8 +32,6 @@ uint16_t WiFiClass::_server_port[MAX_SOCK_NUM] = { 0, 0, 0, 0 }; WiFiClass::WiFiClass() { - // Driver initialization - init(); } void WiFiClass::init() diff --git a/libraries/WiFi/src/utility/spi_drv.cpp b/libraries/WiFi/src/utility/spi_drv.cpp index 638947a66b8..2bf1bb71512 100644 --- a/libraries/WiFi/src/utility/spi_drv.cpp +++ b/libraries/WiFi/src/utility/spi_drv.cpp @@ -43,8 +43,8 @@ void SpiDrv::begin() pinMode(SLAVEREADY, INPUT); pinMode(WIFILED, OUTPUT); - digitalWrite(SCK, LOW); - digitalWrite(MOSI, LOW); + // digitalWrite(SCK, LOW); + // digitalWrite(MOSI, LOW); digitalWrite(SS, HIGH); digitalWrite(SLAVESELECT, HIGH); digitalWrite(WIFILED, LOW); diff --git a/libraries/WiFi/src/utility/spi_drv.h b/libraries/WiFi/src/utility/spi_drv.h index da71a0bc76b..ab8d97d66b9 100644 --- a/libraries/WiFi/src/utility/spi_drv.h +++ b/libraries/WiFi/src/utility/spi_drv.h @@ -30,11 +30,15 @@ #define DUMMY_DATA 0xFF -#define WAIT_FOR_SLAVE_SELECT() \ - SpiDrv::waitForSlaveReady(); \ +#define WAIT_FOR_SLAVE_SELECT() \ + if (!initialized) { \ + SpiDrv::begin(); \ + initialized = true; \ + } \ + SpiDrv::waitForSlaveReady(); \ SpiDrv::spiSlaveSelect(); - +static bool initialized = false; class SpiDrv {