@@ -49,18 +49,13 @@ extern "C" {
4949#include " utility/debug.h"
5050}
5151
52- static uint8_t SLAVESELECT = 10 ; // ss
53- static uint8_t SLAVEREADY = 7 ; // handshake pin
54- static uint8_t SLAVERESET = 5 ; // reset pin
55-
5652static bool inverted_reset = false ;
53+ SPIClass *WIFININA_SPIWIFI=&SPI;
54+ int8_t WIFININA_SLAVESELECT = 10 , WIFININA_SLAVEREADY = 7 ,
55+ WIFININA_SLAVERESET = 5 , WIFININA_SLAVEGPIO0 = 6 ;
5756
5857#define DELAY_TRANSFER ()
5958
60- #ifndef SPIWIFI
61- #define SPIWIFI SPI
62- #endif
63-
6459bool SpiDrv::initialized = false ;
6560
6661void SpiDrv::begin ()
@@ -70,41 +65,56 @@ void SpiDrv::begin()
7065#endif
7166
7267#ifdef SPIWIFI_SS
73- SLAVESELECT = SPIWIFI_SS;
68+ WIFININA_SLAVESELECT = SPIWIFI_SS;
7469#endif
75-
70+
7671#ifdef SPIWIFI_ACK
77- SLAVEREADY = SPIWIFI_ACK;
72+ WIFININA_SLAVEREADY = SPIWIFI_ACK;
7873#endif
79-
74+
8075#ifdef SPIWIFI_RESET
81- SLAVERESET = (uint8_t )SPIWIFI_RESET;
76+ WIFININA_SLAVERESET = (uint8_t )SPIWIFI_RESET;
77+ #endif
78+
79+ #ifdef NINA_GPIO0
80+ WIFININA_SLAVEGPIO0 = NINA_GPIO0;
81+ #endif
82+
83+ #ifdef SPIWIFI
84+ WIFININA_SPIWIFI = &SPIWIFI;
8285#endif
8386
8487#ifdef ARDUINO_SAMD_MKRVIDOR4000
8588 inverted_reset = false ;
8689#else
87- if (SLAVERESET > PINS_COUNT) {
90+ #ifdef PINS_COUNT
91+ if (WIFININA_SLAVERESET > PINS_COUNT) {
8892 inverted_reset = true ;
89- SLAVERESET = ~SLAVERESET ;
93+ WIFININA_SLAVERESET = ~WIFININA_SLAVERESET ;
9094 }
9195#endif
96+ #endif
97+
98+ WIFININA_SPIWIFI->begin ();
99+ pinMode (WIFININA_SLAVESELECT, OUTPUT);
100+ pinMode (WIFININA_SLAVEREADY, INPUT);
101+ pinMode (WIFININA_SLAVERESET, OUTPUT);
92102
93- SPIWIFI.begin ();
94- pinMode (SLAVESELECT, OUTPUT);
95- pinMode (SLAVEREADY, INPUT);
96- pinMode (SLAVERESET, OUTPUT);
97- pinMode (NINA_GPIO0, OUTPUT);
103+ if (WIFININA_SLAVEGPIO0 >= 0 ) {
104+ pinMode (WIFININA_SLAVEGPIO0, OUTPUT);
105+ digitalWrite (WIFININA_SLAVEGPIO0, HIGH);
106+ }
98107
99- digitalWrite (NINA_GPIO0, HIGH);
100- digitalWrite (SLAVESELECT, HIGH);
101- digitalWrite (SLAVERESET, inverted_reset ? HIGH : LOW);
108+ digitalWrite (WIFININA_SLAVESELECT, HIGH);
109+ digitalWrite (WIFININA_SLAVERESET, inverted_reset ? HIGH : LOW);
102110 delay (10 );
103- digitalWrite (SLAVERESET , inverted_reset ? LOW : HIGH);
111+ digitalWrite (WIFININA_SLAVERESET , inverted_reset ? LOW : HIGH);
104112 delay (750 );
105113
106- digitalWrite (NINA_GPIO0, LOW);
107- pinMode (NINA_GPIO0, INPUT);
114+ if (WIFININA_SLAVEGPIO0 >= 0 ) {
115+ digitalWrite (WIFININA_SLAVEGPIO0, LOW);
116+ pinMode (WIFININA_SLAVEGPIO0, INPUT);
117+ }
108118
109119#ifdef _DEBUG_
110120 INIT_TRIGGER ()
@@ -114,36 +124,36 @@ void SpiDrv::begin()
114124}
115125
116126void SpiDrv::end () {
117- digitalWrite (SLAVERESET , inverted_reset ? HIGH : LOW);
127+ digitalWrite (WIFININA_SLAVERESET , inverted_reset ? HIGH : LOW);
118128
119- pinMode (SLAVESELECT , INPUT);
129+ pinMode (WIFININA_SLAVESELECT , INPUT);
120130
121- SPIWIFI. end ();
131+ WIFININA_SPIWIFI-> end ();
122132
123133 initialized = false ;
124134}
125135
126136void SpiDrv::spiSlaveSelect ()
127137{
128- SPIWIFI. beginTransaction (SPISettings (8000000 , MSBFIRST, SPI_MODE0));
129- digitalWrite (SLAVESELECT, LOW);
138+ WIFININA_SPIWIFI-> beginTransaction (SPISettings (8000000 , MSBFIRST, SPI_MODE0));
139+ digitalWrite (WIFININA_SLAVESELECT, LOW);
130140
131141 // wait for up to 5 ms for the NINA to indicate it is not ready for transfer
132142 // the timeout is only needed for the case when the shield or module is not present
133- for (unsigned long start = millis (); (digitalRead (SLAVEREADY ) != HIGH) && (millis () - start) < 5 ;);
143+ for (unsigned long start = millis (); (digitalRead (WIFININA_SLAVEREADY ) != HIGH) && (millis () - start) < 5 ;);
134144}
135145
136146
137147void SpiDrv::spiSlaveDeselect ()
138148{
139- digitalWrite (SLAVESELECT ,HIGH);
140- SPIWIFI. endTransaction ();
149+ digitalWrite (WIFININA_SLAVESELECT ,HIGH);
150+ WIFININA_SPIWIFI-> endTransaction ();
141151}
142152
143153
144154char SpiDrv::spiTransfer (volatile char data)
145155{
146- char result = SPIWIFI. transfer (data);
156+ char result = WIFININA_SPIWIFI-> transfer (data);
147157 DELAY_TRANSFER ();
148158
149159 return result; // return the received byte
@@ -197,10 +207,10 @@ char SpiDrv::readChar()
197207 return 0 ; \
198208 }else \
199209
200- #define waitSlaveReady () (digitalRead(SLAVEREADY ) == LOW)
201- #define waitSlaveSign () (digitalRead(SLAVEREADY ) == HIGH)
202- #define waitSlaveSignalH () while (digitalRead(SLAVEREADY ) != HIGH){}
203- #define waitSlaveSignalL () while (digitalRead(SLAVEREADY ) != LOW){}
210+ #define waitSlaveReady () (digitalRead(WIFININA_SLAVEREADY ) == LOW)
211+ #define waitSlaveSign () (digitalRead(WIFININA_SLAVEREADY ) == HIGH)
212+ #define waitSlaveSignalH () while (digitalRead(WIFININA_SLAVEREADY ) != HIGH){}
213+ #define waitSlaveSignalL () while (digitalRead(WIFININA_SLAVEREADY ) != LOW){}
204214
205215void SpiDrv::waitForSlaveSign ()
206216{
@@ -562,7 +572,10 @@ void SpiDrv::sendCmd(uint8_t cmd, uint8_t numParam)
562572
563573int SpiDrv::available ()
564574{
565- return (digitalRead (NINA_GPIO0) != LOW);
575+ if (WIFININA_SLAVEGPIO0 >= 0 ) {
576+ return (digitalRead (WIFININA_SLAVEGPIO0) != LOW);
577+ }
578+ return true ;
566579}
567580
568581SpiDrv spiDrv;
0 commit comments